Introduction
THIS IS NO LONGER THE ACTIVELY MAINTAINED SOURCE OF TRUTH FOR O3 DEV DOCS. This effort has been moved to the OpenMRS Wiki at https://openmrs.atlassian.net/wiki/x/4QABCQ (opens in a new tab)
O3 is a frontend framework that leverages modern frontend technologies to enable developers to collaboratively create better user experiences for OpenMRS implementations.
O3 provides a wide range of tools, components, APIs, and templates that can be leveraged to create frontend applications for OpenMRS. It is designed to be modular, allowing developers to choose the components they need to create their frontend applications. O3 is also designed to be extensible, allowing developers to extend the framework with their own components and APIs.
Guiding principles
O3 is guided by the following principles:
- Code reuse and reduction of duplicated effort - reusable components, APIs, and templates.
- Modular architecture - allows for easy addition, removal, or updating of modules to extend functionality or tailor the system to specific needs.
- Configuration-first - each frontend module can specify its config properties.
- Usability - optimized UI for point of care, responsiveness, and arbitrarily complex patient care records.
- Enhanced UI - more intuitive, user-friendly, and visually appealing UI.
- Modern technologies - greater appeal to a global talent pool of developers.
- Improved interoperability - support for FHIR and other standards.
What O3 is not
O3 is not a new platform version of OpenMRS. O3 is a frontend framework that you can run on top of your existing database. It communicates with the same REST API and FHIR API that the O2 UI communicates with. Whilst O3 requires a minimum platform version and minimum versions of various backend modules to run, you don't need to overhaul your existing backend to run O3. If you're interested in running O3 on top of your existing installation, follow this recipe to set up an instance of O3.
Technology stack
O3 uses the following technologies:
- React (opens in a new tab) - JavaScript library for building user interfaces
- TypeScript (opens in a new tab) - strongly typed superset of JavaScript that adds optional type annotations to JavaScript, which allows for static type checking and better tooling support.
- Carbon design system (opens in a new tab) - an open-source design system from IBM.
- Single SPA (opens in a new tab) - JavaScript router for frontend microservices.
- Webpack (opens in a new tab) - module bundler for JavaScript applications.
- OpenMRS REST (opens in a new tab) and FHIR (opens in a new tab) - backend APIs.