The Implementer Tools are designed to help non-technical implementers and administrators configure and customize OpenMRS 3 according to their requirements. They provide features such as adding or removing extensions in an extension slot, adding or removing translation overrides, customizing various configuration points in the UI, and more.
However, some functionalities previously did not work as expected, and several issues reduced the reliability of the tool. This project aimed to address these problems and enhance the overall usability, reliability, and flexibility of the Implementer Tools.
Objectives
The main objectives of this project were to:
Ensure a foolproof UI by handling edge cases where a config point is not defined properly.
Improve support for editing object values in the configuration system.
Add native UI support for overriding translations in the Implementer Tools.
Enhance the extension management system to allow adding, removing, and modifying extensions more effectively.
Implement dark mode following Carbon’s theme guidelines instead of using style overrides.
Enable privilege-based display conditions for apps/extensions based on user roles.
Implement server-side storage for configuration changes instead of relying only on local storage.
Project Repository
Pull Requests
Configuration Schema
I updated the configuration schema files for esm-patient-chart, esm-core, esm-form-builder and esm-patient-management to follow best practices. This significantly reduced runtime bugs. Now, all configuration points are properly defined and users can modify them easily, improving overall reliability.
Validators
Previously, the custom validators defined in the configuration schema files were not being applied at runtime. This meant that invalid values could still be saved. I implemented the validator logic so that every validation now works correctly, ensuring no inappropriate values are stored.
Carbon React’s Theme Component
Earlier, dark mode in the Implementer Tools was achieved through manual CSS overrides. I re-implemented it using Carbon React’s built-in Theme component, reducing future maintenance overhead and ensuring consistency with Carbon’s design standards.
Extensions & Extension Slots
Extensions are one of the most powerful features within OpenMRS. Previously, the order functionality didn’t work properly. I introduced drag-and-drop functionality to reorder extensions within a slot. All added extensions are now listed clearly, and users can arrange them by simply dragging and dropping into their desired position. Newly added or removed extensions are also reflected immediately in the UI.
Translation Overrides
Non-technical implementers often found it difficult to add translation overrides directly into JSON files. I implemented a UI-based translation override feature where users can:
Select a language from the list,
Search for strings via a combobox,
Add or edit translations using an input field,
Remove overrides as needed.
The changes are instantly reflected in the UI, making the process much more convenient and accessible.
There are still opportunities to further enhance the Implementer Tools. Some planned improvements include:
Enabling privilege-based display conditions for apps/extensions based on user roles.
Implementing server-side storage for configuration changes instead of relying solely on local storage.
Final Thoughts on GSoC
It has been a wonderful and exciting experience working on such a crucial project within a large codebase. Over these 12 weeks, I learned many best practices — from software development to open-source collaboration — that have strengthened my foundation as a developer and will continue to help me in the future.
I would like to thank OpenMRS and Google Summer of Code for providing such opportunities for students to gain real-world experience through open source and global collaboration.
A huge thank you to my mentor, @vasharma05, for guiding me throughout this journey and ensuring I stayed on track. I learned so much from our weekly discussions and your constant feedback. Special thanks to @dkigen, @bistenes, and @ibacher for their help, reviews, and support along the way.
Finally, I’d like to sincerely thank our GSoC program administrators, @jayasanka and @beryl, for their continuous support and coordination throughout the program. Your efforts made this journey smooth and enjoyable for all of us.
Although my GSoC period has ended, I will definitely stay connected with the OpenMRS community and look forward to contributing whenever I can.