If you are new to the project, a great place to start is Getting Started

Methodology

In order to accelerate project delivery, OpenLMIS version 3 uses a scaled agile approach. Read more about our Methodology and Process.

Development Requirements

Minimum

Tech Stack

For OpenLMIS version 3, the primary technologies used are:

LayerTool
Browser Application

Javascript with AngularJS 1

(HTML5 and CSS are used for templates and layout)

API ServicesJava 8 with Java Spring
DatabasePostgreSQL 9 or Amazon RDS
Infrastructure

Docker Engine 1 and Docker Compose 1

(Docker Containers run locally, in a data center, or in the cloud)

Skillset

To contribute to OpenLMIS, it will be important to have experience with Java or AngularJS or both. To work on the Java back-end of OpenLMIS, you should have knowledge of Java and an interest in working with the Spring Framework and RESTful APIs. To work on the AngularJS front-end of OpenLMIS, you should have knowledge of Javascript, HTML and CSS and an interest in working with the AngularJS framework. 

If you do not have these tech skills, there are lots of online resources to learn, and there are also lots of ways to contribute to OpenLMIS besides writing code. We value contributions including bug reports, feature suggestions, documentation, translations and more. See the Contributing section on docs.openlmis.org.

Technical Philosophy

The OpenLMIS software is focused on a service-based, API-driven, modular approach designed to better support customizations and extensions. The goal of this micro-services architecture is to enable multiple OpenLMIS implementations in different countries while still sharing one global, open source codebase. The end result is a powerful, flexible product that emphasizes interoperability, extensibility, andperformance at scale across countries, programs, and products.

Infrastructure

(also see Frameworks & Libraries)

Repositories on GitHub (each service/component in its own repo): OpenLMIS

Issue tracking on JIRA.

Developer Forum hosted on Google Groups:  https://groups.google.com/forum/#!forum/openlmis-dev

Jenkins for continuous integration.

SonarQube for static code analysis.

Transifex for translation/localization management.

Slack for real time chat, GitHub notifications, etc.  Slack domain is openlmis.slack.com.

docs.openlmis.org as a global document repository.

An ERD of the dev branch is at ci.openlmis.org/ERD/, built by a Jenkins build job. An ERD for each service is built by Jenkins and published online at URLs that follow this pattern: http://ci.openlmis.org/erd-[name of the service]/ (eg, http://ci.openlmis.org/erd-referencedata/).


Dev Tools

Docker is used for managing containers. See our Docker Cheat Sheet

IntelliJ IDEA is the recommended IDE for Java web service development. See our IntelliJ IDEA Knowledge Base


Coding Standards

See OpenLMIS Coding Standards and Service Style Guide.

For UI, see UI Extension Architecture and GuideUI Coding Conventions and UI Build documentation in the Requisition UI Readme and Dev UI Readme.


Communication

The dev community supports several communication channels.  Each mode serves a different purpose:


If you are interested in developing or deploying OpenLMIS, please reach out to the community as soon as possible, and be sure to read the Contribution Guide before getting started. The community will help you understand the current state of the product and how best for you to move forward.