- If you don't have one, create an OpenMRS ID, which you can use to contribute to this Wiki, manage issues in JIRA, and more.
- If you haven't already, create an account at https://github.com/
- Join the discussions at OpenMRS Talk. Be sure to add your GitHub username to your settings in Talk. Then introduce yourself to the community.
- Configure your Eclipse environment with the Step-by-Step Installation for Developers. The New Developer's Guide has a helpful chapter on Setting Up Your Development Environment.
- Watch some OpenMRS development screen-casts on YouTube.
- Try out the OpenMRS SDK.
- Create your first OpenMRS module. The Developer's Guide features a chapter on how to create a Hello World Module.
- Find some introductory issues (also shown below) that have the "Ready for Work" status to work on, and assign them to yourself by clicking the Claim Issue button. (Ask for clarification on the issue if needed.) If you find yourself taking long (days) without making any progress, feel free to un-assign yourself from the issue and choose another.
- Meet some other developers through real-time chat in Telegram (telegram.me/openmrs) or IRC (irc.openmrs.org).
- Try as much as you can to include unit tests for your changes. Remember to also do an "mvn clean install" to ensure that all existing unit tests and yours pass. Then create a pull request. If your changes affect the user interface, please run the web application to see the effects, and then attach a screenshot, before you commit.
- Log your time spent on that issue and click "Request Code Review" and a core developer will get you some feedback in short order
- Find another issue or choose a larger project to work on. See Unassigned Projects.
- If you join a sprint or choose to share your module (we hope you do), then you'll want to read about Using Git.
- When you no longer want to work on an issue that you have already assigned to yourself, please remember to un-assign yourself from it such that others can take it up. If you have any findings that you feel would be useful to whoever takes it up, please feel free to add a comment.
Please record your experiences (good or bad) on this child page. We are always trying to find ways to improve where we can do better and reinforce things we are doing well, so getting input from your perspective is very helpful & appreciated.
Current Sprint Issues
At all times, we have an ongoing Development Sprint.
For each sprint, we include issues of low complexity which are suitable for developers who are getting started with OpenMRS. We therefore encourage you to look in this pool of issues when looking for which to work on. Because a sprint has a number of developers working on a set of related features at the same time, working on it will give you the advantage of getting more immediate feedback in terms of responses to blocker questions, reviewing of your code, mentoring and guidance regarding how to do the issues, pair programming where necessary, and more.
The following issues are both "introductory" and also "curated", meaning that they have thorough descriptions of how to approach solving them:
If you aren't able to find an appropriate issue in the list above, here is the complete list of "introductory" issues, not necessarily "curated":
After Introductory Issues
After doing a couple of introductory issues, you may feel like working on issues of increased complexity. Or you may find the introductory issues boring and hence want to work on something more exciting.
Should you find yourself in this state, the active Development Sprint may be a good place for you to look next. The sprint has issues for all levels of complexity. The Sprint Schedule will always be updated with the active or current development sprint.
Here is a backlog of tickets prioritized by the community:
|UIFR-199||-DuiFramework.development.moduleid vm argument should support multiple folders||2016-01-21||2016-02-01||Unassigned||Daniel Kayiwa||Ready for Work||Unresolved|
|TRUNK-4945||Adding setmember to concept with retired set members either does not get added up or gets added in the wrong position||2016-09-19||2016-09-19||Daniel Kayiwa||Gaurav Deshkar||Code Review (Post-Commit)||Unresolved|
|TRUNK-4937||Saving a visit should not cascade to encounters associated to it||2016-09-08||2016-09-21||Preethi S||Preethi S||Code Review (Initial)||Unresolved|
|TRUNK-4830||Delete liquibase changesets added before OpenMRS 1.9.x||2016-02-16||2016-08-10||Unassigned||Rafal Korytkowski||Design||Unresolved|
|TRUNK-4822||Fix broken CI plan for MariaDB Docker test||2016-02-01||2016-02-14||Unassigned||Wyclif Luyima||Ready for Work||Unresolved|
|TRUNK-4821||Fix broken CI plan for OpenMRS on MariaDB||2016-02-01||2016-02-14||Unassigned||Wyclif Luyima||Ready for Work||Unresolved|
|TRUNK-4813||SQLException during the initial setup on MySQL 5.7||2016-01-22||2016-09-26||Unassigned||Daniel Kayiwa||Ready for Work||Unresolved|
|TRUNK-4730||Verify that all relevant domain objects have changed_by and date_changed fields||2015-06-09||2016-09-19||Manuela Lidia Grindei||Darius Jazayeri||In Progress||Unresolved|
|TRUNK-4212||SchedulerServiceTest fails depending on thread scheduling||2014-01-10||2016-06-02||Unassigned||Rafal Korytkowski||Ready for Work||Unresolved|
|TRUNK-3675||Cache results from getSearchLocales()||2012-08-10||2016-03-18||Unassigned||Rafal Korytkowski||Ready for Work||Unresolved|
|TRUNK-3638||Separate liquibase file into separate files per version||2012-07-25||2016-09-27||Wolf Schlegel||Roger Friedman||In Progress||Unresolved|
|STAND-85||Drastically improve documentation about building the Standalone||2016-02-18||2016-08-08||Sri Maurya Kummamuru||Darius Jazayeri||In Progress||Unresolved|
|SDK-164||Add fetch goal||2016-09-13||2016-09-29||Tomasz Marzeion||Rafal Korytkowski||Approved||Unresolved|
|RESTWS-613||Provide SearchHandler for Subclasses||2016-09-15||2016-09-16||Ivo Ulrich||Ivo Ulrich||In Progress||Unresolved|
|RESTWS-606||Should be able to get a system setting with a dot in its name on platform 2.0||2016-07-25||2016-07-28||Unassigned||Daniel Kayiwa||Ready for Work||Unresolved|
|RESTWS-466||REST custom representation of encounter : exception thrown if no preferredName||2014-10-27||2016-04-08||Unassigned||Jonathan Dick||Ready for Work||Unresolved|
|RESTWS-439||Get concepts throws exception when concept numeric fields are included in custom representation||2014-05-06||2016-09-13||Unassigned||Deepak N||Ready for Work||Unresolved|
|RA-1052||Open Web App for concepts||2016-02-29||2016-09-19||Rafal Korytkowski||Rafal Korytkowski||Accepted||Fixed|
|RA-1008||Most login scenarios should take you to the home page, not the last page that a logged-in user was seeing||2016-02-13||2016-09-29||Adam Grzybkowski||Darius Jazayeri||In Development||Unresolved|
|RA-1001||Update all modules that use Transifex to support all languages we support||2016-01-28||2016-01-28||Unassigned||Mark Goodrich||Waiting for Dev||Unresolved|
You could also do code reviews for pull requests.