OpenMRS vs DHIS2

OpenMRS keeps patient-level records at the point of care, while DHIS2 collects aggregate data and follows individuals in Tracker programs. Many national programs run both, so the choice often depends on which record and reporting job comes first.

On this page

When to choose OpenMRS or DHIS2 for your health records

Choose OpenMRS when the work centers on the patient in front of a clinician. It is a patient-based medical record system platform designed for resource-constrained environments, so it fits clinics and hospitals that need a longitudinal record of each patient's visits, observations and orders. Choose DHIS2 when the main question is aggregate: counts of services, disease surveillance, indicators reported up to a ministry, or Tracker programs that follow a person through a defined pathway such as immunization. The decision turns on three questions. Do clinicians need a longitudinal patient record at the point of care? Does national reporting need aggregate data? And does the work happen offline on mobile devices, where the DHIS2 Android Capture app and its offline synchronization may matter more than the clinical record itself?

Many national programs run both, so the question is often sequencing rather than exclusion. Confirm early which system owns each data element, because a clinical record and a reporting platform can hold overlapping fields such as patient identifiers, encounters and program enrollments. Ask your implementation partner and the national program team to write down the source of truth for each field, how identifiers are matched, and whether data moves by interface, batch export or manual entry. Check whether the standards the other system supports, such as the FHIR interfaces listed in the OpenMRS FHIR2 module, are sufficient for the exchange you need.

Plan for operating effort on both sides. OpenMRS runs on Tomcat or Jetty with MySQL, MariaDB or PostgreSQL, and DHIS2 runs as a WAR file on a servlet container with PostgreSQL, where DHIS2 advises reading the upgrade notes for every version between your current and target release. Ask for those upgrade and data migration responsibilities, the hosting and backup model, and who owns configuration changes in writing before you commit to a sequence. These are the costs that recur long after the first deployment.

Which platform fits which health program scenario

This table maps common health program scenarios to the platform that usually fits better and the condition that makes it so. Read each row as a conditional fit: the answer changes if the clinical workflow, data granularity or connectivity changes, so confirm those conditions against your program before deciding.

ScenarioBetter fitCondition that makes it the better fit
A clinic or hospital recording each patient's visits and clinical historyOpenMRSClinicians need a longitudinal patient record used at the point of care, with encounters, orders and clinical forms for each individual patient.
A national immunization program following children over timeDHIS2The program needs a unique person followed across schedule events, such as Tracker enrollments, with aggregate dashboards for national oversight.
A facility-level system producing monthly aggregate reportsDHIS2Reporting depends on aggregated counts sent up a hierarchy to district or national levels, rather than on individual clinical records held at the facility.
A community program with intermittent connectivity in the fieldDepends on the workflowDHIS2 Android Capture supports Tracker data offline with later synchronization. Confirm the offline clinical workflow you need in OpenMRS with its current mobile and module options before choosing.
A team that must exchange records with other health systemsDepends on the integrationOpenMRS offers a FHIR2 REST API focused on FHIR R4 and SMART on FHIR support through a module. DHIS2 Tracker data can be shared through standards such as FHIR. Confirm the exact resource types and exchange patterns each partner requires.
A program that runs both patient care and national reportingBoth, used togetherFacilities record care in OpenMRS while national reporting draws on DHIS2. Agree in writing which system owns each data element and how records are mapped between them.

How OpenMRS and DHIS2 are built and deployed

OpenMRS and DHIS2 are both Java applications that a team installs in its own infrastructure, but they ask for different operating models. The cards below cover the core runtime, the packaging choices, and what each release model means for patching, upgrades and staffing.

OpenMRS core runtime

The OpenMRS core is written in Java and built with Maven. It runs on Tomcat or Jetty and supports MySQL, MariaDB and PostgreSQL. Your team owns the servlet container, the database and the module set, so the first decision is which database your DBAs can back up and restore. Confirm which database and container versions the release you pick supports, and whether your implementer has tested that combination.

OpenMRS distribution packaging

OpenMRS ships as a Standalone package with an embedded database, a WAR file for Tomcat with an existing MySQL database, an SDK for module development, and the O3 Reference Application container stack. The packaging decides who carries the patching burden. A standalone package suits a pilot, while a WAR on your own Tomcat means your platform team applies container and OS patches on its own schedule.

O3 container stack components

The O3 Docker Compose setup runs four services: a MariaDB database, the OpenMRS backend, an Nginx frontend serving the 3.x modules, and an Nginx gateway. An optional Certbot service handles SSL certificates. Patching becomes image-based, so you need people who can rebuild and redeploy containers and manage TLS renewal, and you should confirm how your hosting team plans to handle the gateway and certificates.

DHIS2 WAR and servlet container

The DHIS2 WAR file requires a Java servlet container such as Tomcat or Jetty, plus PostgreSQL. Each stable release has its own release branch, so a DHIS2 instance is tied to a branch you must track. Your team needs Java and PostgreSQL operations skills, and should plan around the upgrade notes DHIS2 asks you to read for every version between your current and target release.

DHIS2 service layer and Web API

The dhis2-core repository, written in Java and licensed BSD-3-Clause, holds the DHIS2 service layer and Web API. Data collection, aggregate analytics and Tracker programs are all served through that API, so integrations and custom apps depend on it. Before committing, check which API endpoints your integration partners call and whether those endpoints change between release branches.

Release models and operational load

OpenMRS offers a platform line and a 3.x reference application that are maintained as separate tracks, so you must decide whether to stay on the 2.x platform or move to O3. DHIS2 asks you to step through release branches with upgrade notes. In both cases, budget for test environments, module compatibility checks and a named owner for upgrades. Ask any implementer for its upgrade procedure and how it is priced in a fixed-scope quote.

How the data models differ: patient records versus Tracker entities

The data model decides more than the interface. OpenMRS is built around a patient-based longitudinal medical record: one patient, many encounters, observations, orders and programs accumulated over time for clinical care. DHIS2 supports both aggregated values and individual records, so its model is not one thing. Before you compare the two, list the data your program must hold, then ask whether each element is a clinical history of one person, a tracked person or case followed across time, or a count reported upward for planning. That answer points you toward one platform or both.

DHIS2 Tracker associates records with a unique entity, such as a person, that can be followed across program stages over time. The standard illustration is a child's immunization schedule, where the entity persists while enrollments and events are recorded against it. Event programs work differently: they record individual events without tying them to a persistent identity, which is the pattern used for anonymous case reporting. Confirm with your data protection and program leads whether any event program must avoid linking records to a person, because that choice shapes identifiers, access rules and what can be exported.

The model choice carries into reporting and clinical use. A patient-level record in OpenMRS supports clinicians reviewing a person's history at the point of care, while Tracker supports program monitoring that follows entities through defined stages and rolls results into aggregate indicators. Check with the vendor and your implementer how each platform handles identifier design, consent metadata and export to downstream systems, including the FHIR-based sharing that DHIS2 documents for Tracker data. Mapping these decisions early prevents rebuilding identifiers and reporting logic after go-live.

Side-by-side capability comparison for OpenMRS and DHIS2

This table compares OpenMRS and DHIS2 on purpose, data model, governance, stack, offline use, FHIR and identity. Read it to see where each platform starts, then check the rows that matter for your deployment, since many national programs run both together.

CapabilityOpenMRSDHIS2
Primary purposePatient-based medical record system for point-of-care use in resource-constrained settingsHealth information platform for aggregate reporting, plus Tracker programs that follow individuals and event programs for case reporting
Data modelPatient-centered clinical recordsAggregated values and individual records, with Tracker entities followed over time (for example, a child's immunization schedule)
LicensingMPL 2.0, with Healthcare DisclaimerBSD 3-clause
Governing bodyOpenMRS Inc., a 501(c)(3) nonprofit, with a volunteer community and implementer organizationsHISP Centre at the University of Oslo
Runtime stackJava core built with Maven, running on Tomcat or Jetty; O3 reference application runs as a Docker Compose stackJava web application delivered as a WAR file for Tomcat or Jetty
Database optionsMySQL, MariaDB or PostgreSQL; standalone package includes an embedded databasePostgreSQL (confirm any other supported databases for your release)
Offline mobile supportConfirm offline capture for your deployment and modules with OpenMRS implementersDHIS2 Android Capture app supports Tracker programs online and offline, with automatic synchronization
FHIR supportFHIR2 module provides a REST API focused on FHIR R4, with translation support for R3Tracker data can be shared with other systems through standards such as FHIR (confirm the exact resources and version for your build)
Identity optionsOAuth2 Login module replaces basic authentication with an OAuth 2.0 provider; SMART on FHIR module uses Keycloak as the default authorization serverConfirm supported authentication and federation options against the DHIS2 documentation for your version
Current versionsO3 Reference Application 3.7.1 and OpenMRS Platform 2.8.1 (confirm before planning an upgrade)Confirm the current stable release and its upgrade notes on the DHIS2 downloads page

What the licenses cost you and what is paid for

OpenMRS is released under the Mozilla Public License 2.0, and the openmrs-core repository carries a Healthcare Disclaimer alongside copyright held by OpenMRS Inc. The software itself carries no license fee. OpenMRS Inc. is a 501(c)(3) nonprofit that provides the fiscal, legal and infrastructure foundation for the project, while volunteers and implementer organizations customize and deploy it. Money changes hands mainly for the people who configure, host and support a deployment.

  • Free packages. The OpenMRS download page lists a Standalone package with an embedded database, an SDK for module development, the O3 Reference Application container stack and a WAR file for Apache Tomcat with an existing MySQL database. None of these carries a license charge under MPL 2.0.
  • Paid help is a service. Implementers and vendors charge for requirements work, configuration, module development, hosting, training and support. Those agreements are separate from the software license, so compare them as service contracts.
  • Healthcare Disclaimer. The disclaimer is part of the published terms. Read its full text and ask counsel how it affects your clinical validation and regulatory filings.
  • File-level copyleft. MPL 2.0 requires changes to MPL-covered files to be shared under the same license, while separate modules can carry other terms. Confirm how each custom module is licensed before it reaches production.

Before you sign, ask who maintains custom modules after go-live and whether the provider offers any indemnity beyond the license terms.

What drives the running cost of OpenMRS and DHIS2

The running cost of both platforms is mostly people and hosting, not licenses, because both are free to download under open-source licenses (MPL 2.0 for OpenMRS, BSD 3-clause for DHIS2). The first cost decision is who runs the stack. For OpenMRS, the core is Java built with Maven, running on Tomcat or Jetty with MySQL, MariaDB or PostgreSQL, so you need staff or an implementer who can operate a servlet container, a relational database and the module set you choose. DHIS2 adds the same kind of stack: its WAR file requires a Java servlet container such as Tomcat or Jetty and PostgreSQL. Ask each candidate partner to name who will patch the container, tune the database and handle database backups, and to price that work as a recurring line rather than an afterthought. Mobile devices are a separate cost for DHIS2 offline capture, since the Android Capture app needs phones or tablets, device management and a sync plan that you must confirm for your own network conditions.

Implementation and data migration are mostly one-time costs. For OpenMRS, these include configuring concepts, forms and locations, and for O3 deployments, migrating legacy HTML forms to the O3 form schema if you have them. For DHIS2, the one-time work centers on program and metadata design for Tracker programs, plus any migration of existing records. Upgrades are the cost most often underestimated. DHIS2 advises reading the upgrade notes for every version between your current and target release, so an upgrade planned across several releases is effectively several upgrade reviews. OpenMRS upgrades carry the same risk for custom modules, which must be retested against each new platform version. Ask for upgrade assumptions in writing: how many releases are covered, who tests custom modules, and whether an upgrade is included in the support retainer or priced separately.

When you request a quote, specify scope in writing: the modules, Tracker programs or forms in scope, the data migration volume you expect, and the deliverables, including documentation and runbooks. Ask for the support window and response expectations, whether training for your staff is included and how often it is repeated, and who is responsible for backups and restore testing. Ask for the upgrade policy, including the number of versions covered, and for the hourly or fixed-fee basis of any extra work. DeployOpen works from fixed-scope written agreements and offers retainers for ongoing support and upgrades, so a quote should separate one-time implementation from recurring retainer terms. Request an itemized view of infrastructure you pay for directly, such as cloud accounts and mobile device management, so you can compare totals across both platforms.

Moving from one platform to the other without losing records

This sequence separates what moves as data from what must be rebuilt as configuration, then proves the mapping with clinical and program staff before any cutover. The output is a documented, reconciled migration that either platform can run alongside the other while the switch is validated.

  1. Inventory clinical workflows and data holdings

    Start by listing every workflow that touches patient records in the current system, including intake, visits, referrals, lab follow-up and reporting. Record which data lives in OpenMRS as patient-level encounters and observations, which lives in DHIS2 as aggregate datasets or Tracker enrollments, and which exists only in spreadsheets or side systems. The team, led by the client's clinical informatics lead with DeployOpen support, confirms how much clinical workflow sits in each system. That answer drives the switching cost, and it must be confirmed in the client's own environment. Done when every workflow has an owner and a system of record.

  2. Define identifiers and the patient matching rule

    Decide how a patient in OpenMRS corresponds to a unique entity in DHIS2 Tracker before any export runs. Identifier types, check digits, and the rule for resolving duplicates should be written down and agreed with records staff. Tracker associates records with a unique entity that can be followed over time, so the mapping must preserve one person as one entity rather than creating new records each time data moves. Done when a signed mapping sheet covers every identifier type and a duplicate-handling procedure has been tested on a sample extract.

  3. Map data elements, programs and forms

    Build a field-by-field map from OpenMRS concepts, encounter types and forms to DHIS2 data elements, program stages, tracked entity attributes and, where needed, aggregate data sets. Mark each item as transferred, transformed, rebuilt or retired. Forms and programs do not copy across automatically, so each one is rebuilt in the target and linked to the map. User roles and identity configuration, including any OAuth2 or single sign-on setup in OpenMRS, are documented separately because they are rebuilt, not exported. Done when every source field has a recorded disposition and an owner for each rebuilt form.

  4. Validate the mapping with clinical and program staff

    Run a set of representative test records through the mapping and have clinical and program staff review the results on screen. Reviewers check that diagnoses, dates, vaccination or follow-up schedules and aggregate totals mean the same thing after transformation. Discrepancies go into a log with a decision recorded for each one. This step is where most meaning is lost, so it should not be shortened. Done when reviewers have signed off each program and data set, and every open discrepancy has a documented resolution.

  5. Migrate historical records and extracts

    Export historical patient-level data from the source in the agreed format, load it into the target in a non-production environment, and reconcile record counts, identifiers and sample values against the source. Aggregate extracts from DHIS2 are loaded as data values for the periods they cover, and exported Tracker data can move through standards such as FHIR where the receiving system supports them. Data that cannot be mapped is kept in a read-only archive instead of being forced into fields. Done when reconciliation reports show matching counts and every exception is listed with its disposition.

  6. Run both systems in parallel

    For an agreed period, staff enter records in the current system while the new system receives the same activity, and reports from both are compared. Parallel running exposes gaps in forms, validation rules, offline behavior and user training that testing with sample data does not reveal. Mobile and offline workflows, such as the DHIS2 Android Capture app for Tracker programs, should be tested with real connectivity conditions at the sites that use them. The length of the parallel period is a decision for the client and is not set by this sequence. Done when discrepancy rates are understood, accepted by program leads, and each remaining gap has an owner.

  7. Cut over in a defined order

    Switch sites or programs one group at a time, in an order agreed in advance, starting with the lowest-risk workflow and ending with the most clinically sensitive. Freeze writes in the source for each group, run a final incremental export, reconcile it, and then open the target for data entry. Keep the source read-only for the agreed retention window so records can be checked. Done when each group has a signed cutover record and the source is confirmed read-only.

  8. Retain the source and document the handover

    After cutover, keep the source system and its backups available under read-only access, and document the mapping, reconciliation results, known exceptions and rebuilt configuration in a handover pack. Operators receive runbooks for backup, user administration and upgrades, since DHIS2 advises reading the upgrade notes for every version between the current and target release. Done when the client's team can restore the archive and explain every exception without the migration team present.

What implementing each platform involves and where projects run long

An OpenMRS implementation starts with the concept dictionary and form design, because every clinical form, order and report depends on concepts that the local team has agreed on. Next comes the interface decision: the O3 Reference Application is the 3.x line with a micro-frontend user interface, while the 2.x platform keeps the legacy interface. Choose this before forms are built, since form work differs between them. Identity is the third area. If you plan to use the OAuth2 Login module, which replaces basic authentication with an OAuth 2.0 provider, confirm who creates accounts, how roles map from the identity provider and whether service accounts need JWT. Deployment runs on Tomcat with an existing MySQL, MariaDB or PostgreSQL database, or on the O3 Docker Compose stack. Budget for training clinicians and local administrators, since form changes after go-live are where most support load lands.

A DHIS2 implementation centers on metadata design: data elements, indicators, organisation units and, for Tracker, the program stages and attributes that describe each tracked entity. Tracker programs also need a decision on whether each record follows a person over time or is an anonymous event program, because that choice changes the data model. Mobile rollout is a separate workstream. The Android Capture app supports Tracker programs offline with automatic synchronization, so the team must plan device procurement, configuration, sync testing in low-connectivity sites and device replacement. Reporting and integration with other systems, including sharing Tracker data through FHIR, complete the scope. The WAR deployment needs a servlet container and PostgreSQL, and DHIS2 advises reading the upgrade notes for every version between the current and target release, which should be scheduled as recurring effort.

Projects usually run long for four reasons. First, unsettled data definitions: if concepts in OpenMRS or data elements in DHIS2 change after forms or reports are built, rework spreads across both systems. Second, identity and access decisions made late, such as role mapping, account provisioning and who can see which patients, block testing and training. Third, migration of legacy data, including converting old OpenMRS HTML forms to the O3 form schema, which the community has an existing tool for, but which still needs clinical validation. Fourth, mobile device logistics, where procurement, distribution and offline sync testing take longer than teams expect. Ask any implementer for a written scope that names these four items, the owner of each and the acceptance tests before work starts.

Questions buyers ask before choosing or hiring help

Can we run OpenMRS or DHIS2 entirely with our own in-house team?

Yes, in principle, both are open-source and self-hostable, but the workload depends on what you are building. OpenMRS needs Java, Maven, Tomcat or Jetty and a MySQL, MariaDB or PostgreSQL database, plus module and form configuration work. DHIS2 needs a Java servlet container, PostgreSQL, careful handling of each release branch and reading the upgrade notes for every version between your current and target release. Confirm whether your staff already have these skills and how many people can cover upgrades and on-call duty, because those recurring tasks are where in-house teams often stretch thin.

What drives the cost and effort of each platform?

Cost comes from people, infrastructure and the work of adapting the platform, and most of it is effort rather than licensing, since both platforms are open source. For OpenMRS, the main drivers are clinical workflow design, form and module configuration, and integration with laboratory or pharmacy systems. For DHIS2, the drivers are program and data element design, metadata governance, aggregate reporting and any Tracker program with mobile collection. Ask any partner to split the quote into one-time build work, hosting, and recurring support and upgrades, and to name who pays for each part.

How long does a project usually take, and what sets that time?

No project duration is supplied for this comparison, so treat any number you hear as unverified until it is tied to a written scope. The time depends on the number of clinical or reporting workflows, how much metadata or form design is needed, the number of sites and users, data migration from existing systems, integration with other systems, and the training and approval cycles in your organization. Ask for a timeline broken into phases with named deliverables and the decisions the client must make at each phase.

What do the clinical, data and IT teams need to contribute?

Clinical staff define the workflows, forms or program stages and approve the content. Data and reporting staff define indicators, data element definitions, reporting periods and the rules for aggregate versus individual records. IT staff own hosting, identity, databases, backups, network access and certificates. Naming these owners before work starts prevents the most common delays. Confirm who signs off on data definitions and who can approve changes after go-live.

Can OpenMRS and DHIS2 run together in one health system?

Yes, they can run side by side, and national programs sometimes use them that way, with OpenMRS for patient-level care at the point of service and DHIS2 for aggregate reporting and Tracker programs. DHIS2 Tracker data can be shared with other systems through standards such as FHIR, but the exact integration path, identifiers, data mapping and which system owns each data element must be designed and tested. Ask a partner to document the data flow, the source of truth for each field and the failure behavior when one system is unavailable.

How does offline mobile collection change the design?

Offline collection moves design decisions to the start of the project. The DHIS2 Android Capture app supports Tracker programs on phones and tablets, collecting data online and offline with automatic synchronization, which means conflict handling, device management and program configuration must be planned before rollout. OpenMRS is built for resource-constrained environments, but you should confirm with its implementers and modules which offline and mobile capabilities your deployment actually requires, rather than assuming they match the DHIS2 approach. Test synchronization with realistic connectivity and device counts before scaling.

What should we ask a partner to include in a written scope?

A written scope should list the platforms and versions, the workflows or programs in scope, the data migration and integration work, the hosting environment, the security and access model, and the documentation and training deliverables. It should also state the acceptance criteria, the client responsibilities, the change process, and what happens after go-live, including upgrades and support. DeployOpen plans, implements, integrates, hardens, backs up, upgrades and documents self-hosted platforms in your own infrastructure, and most engagements are fixed-scope with scope, deliverables and timelines agreed in writing before work starts. Ask for the quote to follow directly from that written scope.

How DeployOpen helps teams choose, implement or migrate

DeployOpen plans, implements, integrates, documents and supports self-hosted open-source platforms inside the client's own infrastructure. For OpenMRS vs DHIS2, we start by mapping which workflows need a patient-level record at the point of care and which need aggregate reporting or Tracker programs, then shape the work around that split.

How we scope

  • Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
  • The written scope lists which care settings, data flows and reporting obligations each platform must cover.
  • We confirm hosting location, offline requirements and connectivity at each site before any design work begins.
  • Ask for a quote built from this written scope, including which integrations and data migrations are included.

How we build

  • We deploy the chosen platform in your cloud accounts, data centers or air-gapped network, not in ours.
  • Integration work covers identity, the mapping of patient and program data, and any exchange with the other platform.
  • Mobile and offline data collection is tested on the devices and network conditions your field teams actually use.
  • Security testing of the deployed platform and its APIs is scoped separately so findings can be tracked to closure.

How we hand over

  • Handover documentation describes the configuration, data model decisions, integration points and operating procedures.
  • We prepare backup and restore procedures and verify them with your team before the handover is accepted.
  • Compliance readiness evidence, such as configuration records and access reviews, is organized for your assessors.
  • Your staff receive walkthroughs of the administration tasks they will own after the engagement closes.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover.
  • Upgrade planning reviews the release notes and upgrade guidance for each version between your current and target release.
  • Retainer scope is agreed in writing, so your team knows which changes, patches and incidents are covered.
  • Ask us to confirm support windows and upgrade paths for each platform version before you commit to a plan.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.