Latest releases
We’re constantly improving O3. This page shows the newest tagged GitHub release for selected O3 repositories. It is a release dashboard, not a full changelog for every frontend module.
Use it to spot when common O3 packages have moved, then check your distribution’s spa-assemble-config.json to confirm which modules and versions are actually included in your environment. Each repository heading and “View all releases” link opens the repository’s GitHub releases page.
Platform
Core
v11.0.0
Published: Oct 6, 2026
What's Changed
⚠️ Breaking changes
- (BREAKING) Extension system should not re-derive in full on every write by @ibacher in #1856
- (BREAKING) O3-5853: Use browserslist to compile JS in modern format by @ibacher in #1868
- (BREAKING) Switch from the style-loader to CSS loader in production mode by @ibacher in #1869
- (BREAKING) Upgrade to SWR 2.5.1 by @ibacher in #1873
- (BREAKING) Remove offline & rxjs support from framework by @ibacher in #1894
- (BREAKING) O3-6029: Remove workspace v1 by @chibongho in #1893
🚀 New features
- (feat) O3-5767: Redirect to Location header URL on session endpoint calls by @dilankavishka in #1797
- (feat) O3-5849: Improve the Workspace2 unsaved-changes confirmation modal by @denniskigen in #1823
- (feat) Adopt ESLint 9 and the shared @openmrs/eslint-config by @denniskigen in #1827
- (feat) O3-5872: Add support for static compression of frontend by @ibacher in #1838
- (feat) O3-5800: Add a two-factor authentication page and TOTP enrollment modal by @dilankavishka in #1819
- (feat) Add a distribution-controlled version property by @ibacher in #1815
- (feat) Federate most of the Module Federation runtime by @ibacher in #1853
- (feat) Remove
useVisitContextStorere-render amplification by @ibacher in #1859 - (feat) Make pagination functions stable references by @ibacher in #1861
- (feat) Improve guards in dynamic-loading to prevent duplicate requests by @ibacher in #1862
- (feat) Fail assemble by default if things are obviously broken by @ibacher in #1795
- (feat) O3-5857: Share @carbon/react in openmrs-esm-core by @omsrivastava512 in #1836
- (feat) Improvements to the expression evaluator by @ibacher in #1884
- (feat) O3-5986: Let attachments be recorded on and read by encounter by @denniskigen in #1887
- (feat) Add a metadata export pictogram by @denniskigen in #1891
- (feat) O3-5838: Implement TOTP verification page by @dilankavishka in #1844
- (feat) O3-6000: Allow extensions and workspaces to access their metadata by @chibongho in #1899
- (feat) Ensure the app shell is preloaded upfront by @ibacher in #1912
- (feat) Add a loading screen and update the application error screen by @ibacher in #1921
- (feat) Add a patient documents pictogram by @denniskigen in #1924
- (feat) Add cohorts, concept dictionary, data entry and reports pictograms by @denniskigen in #1927
- (feat) O3-5823: Add certainty display and blue/gray defaults to diagnosis tags by @denniskigen in #1881
- (feat) O3-6007: Add ExportedWorkspace component by @chibongho in #1901
- (feat) Add a system administration pictogram by @denniskigen in #1932
- (feat) Allow a workspace to override the size of its containing window by @ibacher in #1930
🐛 Bug fixes
- (fix) Resolve workspace2 lifecycles by workspace uuid instead of stack index by @denniskigen in #1807
- (fix) Honor the invalid prop in OpenmrsDatePicker mocks by @denniskigen in #1814
- (fix) Switch to using contenthash for shell files by @ibacher in #1810
- (fix) O3-5816: Stop LocationPicker crashing when no login locations are configured by @suubi-joshua in #1818
- (fix) Exclude the CodeSnippet copy button from the primary button override by @denniskigen in #1821
- (fix) Read past the first page in the docs workflow lookups by @denniskigen in #1840
- (fix) O3-5874: Handle regional locales in the change language modal by @denniskigen in #1832
- (fix) Add the growth chart app to the cross-repo E2E environment by @denniskigen in #1848
- (fix) Match workspace scopes relative to SPA base by @denniskigen in #1857
- (fix) Import map and routes should be cached by @ibacher in #1855
- (fix) Mount all single-spa parcels in a single long-lived parcel by @ibacher in #1858
- (fix) Pin framework to app shell version by @ibacher in #1863
- (fix) Ensure slot-specific configuration are correctly passed everywhere by @ibacher in #1870
- (fix) Move hard lifecycle stop to framework instead of single-spa by @ibacher in #1867
- (fix) When using yarn run:shell ensure we serve CSS files by @ibacher in #1872
- (fix) Release broken parcel DOM references by @ibacher in #1874
- (fix) Pass the browserslist targets to the app shell's CSS minimizer by @denniskigen in #1885
- (fix) Navigate should refuse non-HTTP URLs by @ibacher in #1898
- (fix) Show the location picker from "Change location" when chooseLocation is disabled by @NethmiRodrigo in #1908
- (fix) Place the app shell's loading spinner and error page in the body grid's app area by @denniskigen in #1904
- (fix) Let openmrs develop pick a port on hosts without IPv6 by @denniskigen in #1903
- (fix) Run the login provider loginUrl validator against the provider object by @NethmiRodrigo in #1909
- (fix) Declare uuid as a dependency of esm-styleguide by @denniskigen in #1913
- (fix) Suppress Basic auth prompts for paginated REST requests by @denniskigen in #1906
- (fix) Stop precompressing source maps in openmrs build by @denniskigen in #1916
- (fix) Check IPv4 loopback explicitly when selecting ports by @denniskigen in #1915
- (fix) Support authentication failures from the backend by @ibacher in #1918
- (fix) Give the help menu button an accessible name by @denniskigen in #1914
- (fix) Clear the shared SWR cache on logout by @denniskigen in #1919
- (fix) Minimize churn from config updates when there are many extensions by @ibacher in #1922
- (fix) O3-5981: Coerce error reasons to strings before showing the error toast by @palvk4469 in #1888
- (fix) Give Service queues its own pictogram by @denniskigen in #1926
- (fix) O3-6028: Pass locationsPerRequest to the login location picker and drop numberToShow by @NethmiRodrigo in #1920
- (fix) Render the page header title as a heading by @denniskigen in #1929
- (fix) Reduce loading spinner to smaller size by @ibacher in #1931
- (fix) Framework and E2E test fixes by @ibacher in #1934
🧪 Tests
- (test) O3-3853: Expand unit test coverage for the datepicker component by @Josephkagimu1 in #1809
📝 Documentation
- (docs) Rewrite the openmrs CLI README around how it's used by @denniskigen in #1905
🧹 Housekeeping
- (chore) Bump @openmrs/eslint-config to ^1.0.0 and eslint to ^9.39.0 by @denniskigen in #1831
- (chore) Bump @openmrs/eslint-config to ^2.0.0 by @denniskigen in #1835
- (chore) Update translations from Transifex by @openmrs-bot in #1837
- (chore) Update translations from Transifex by @openmrs-bot in #1843
- (chore) Fix docs build by @ibacher in #1842
- (chore) Pin e2e CI installs to the lockfile by @denniskigen in #1847
- (chore) Bump @openmrs/eslint-config to ^2.1.0 by @denniskigen in #1841
- (chore) Clean build outputs before bundle size comparison by @denniskigen in #1860
- (chore) Push docs commits with the App token so PR checks re-run by @ibacher in #1865
- (chore) Bump the github-actions by @dependabot[bot] in #1830
- (chore) Upgrade turbo to latest by @ibacher in #1907
- (chore) Adopt the shared Prettier configuration by @denniskigen in #1892
- (chore) Retry failed cross-repo E2E tests by @jayasanka-sack in #1917
- (chore) Capture E2E server logs with the shared capture-docker-logs action by @denniskigen in #1928
- (chore) Stop generating unused build manifests by @ibacher in #1935
- (chore) Update the release workflow by @jayasanka-sack in #1938
New Contributors
- @Josephkagimu1 made their first contribution in #1809
- @omsrivastava512 made their first contribution in #1836
- @palvk4469 made their first contribution in #1888
Full Changelog: https://github.com/openmrs/openmrs-esm-core/compare/v10.0.0...v11.0.0
Patient workflows
Patient chart
v13.0.1
Published: Oct 15, 2026
<!-- Release notes generated using configuration in .github/release.yml at v13.0.1 -->What's Changed
🐛 Bug fixes
- (fix) O3-6097: Fix inverted labels on the free text dosage toggle by @sudeshkar in #3793
- (fix) O3-6100: Prevent duplicate vitals saves by @denniskigen in #3792
- (fix) Hide the time on date visit attribute tags for today by @denniskigen in #3797
Full Changelog: https://github.com/openmrs/openmrs-esm-patient-chart/compare/v13.0.0...v13.0.1
Patient management
v12.1.1
Published: Oct 15, 2026
<!-- Release notes generated using configuration in .github/release.yml at v12.1.1 -->What's Changed
🐛 Bug fixes
- (fix) O3-6096: Return to Add patient to list modal after creating a new list by @solomonfortune in #2821
Full Changelog: https://github.com/openmrs/openmrs-esm-patient-management/compare/v12.1.0...v12.1.1
Forms and data entry
Form builder
v3.6.0
Published: Oct 8, 2026
<!-- Release notes generated using configuration in .github/release.yml at v3.6.0 -->What's Changed
🚀 New features
- (feat) O3-3958: Add a select all option for concept answers by @NethmiRodrigo in #519
- (feat) O3-4997: Differentiate retired concepts in the form builder by @VeronicaMuthee in #1335
🐛 Bug fixes
- (fix) Use framework modal for saving forms by @denniskigen in #1320
- (fix) Remove global CSS styles and dead style code by @ibacher in #1326
- (fix) Handle forms without an encounter type in Audit Details by @denniskigen in #1384
- (fix) Disable publishing when the form has no schema by @denniskigen in #1383
🧹 Housekeeping
- (chore) Adopt @openmrs/eslint-config and ESLint 9 by @denniskigen in #1285
- (chore) Don't update eslint config by @ibacher in #1286
- (chore) Clean build outputs before bundle size comparison by @denniskigen in #1306
- (chore) Share SWR through module federation by @denniskigen in #1347
- (chore) O3-5865: Add @carbon/react to peerDependencies by @jwnasambu in #1282
- (chore) Capture E2E server logs with the shared capture-docker-logs action by @denniskigen in #1376
- (chore) O3-6057: Add one-click release inputs to CI in openmrs-esm-form-builder by @foverokavindz in #1390
- (chore) Bump esm-framework peerDependency to 11.x by @NethmiRodrigo in #1392
New Contributors
- @VeronicaMuthee made their first contribution in #1335
- @foverokavindz made their first contribution in #1390
Full Changelog: https://github.com/openmrs/openmrs-esm-form-builder/compare/v3.5.1...v3.6.0
React form engine
v5.0.0
Published: Oct 15, 2026
<!-- Release notes generated using configuration in .github/release.yml at v5.0.0 -->What's Changed
⚠️ Breaking changes
- (BREAKING) O3-5847: Stop datetime obs shifting a day across timezones by @NethmiRodrigo in #838
🐛 Bug fixes
- (fix) Post submission helper should not use eval() by @ibacher in #843
- (fix) Display validation errors for checkbox groups by @Samstar10 in #840
- (fix) O3-5847: Stop unchanged obs values from creating duplicate obs by @NethmiRodrigo in #842
New Contributors
- @Samstar10 made their first contribution in #840
Full Changelog: https://github.com/openmrs/openmrs-esm-form-engine-lib/compare/v4.3.0...v5.0.0
Angular form engine
v20.1.0
Published: Oct 7, 2026
<!-- Release notes generated using configuration in .github/release.yml at v20.1.0 -->What's Changed
🚀 New features
- (feat) O3-5815: Show ICD-11 codes next to diagnoses in the diagnosis picker by @denniskigen in #176
- (feat) O3-5817: Add a schema-configurable endpoint data source by @maikofelix47 in #178
🐛 Bug fixes
- (fix) Forward setValue options in the AFE form controls by @denniskigen in #177
- (fix) O3-5818: Center ng-select field content vertically by @denniskigen in #179
- (fix) O3-5817: Handle missing data sources gracefully in the form renderer by @denniskigen in #180
- (fix) O3-5892: Scope alert relations to controls referenced in the alert expression by @denniskigen in #184
- (fix) Align engine behavior with the documented schema contract by @denniskigen in #174
- (fix) Show options pushed by a data source in remote-select by @denniskigen in #190
- (fix) O3-6046: Return null when height is outside reference table or no reference applies by @Faisal77666 in #191
🧪 Tests
- (test) Add rendering and payload test guardrails by @denniskigen in #173
📝 Documentation
- (docs) Add Angular version policy pointer to the README by @denniskigen in #172
🧹 Housekeeping
- (chore) O3-6062: Adopt shared build and release workflows by @kavinduUdhara in #192
New Contributors
- @Faisal77666 made their first contribution in #191
- @kavinduUdhara made their first contribution in #192
Full Changelog: https://github.com/openmrs/openmrs-ngx-formentry/compare/v20.0.0...v20.1.0
Fast data entry
v1.6.0
Published: Oct 8, 2026
<!-- Release notes generated using configuration in .github/release.yml at v1.6.0 -->What's Changed
🚀 New features
- (feat) Show the form name in the fast data entry workflows by @denniskigen in #408
🐛 Bug fixes
- (fix) Use framework modals for fast data entry by @denniskigen in #374
- (fix) Add a page header with the data entry pictogram to the forms page by @denniskigen in #403
- (fix) Remove the unused breadcrumbs from the form entry workflows by @denniskigen in #409
🧹 Housekeeping
- (chore) Adopt @openmrs/eslint-config and ESLint 9 by @denniskigen in #353
- (chore) Don't autoupdate eslint config by @ibacher in #354
- (chore) Bump @openmrs/eslint-config to ^2.1.0 by @denniskigen in #359
- (chore) Fix the e2e Dockerfile by @denniskigen in #363
- (chore) Clean build outputs before bundle size comparison by @denniskigen in #366
- (chore) Upgrade to SWR 2.5.1 by @ibacher in #385
- (chore) Capture E2E server logs with the shared capture-docker-logs action by @denniskigen in #406
- (chore) O3-6054: Add one-click release inputs to CI by @chamals3n4 in #416
- (chore) Bump esm-framework peerDependency to 11.x by @NethmiRodrigo in #417
New Contributors
- @chamals3n4 made their first contribution in #416
Full Changelog: https://github.com/openmrs/openmrs-esm-fast-data-entry-app/compare/v1.5.1...v1.6.0
Clinical apps
Medication dispensing
v1.11.2
Published: Oct 8, 2026
<!-- Release notes generated using configuration in .github/release.yml at v1.11.2 -->What's Changed
🐛 Bug fixes
- (fix) Use PageHeader and the pharmacy pictogram in the Dispensing header by @denniskigen in #932
🧪 Tests
- (test) O3-4868: Add e2e test for editing a medication dispense event by @gitcliff in #316
- (test) O3-6024: Fix flaky E2E tests by @jayasanka-sack in #928
🧹 Housekeeping
- (chore) Adopt @openmrs/eslint-config and ESLint 9 by @denniskigen in #883
- (chore) Clean build outputs before bundle size comparison by @denniskigen in #892
- (chore) Upgrade to SWR 2.5.1 by @ibacher in #911
- (chore) O3-5924: Use React-scoped JSX types by @denniskigen in #912
- (chore) Capture E2E server logs with the shared capture-docker-logs action by @denniskigen in #935
- (chore) O3-6056: Add one-click release inputs to CI by @chamals3n4 in #941
- (chore) Bump esm-framework peerDependency to 11.x by @NethmiRodrigo in #942
New Contributors
- @chamals3n4 made their first contribution in #941
Full Changelog: https://github.com/openmrs/openmrs-esm-dispensing-app/compare/v1.11.1...v1.11.2
Cohort builder
v4.0.7
Published: Oct 8, 2026
<!-- Release notes generated using configuration in .github/release.yml at v4.0.7 -->What's Changed
🐛 Bug fixes
- (fix) Add a page header with the cohorts pictogram to Cohort Builder by @denniskigen in #738
- (fix) Renumber every filter when composing search history items by @denniskigen in #744
- (fix) O3-6055: Default publish-only input to false for CI events by @DilshanNaveen in #757
- (fix) Load translations under the app's package name by @denniskigen in #743
- (fix) Save queries with the name and description entered in the modal by @denniskigen in #748
🧹 Housekeeping
- (chore) Adopt @openmrs/eslint-config and ESLint 9 by @denniskigen in #692
- (chore) Fix the e2e Dockerfile by @denniskigen in #699
- (chore) Share SWR through module federation by @denniskigen in #720
- (chore) O3-5924: Use React-scoped JSX types by @denniskigen in #719
- (chore) Capture E2E server logs with the shared capture-docker-logs action by @denniskigen in #741
- (chore) O3-6055: Enable one-click releases by @DilshanNaveen in #755
- (chore) Bump esm-framework peerDependency to 11.x by @NethmiRodrigo in #758
New Contributors
- @DilshanNaveen made their first contribution in #755
Full Changelog: https://github.com/openmrs/openmrs-esm-cohortbuilder-app/compare/v4.0.6...v4.0.7
Scaffolding reference
Use @openmrs/create-o3-app for new frontend modules. The template app is listed here only as a structural reference, so it may not release as often as active modules.
Template app
v4.0.0
Published: May 16, 2024
What's Changed
Breaking changes
- (BREAKING) Migrate
esm-template-appto use routes.json by @vasharma05 in #13
New features
- (feat) Add demonstration of extension system by @brandones in #3
- (feat) Show 'slots' syntax by @ZacButko in #5
Refactors
- (refactor) Useful refactors by @denniskigen in #17
Bug fixes
- (fix) Miscellaneous cleanup by @brandones in #7
- (fix) Update github actions prerelease template to use yarn by @mogoodrich in #11
- (fix) Exports should reference the result of getSync/getAsync by @denniskigen in #14
Docs
- (docs) Add module management app link to README by @denniskigen in #8
- (docs) Fix small error in README by @mogoodrich in #10
Tests
Housekeeping
- (chore) Fixed not working CI/CD by @FlorianRappl in #1
- (chore) Switch to yarn by @brandones in #2
- (chore) Remove prettier config by @brandones in #4
- (chore) Update GitHub workflows to use Yarn instead of NPM by @brandones in #6
- (chore) Add .DS_Store files to .gitignore by @manuelroemer in #9
- (chore) Bump dependencies by @denniskigen in #12
- (chore) Switch back to
swc-loaderby @denniskigen in #15 - (chore) Update to newer versions of openmrs and @openmrs/esm-framework by @denniskigen in #16
- (chore) Updated code dependencies by @vasharma05 in #22
- (chore) Reduce timeout to 15 minutes in E2E test CI workflow by @suubi-joshua in #23
- (chore) Only auto-generate English translations by @ibacher in #25
- (chore) Bump openmrs tooling and framework versions by @denniskigen in #26
- (chore) Bump playwright by @kdaud in #27
- (chore) Bump openmrs framework dependancies by @NethmiRodrigo in #28
- (chore) Bump dependencies by @denniskigen in #29
- (chore) Decouple linting and formatting concerns by @denniskigen in #30
New Contributors
- @FlorianRappl made their first contribution in #1
- @brandones made their first contribution in #2
- @ZacButko made their first contribution in #5
- @denniskigen made their first contribution in #8
- @manuelroemer made their first contribution in #9
- @mogoodrich made their first contribution in #10
- @vasharma05 made their first contribution in #13
- @RandilaP made their first contribution in #18
- @suubi-joshua made their first contribution in #23
- @ibacher made their first contribution in #25
- @kdaud made their first contribution in #27
- @NethmiRodrigo made their first contribution in #28
Full Changelog: https://github.com/openmrs/openmrs-esm-template-app/commits/v4.0.0