Our developers are located all around the world. To enable them to work together on our software, we keep the source code in Internet-accessible revision control systems. Active projects are hosted at GitHub, a popular host for Git-based projects. Some older projects are still available in our Subversion repository, using Subversion (SVN). All code is world-readable, meaning that anyone in the world can view & download the source code. In GitHub, anyone can freely make an account, fork a repository, and make any changes they wish to the code. OpenMRS Full Committers have lots of experience within the OpenMRS project and have write access to all OpenMRS repositories, enabling them to make changes to the source code and accept pull requests from other developers. OpenMRS Partial Committers have read/write access to nearly all repositories as well, but are expected to work on their specific project(s). If you are looking for a stable release of the code, you should download it from the Downloads page on our wiki. The source code repositories on GitHub (and those remaining in Subversion) contain the latest versions with the latest development efforts and are generally not ready for production use.
Subversion use is deprecated in favor of Git, with nearly all active projects hosted on GitHub.
If you just wish to browse around or look at a few individual files go directly to the repository itself at https://github.com/openmrs (or use Fisheye/Crucible if the project is older and still on our SVN server).
Anonymous Read-Only Access
You can also browse projects via https://github.com/openmrs.
See Using Git for more information.
(Only used for legacy projects that have not yet been migrated to GitHub)
A Subversion client is required if you want anonymous read-only access to the repository. You can also browse for projects via http://source.openmrs.org/browse.
Or choose a project you would like and "check out" its source code. For example, to get the Logic module project, use:
For more help on using Subversion, read the Subversion website or Subversion book. The Subversion web site provides a list of clients and useful links (including a link to very useful Eclipse plug-in).
Read/Write Git Access
To submit changes to OpenMRS, we recommend forking the openmrs-core project and submitting pull requests. If you need push privileges to an existing repository in the OpenMRS organization on GitHub and are not already a Partial Committer, then ask one of the existing committers (you may be already working with one of them; if not, you can find them on IRC) to sponsor you as a new Partial Committer and send your request (CC'ing your sponsor) to email@example.com.
Read/Write Subversion Access
We encourage all new projects to start their own repos on GitHub. All active projects should consider migrating to GitHub. We are no longer accepting new project development within our Subversion repository.
Requesting a branch
When we used Subversion, long-lived branches were often used for isolating feature development. Such branches are discouraged on GitHub. Instead, fork the openmrs-core project or module repository into your own personal repository and get to work immediately! Using git, most developers are creating & destroying local branches as needed to help organize their work.
Requesting a module or project
We invite any developers to keep their OpenMRS-related work that benefits more than one implementation and uses an OSI-approved license or OPL within a module, contrib, or branch under the OpenMRS organization on GitHub. Community-developed modules and projects may want to request a project within the JIRA Issue Tracking System.
Storing it in your personal repository on GitHub
- Create a new repo: https://github.com/new
- Name the project "openmrs-module-yournewmoduleid" for easier searching/finding of projects across GitHub respositories
- Start using it immediately!
Requesting to store it in the OpenMRS organization on GitHub:
Send mail to firstname.lastname@example.org and include:
- Your GitHub.com ID If you don't have one, create a free one here.
- Short one sentence description of what your module will be doing
- What you think your module's id should be. (e.g: htmlformentry or serialization.xstream)