OpenMRS 3 (O3) vs OpenMRS 2.x

OpenMRS 3 (O3) replaces the user-facing interface with micro-frontend modules, while OpenMRS 2.x keeps the legacy interface. This page explains what changes for an existing implementation and how to plan the move.

On this page

OpenMRS 3 vs OpenMRS 2.x: when to stay on 2.x and when to move to O3

If your team already runs OpenMRS 2.x, the short answer is that you can stay on 2.x for now if your current forms, integrations and staff training are working and you lack capacity to test a migration. You should move to O3 when you are starting new work, when your frontend needs are changing, or when you have a funded plan to migrate forms and retest. Both platforms are released under the MPL 2.0 and are free to use, so license cost does not decide this. The decision turns on four things: the user-facing frontend, the legacy HTML forms in use, the deployment packaging and your team's capacity to test and migrate.

Start with the frontend and forms. O3 is a new user-facing frontend built on micro-frontend modules, so the screens your clinicians see will change. Inventory every custom HTML form in your 2.x implementation. The community has a tool, built by Palladium Kenya, that migrates legacy OpenMRS HTML forms to the O3 form schema, but it does not remove the need to review each converted form against clinical workflows. Ask your implementation partner or internal developers which forms can be converted automatically, which need rebuilding, and which depend on modules that have no O3 equivalent yet. Confirm that status with the OpenMRS community before you commit.

Packaging affects the move as much as the interface. The current O3 Reference Application is version 3.7.1, released July 13, 2026, and it ships as a Docker Compose stack of four services: a MariaDB database, the OpenMRS backend, an Nginx frontend and an Nginx gateway, with an optional Certbot service. The current Platform is version 2.8.1, released October 7, 2025, and it is deployed as a WAR file into an existing servlet container. If you stay on 2.x, plan security patching and Java runtime upgrades on your current schedule. If you move, test the container stack in a staging environment that mirrors your network controls and backup routine. Read the OpenMRS download page to confirm which package fits your hosting model.

What differs between O3 and 2.x across the stack

This table compares the two OpenMRS generations layer by layer, from the user interface to authentication. Where the supplied facts cover a difference, the cell says so; where they do not, the cell tells you what to confirm in the OpenMRS community or your own test environment before committing to a plan.

LayerOpenMRS 3 (O3) reference applicationOpenMRS 2.x platform and legacy interface
User-facing interfaceA new frontend built on micro-frontend modules, served by Nginx in the Docker Compose stack.Legacy HTML interface. Confirm which screens and workflows your staff use before assuming parity in O3.
BackendRuns the OpenMRS backend alongside the 3.x frontend modules. Confirm which backend module versions your O3 release requires.Java core built with Maven, running on Tomcat or Jetty with MySQL, MariaDB or PostgreSQL. Latest platform version is 2.8.1.
Deployment packagesDocker Compose stack launched with one command. Latest version is 3.7.1. Four services plus an optional Certbot service for SSL.Standalone package with embedded database, or a WAR file for an existing servlet container and database. Latest version is 2.8.1.
Form handlingLegacy HTML forms need migration to the O3 form schema. A community tool built by Palladium Kenya supports this path.Forms run on the legacy HTML interface. Confirm how your custom forms and their data behave after any move to O3.
FHIR2 moduleConfirm the FHIR2 module version and its resource coverage against your O3 release.FHIR2 module provides the FHIR REST API focused on R4, with translation support for R3. Confirm the module version your 2.x build uses.
SMART-on-FHIRThe smartonfhir module supports the SMART App Launch Framework with FHIR2 and uses Keycloak as the default authorization server. Confirm compatibility with your O3 build.The same smartonfhir module is documented for the platform. Confirm which 2.x releases and module versions your apps require.
Authentication optionsThe OAuth2 Login module can replace basic authentication with an OAuth 2.0 provider, documents Keycloak and Google, and supports JWT service accounts. Confirm module support on your O3 release.Basic authentication is the baseline. The OAuth2 Login module can be added to replace it, with the same documented providers. Confirm your configuration in a test environment.
Upgrade pathTarget platform for existing 2.x implementations that move their interface. Confirm the migration steps and any data or module changes with the OpenMRS community.Remains the platform underneath O3 in the reference stack. Confirm the supported upgrade sequence for your current 2.x version before changing anything in production.

Licensing, support and update terms for each version

Both OpenMRS 3 (O3) and the 2.x platform sit under the same MPL 2.0 license and the same nonprofit and community model, so licensing does not separate them. What differs is the support you buy, from implementers and internal staff, and the update path each version requires. The cards below cover what is documented and what you need to confirm before committing.

MPL 2.0 with Healthcare Disclaimer

The OpenMRS platform is released under the Mozilla Public License 2.0 with a Healthcare Disclaimer, and that applies to the core that both versions share. MPL 2.0 is a file-level copyleft license, so changes you make to OpenMRS source files must be shared under MPL 2.0 when you distribute them, while your separate modules can carry other terms. Have counsel confirm how your custom forms, modules and O3 frontend changes will be packaged and distributed. The Healthcare Disclaimer does not replace your own clinical safety and regulatory review.

OpenMRS Inc. as nonprofit foundation

OpenMRS Inc. is a 501(c)(3) nonprofit that provides the fiscal and legal foundation and infrastructure for the project. It does not sell a support contract or a paid edition, so it should not be read as the vendor you call for a production incident. Ask the foundation and your implementer which parts of the project's governance, infrastructure and release process apply to the version you select, and whether any of them change when you move from 2.x to O3.

Volunteer community and implementers

Much of the day-to-day maintenance, module development and troubleshooting comes from the volunteer community and from implementer organizations that customize and deploy OpenMRS. Community help is useful for questions and bug reports, but it carries no service commitment. Before you choose a version, ask each candidate implementer which OpenMRS versions and O3 releases they have deployed in production, and how they handle security patches when a release is no longer maintained.

No documented paid edition split

No paid edition split is documented for either OpenMRS 3 (O3) or the 2.x platform. The cost of running either version is therefore staff and implementer time: installation, hosting, configuration, form work, upgrades and testing. Ask any implementer to quote these as separate line items, including initial build, form migration, training and ongoing support, so you can compare the two versions on effort rather than on license fees.

Confirm 2.x release support windows

Before committing to a 2.x deployment, confirm in writing how long the 2.x line will receive security and bug fixes, and whether the current 2.8.1 release is the last planned 2.x release. The download page lists 2.8.1 as the latest Platform version, released October 7, 2025, but a published date alone does not tell you the end of support. Put the answer into your risk register and tie it to a migration decision date.

Plan updates and form migration

Moving from 2.x to O3 is an upgrade of both the user interface and the form layer, so the update path has its own cost. Legacy HTML forms need to be migrated to the O3 form schema, and a migration tool built by Palladium Kenya was adopted by the community. Ask your implementer to scope form inventory, testing, data validation and a rollback plan as fixed deliverables, and to state which O3 release they will target and how they will handle later point releases.

How the O3 frontend sits on top of the OpenMRS backend

O3 changes the user-facing layer, not the core that stores patient records. The O3 Reference Application is a new frontend built on micro-frontend modules, so screens are delivered as separate modules that the frontend assembles. The OpenMRS backend still runs as a Java application built with Maven, deployed on Tomcat or Jetty, and backed by MySQL, MariaDB or PostgreSQL. For a 2.x team, this means the data model, server-side modules and database are shared concerns, while the screens your users see are a different delivery stack. Confirm with your architects which backend platform version, which O3 module versions and which database engine must line up in your environment before any test install, because O3 releases and platform releases move on their own cycles (the current O3 and Platform versions are listed on the OpenMRS download page).

The reference application's Docker Compose setup shows the layers concretely. It runs four services: a MariaDB database, the OpenMRS backend, an Nginx frontend serving the 3.x modules, and an Nginx gateway that routes requests between them. An optional Certbot service handles SSL certificates. A lab or evaluation stack can be launched with one command, but a production deployment needs decisions the compose file does not make for you: which database engine and version you operate, where TLS terminates, whether Certbot fits your certificate policy, and how the gateway is hardened and monitored. Review the current compose file and its documentation in the reference application repository before copying it into a production network.

Plan for the gap between a demonstration stack and your own infrastructure. Your existing 2.x modules, custom forms and authentication settings may not all have equivalents in the O3 module set, so inventory them against the backend version you intend to run. Ask implementers who have run both layers for the module compatibility matrix, the upgrade path for the database schema, and the rollback steps if an O3 frontend release must be reverted while the backend stays in place. These checks decide whether the backend upgrade and the frontend change can be sequenced separately, which is the main lever for controlling risk in an existing implementation.

Which OpenMRS deployment package fits which situation

The Standalone package bundles OpenMRS with an embedded database, and the OpenMRS download page recommends it for people exploring the platform. It is the lowest-friction way to see the patient record, forms and administration screens on a single machine, but the embedded database and single-node layout are not designed to carry patient data in production.

  • Team skills: A person comfortable starting a Java application from a package and reading logs is enough for a trial.
  • Data handling: Use synthetic or de-identified records only, since the embedded database is not a production data store.
  • Scope: Good for testing concept forms, reports and user roles before any design decisions are made.
  • Upgrade path: Do not treat a Standalone instance as the starting point for a live system. Plan a fresh build on the production layout instead.
  • Cost: The software is free to download, so the cost is the staff time spent evaluating it.

Before you rely on the trial, confirm with your OpenMRS implementer or the OpenMRS community which database, hosting and backup pattern they recommend for your planned go-live.

What form migration to the O3 schema involves for legacy HTML forms

Legacy OpenMRS HTML forms do not run in O3 as they are, so every 2.x implementation that relies on them has to plan a form migration before it moves to the O3 interface. The O3 frontend is a new user-facing layer built on micro-frontend modules, which means the form definitions your clinicians use today need to be re-expressed in the O3 form schema. The community adopted a tool that Palladium Kenya built to help with this conversion of legacy OpenMRS HTML forms to that schema, as described in the OpenMRS blog post of October 5, 2023 (Transitioning to OpenMRS 3). Read that post before you scope the work, because it is the primary account of what the migration path was designed to cover.

Start with an inventory. List every HTML form in production, including forms used for admission, triage, visits, orders, and any form attached to a program or encounter type. For each one, record who uses it, which clinical workflow it supports, how often it is completed, and whether it has been customized beyond the standard build. Forms that are rarely used or duplicate another form are often the cheapest to retire rather than migrate. Confirm with your implementation partner or the OpenMRS community which forms the migration tool can convert, which constructs it handles, and which it reports as unsupported, because the tool's current scope and limitations must be checked against your own form set, not assumed from the announcement.

Testing matters more than conversion. A form that converts without errors can still change the order of questions, drop a validation rule or break a concept lookup, and a clinician will notice that at the point of care. Build test cases from real clinical workflows, such as intake to discharge, and run the migrated forms through them in a non-production O3 environment, including the Docker Compose stack for the O3 Reference Application if you use it for evaluation. Expect the manual work to remain: review of converted logic, rework of forms that use features the tool does not carry across, sign-off by clinical leads, and retraining. Plan for that work and for a parallel run before cutover.

What an O3 move costs in staff time, testing and support

This table breaks down the cost components of three paths: staying on OpenMRS 2.x, moving to O3, or running both during transition. Software licensing is zero under MPL 2.0, so the differences come from people, testing and support, and the table shows who is paid for each item and what drives it up. Use it to build a quote request, since the main takeaway is that effort scales with your form inventory, modules, integrations and sites.

Cost componentWho pays, and how it recursWhat drives it up or down
Software licensingNo license fee under MPL 2.0 on either path. OpenMRS publishes no platform prices.Confirm with OpenMRS Inc. and your implementer that no paid add-ons are part of your design.
Internal staff timeYour clinical informatics, IT and training staff, recurring through planning, testing and cutover.Number of sites, custom forms and local workflows that staff must review and sign off.
Form inventory and migrationImplementer or internal developers, one-time per form set, plus rework when forms change.Count of legacy HTML forms and custom logic. The Palladium Kenya migration tool helps with forms but still needs review.
Module and integration workImplementer or developers, one-time, plus recurring upkeep after upgrades.Number of custom modules and external integrations, such as FHIR2, SMART-on-FHIR or OAuth2 Login, that must be retested on O3.
Test environmentsYour infrastructure team, recurring while both stacks run in parallel.Whether you need a separate 2.x and O3 test stack, and how many data sets you must validate against.
Training and change managementYour trainers and end users, one-time per site and role, recurring for new staff.Change in user interface: O3 is a new frontend, so the scale of retraining depends on how many roles change screens.
Implementer or consultant feesPaid by you to the implementer under a written scope, one-time for migration, recurring if retained.Whether the quote covers each site separately, the migration test plan and post-cutover support.
Ongoing support and upgradesYour team or a support contract, recurring for both paths, with running both versions costing more.Upgrade cadence of 2.8.1 and 3.7.1, and how long you maintain two platforms during transition.

How an existing 2.x implementation should plan the move to O3

The sequence turns an existing 2.x deployment into a tested O3 plan, with a documented inventory, a non-production proof, validated clinical workflows and a rollback path that stays open until the move is confirmed. Each step produces evidence the team can review before the next one starts.

  1. Inventory modules, forms, integrations and custom code

    Start by listing everything the 2.x instance depends on: installed modules and their versions, legacy HTML forms, concept dictionaries, reports, scheduled tasks, interfaces to laboratory, billing or imaging systems, and any custom Java or database changes. The implementation lead and the clinical informatics owner should own this list together, because clinical forms are usually the largest source of hidden work. The step is done when every item has an owner and a disposition: keep, migrate, replace with an O3 or standard capability, or retire. Ask the implementer which of these items they can verify against your own system rather than from documentation alone.

  2. Check O3 compatibility for each dependency

    For each module and integration on the inventory, confirm whether an O3 equivalent exists, whether the 2.x module is still maintained, and whether the O3 frontend relies on backend APIs that your custom modules do not expose. Review the O3 reference application and the current OpenMRS Platform release notes against your list, and check the FHIR2, SMART-on-FHIR and OAuth2 Login modules if your identity or interoperability design depends on them. The output is a compatibility register that names which items are ready, which need development, and which need a decision from the governance group. Confirm each conclusion with the implementer or the OpenMRS community, since module status changes over time.

  3. Stand up a non-production O3 environment

    Build a separate O3 environment that is isolated from production and loaded with de-identified or synthetic data. The OpenMRS download page lists the O3 Reference Application container stack, which runs MariaDB, the OpenMRS backend, an Nginx frontend and an Nginx gateway, with an optional Certbot service for SSL. Use it as a starting point, or pair a matching backend with your own database and hosting standards, and record every deviation from the reference setup. The environment is ready when a clinician test user can log in, open a patient record and complete a basic encounter, and the team can rebuild it from configuration files alone.

  4. Migrate and test forms against clinical workflows

    Convert legacy HTML forms to the O3 form schema, using the migration tool that Palladium Kenya built and the community adopted, or by rebuilding forms manually where the tool does not cover a form's structure. Then test each form against real clinical workflows such as intake, triage, consultation, admission and discharge, with clinicians who use them daily. Log each defect, confirm the fix, and retest the full workflow rather than the single form. The step closes when the clinical sign-off sheet lists every workflow, the tester, the date and any accepted differences from 2.x behavior. Expect this to be the step where the timeline is most uncertain, so confirm the scope and effort with the implementer in writing before committing.

  5. Validate data, integrations and reporting

    Run a full data migration rehearsal into the O3 test environment and compare record counts, concept mappings, patient identifiers and reports between the 2.x source and the O3 target. Test every interface, including laboratory, billing and imaging connections, and confirm that scheduled jobs and access roles behave as documented. Keep a reconciliation log that records each difference and its resolution. The step is complete when two consecutive rehearsals produce matching reconciliation results and the data owner signs off on the mapping. Ask the implementer how they handle identifier conflicts and free-text fields, since those usually need case-by-case decisions.

  6. Plan user training and cutover

    Prepare role-based training for clinicians, registration staff, pharmacy and administrators, using the O3 test environment and the forms that were validated in the earlier steps. Agree a cutover window with clinical leadership, set a freeze on changes to the 2.x instance during the final migration, and publish a go or no-go checklist that names the person who makes the decision. The step is done when every user group has completed training, the support rota is staffed for the first days after cutover, and the checklist has been rehearsed at least once. Confirm the cutover plan with your implementer and with the OpenMRS community resources before the window is fixed.

  7. Execute cutover and keep the 2.x rollback path

    On the agreed date, freeze the 2.x instance, take a verified backup of its database and configuration, run the final migration, and reconcile the results against the rehearsal log before opening O3 to users. Keep the 2.x instance and its backup intact for a period the governance group defines in advance, so the team can return to 2.x if a critical defect appears. The step closes when the reconciliation is signed off, users confirm access to live workflows, and the rollback procedure has been written down and tested against the backup. Do not decommission the 2.x instance until the agreed review period has passed without a rollback decision.

  8. Document the new baseline and retire the old one

    Update the system documentation to describe the O3 deployment, the configuration files, the module versions, the integrations, the backup schedule and the support responsibilities. Record what changed from 2.x and why, so future upgrades and audits can trace decisions. Once the rollback window has closed without use, archive the 2.x instance under access controls, record its retirement and remove any credentials or interfaces that still point to it. The step is done when a new team member can rebuild the O3 environment from the documentation and the retirement record is filed with the governance group.

Questions implementers ask before moving from OpenMRS 2.x to O3

What does moving from OpenMRS 2.x to O3 cost, and what drives the total up or down?

The cost is mostly labor, and it is set by the size of your customization footprint rather than by the software itself. Both OpenMRS 2.x and O3 are open source under the MPL 2.0, so license fees are not the variable. The main drivers are the number of legacy HTML forms that need conversion to the O3 form schema, how many custom modules or interface changes you depend on, the volume and quality of data to validate, the number of sites and users, and how much training staff need on the new interface. Recurring costs include hosting, maintenance and upgrades to the O3 release line. Ask any implementer for a quote that separates one-time migration work from ongoing support, and that lists who performs each task: your staff, an implementer, or your OpenMRS vendor. DeployOpen quotes follow from a written scope.

How long will the migration take?

No honest duration can be stated until you have a scoped inventory. Timing depends on how many forms you run, how many of them are customized, which modules and integrations sit on top of the 2.x platform, how much historical data needs validation, and how many clinical teams must test and sign off. A small, standard deployment and a multi-site deployment with bespoke forms differ by a large margin. Start by listing every form, module, integration, report and user role, then classify each as reuse, convert or rebuild. The current O3 reference release is version 3.7.1, and the latest 2.x platform is version 2.8.1, so confirm which release lines your plan targets before estimating.

What must our team provide before a migration starts?

Plan to supply four categories of input before work begins:

  • The complete list of legacy HTML forms, with the clinical purpose and owner of each.
  • A data extract or staging environment that reflects production, with access rules that your privacy officer has approved.
  • Named test users for each role, including the staff who will use O3 daily.
  • Clinical sign-off from people who can confirm that converted forms capture the same information and workflows.

Without these, testing stalls and sign-off becomes the bottleneck. Confirm with your implementer who approves scope changes and who signs off each phase in writing.

Can our in-house team migrate to O3 without outside help?

Some teams can, especially when they already maintain their own OpenMRS deployment, know Java and Maven, and have staff who understand the clinical forms. The OpenMRS core is written in Java, built with Maven and runs on Tomcat or Jetty, so a team with that background has the core skills. The harder parts are usually the form conversion work, the front-end module configuration and the testing discipline across roles. Assess your team against those skills honestly and identify gaps before committing. An outside partner can take on fixed-scope work, such as form conversion, testing or hardening, while your staff keep ownership of clinical content. Ask any partner which tasks it will hand back to you and what documentation you will receive.

Does O3 require a different hosting model from OpenMRS 2.x?

O3 changes the user-facing layer, not the basic need to host your own infrastructure. The O3 Reference Application Docker Compose setup runs four services: a MariaDB database, the OpenMRS backend, an Nginx frontend serving the 3.x modules and an Nginx gateway, plus an optional Certbot service for SSL certificates. The 2.x platform is delivered as a WAR file for an existing servlet container and database. That means a container-based O3 stack adds operational work around containers, reverse proxies and certificate renewal. Confirm with your platform team whether you will run the Docker Compose stack, the WAR-based backend or another arrangement, and whether your existing database and servlet container can support the target release.

How do the FHIR2 and SMART-on-FHIR modules and OAuth2 Login fit into the move?

Treat these modules as a separate workstream that must be re-verified against your target release. The FHIR2 module provides the FHIR REST API for OpenMRS, focused on FHIR R4 with translation support for R3. The openmrs-module-smartonfhir module supports the SMART App Launch Framework on top of FHIR2 and uses Keycloak as its default authorization server. The OAuth2 Login module replaces basic authentication with an OAuth 2.0 provider, creates users on the fly, maps names, email and roles, and supports JWT service accounts. Confirm which module versions are compatible with your target O3 or Platform release, whether your identity provider matches the documented Keycloak or Google configurations, and how role mapping will be tested before go-live.

What are the main risks to plan for during the move?

The largest risks are data integrity, form behavior and user adoption. Converted forms may capture fields differently, validation rules may change, and integrations that read 2.x output may break. Mitigate these with a parallel test environment, reconciliation of sample records, role-based acceptance testing and a rollback plan agreed before cutover. Ask your implementer for its testing approach, the documents it will produce and how it handles defects found after go-live. No migration can guarantee a zero-defect outcome, so budget for a stabilization period and ask who staffs it.

How DeployOpen works on this

DeployOpen plans, implements, customizes, integrates, hardens, backs up, upgrades and documents self-hosted open-source platforms inside the client's own infrastructure. For an OpenMRS version move, we start with a written inventory of the existing 2.x implementation and then agree on a fixed scope before any migration work begins.

How we scope

  • Inventory the current 2.x deployment, including modules, custom HTML forms and the database engine in use.
  • Confirm which legacy HTML forms move to the O3 form schema and which stay on the 2.x interface.
  • Agree in writing which environments, deliverables and timelines the fixed scope covers before work starts.

How we build

  • Stand up the target O3 environment in the client's cloud account, data center or air-gapped network.
  • Migrate and test forms against the O3 schema, documenting each change and any functionality that differs.
  • Configure authentication, such as the OAuth2 Login module, and test it against the client's identity provider.

How we hand over

  • Deliver runbooks for the deployment, backup, upgrade path and rollback steps the client's team will operate.
  • Document the migration decisions, test results and open items so the client's own staff can review them.
  • Walk the client's administrators through the handover and confirm who owns each operational task afterward.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after the initial move.
  • Confirm with the client's clinical and informatics leads which post-migration issues need a support window.
  • Ask any quote to separate one-time migration work from recurring retainer work so the budget stays clear.

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.