What Pharmacology Tracker Simple Actually Is
The name is pretty much the pitch. It is a lightweight application built to log medications, doses, schedules, and basic patient responses without the bloat of full hospital EMR systems. You input a drug, you set the dosing window, you record when it was given and how the patient reacted. That is the loop. Nothing more complicated than that, and honestly, that is why it still gets recommended in small clinics and research settings. I have seen people try to force it into something it is not, like a full pharmacokinetic modeling platform or a drug interaction engine. That will not work. It does not calculate half-lives or predict CYP450 interactions on its fly. It records what happened. Period.
Setting Up a Pharmacology Tracker Simple Install
Download the package from the official repo, which at last check was hosted on GitHub under the standard open-source licensing. Unzip it. The installer is minimal — there is a setup script and a database migration file. Run the migrations first. I cannot stress this enough. If you run the application before the schema is in place, you will get errors that look catastrophic but are really just missing tables. Took me thirty minutes last year to figure out a production crash that turned out to be exactly this. The default config expects a PostgreSQL backend. You can swap in SQLite for local testing, but do not run it against SQLite in any environment where two people might write at once. You will hit lock contention within hours and the data can corrupt. Postgres handles concurrency fine for a tool this size. After migrations finish, run the seed script if you want the standard medication reference list. It includes most common oral, IV, and topical agents with their standard dosing ranges. The reference list is not exhaustive, and it is definitely not dosing guidance. Treat it as a starting point for lookup, not as a prescribing reference.
How It Actually Works in Practice
The workflow is straightforward once you stop fighting the interface. You create a patient record, which is just a demographics entry linked to a medication log. Then you start entering administrations. Each entry captures the drug name, dose, route, time stamp, and a free-text reaction field. That is it. The reaction field is where most people trip up. It defaults to plain text, which means you will end up with entries like "okay," "fine," "no issue," and "patient tolerating well" all describing the same thing. Build yourself a standardized dropdown for common responses — tolerated, mild nausea, rash noted, elevated LFTs, no reaction — and make the free text optional for unusual findings. This cuts your reporting time significantly because matching unstructured text against structured reports is miserable. The export function supports CSV and a limited JSON output. CSV is what you will actually use. The JSON structure is fine if you are building an integration, but the field naming is inconsistent across versions, so pin your exporter to a specific release and test the output before relying on it for anything automated.
Get the Full Details

Edge Cases That Will Bite You
Here is the thing nobody mentions: off-label documentation. The tracker stores drug names as they are entered, which means if a clinician types "vancomycin" one day and "Vanc" the next, they are treated as separate entries. I ran into this when a compounding pharmacy started using trade names interchangeably with generic names across three different wards. My query for total vancomycin exposure came back with roughly 40 percent of doses missing because they were logged under brand names that did not match the reference table. The workaround was to add a synonym mapping table. It is not built into the default installation, so you need to extend the schema yourself. A simple two-column table linking alternate names to a canonical drug ID handled it cleanly. Took about an afternoon of work and eliminated the data fragmentation entirely. Another issue is renal dosing adjustments. The tracker does not track creatinine clearance or adjust doses automatically. A nurse might document a dose reduction for renal impairment, but the system will not flag that the standard dose was given before the adjustment was made. I learned this the hard way when reviewing a month of data for a sepsis protocol audit. The baseline doses were not flagged, and the follow-up reduced doses had no contextual link to the labs that prompted them. If you need that linkage, you have to build it yourself through custom fields or a separate lab results table joined by timestamp.
What It Cannot Do
Be clear about the limitations before you commit to this tool. It does not integrate with pharmacy dispensing systems. It does not send alerts for duplicate therapy or allergy conflicts. It does not support dose calculations based on weight, BSA, or organ function. It does not have any audit trail that meets HIPAA compliance requirements without significant customization. If any of those features are table stakes for your operation, you should be looking at a proper clinical decision support system instead of something this simple. The most common failure mode is scope creep. Someone installs it for basic medication logging, then slowly adds forms, then integrations, then custom reporting until the codebase is unmaintainable. I have seen two production instances devolve into this state. The project is not designed to scale beyond its intended scope, and the original maintainers are not actively adding enterprise features. If you need something lightweight but with real integration capabilities, a purpose-built open-source medication administration record module would serve you better. They exist, though they require more upfront configuration. Pharmacology Tracker Simple is fine for what it is, which is a straightforward logging tool for environments that do not need automation or clinical decision support baked in.
The source code is readable, the architecture is not overcomplicated, and the database schema is clean. For a small research team tracking medication adherence in an observational study, it does the job. Just understand the boundaries before you expand the use case beyond them.
