openmrs plans/ideas 3.0.0

Hi there!

I just wanted to share some things I think might improve OpenMRS which might be bigger changes so I thought of the roadmap and saw 3.0.0. Not sure if there is already a place where there are wishes/plans. Wiki is currently down so I cant see https://wiki.openmrs.org/display/docs/Technical+Road+Map

Some thought are:

  • make openmrs cloud-native/adhere to 12 factor apps rules https://12factor.net/ (like for example take configs out of environment variables not files/java properties; only log to console appender not files). This would make it easy to deploy openmrs on cloud providers, ease development
  • ensure spring starts immediately when openmrs is deployed (and remove all the static Context, OpenmrsUtil methods). Leverage Spring to get configs out of the environment. Make use of spring profiles?
  • use java 8 time api, instead of java.util.Date

Are these realistic for example for 3.0.0? What would need to be done for the openmrs ecosystem (modules, distributions, implementations, …) I am sure you have tons of ideas of what you would you like to see, please share! And what can we do to already work towards these goals

Did you mean to say, take configs out of environment variables or the opposite? :slight_smile:

Thanks @teleivo for bringing this up!

Since we have stumbled on the issue of making OpenMRS/Bahmni support a full language switch (see Ext I18N), I would add:

  • Enable I18N support for metadata names and descriptions (on the model of what’s done with the Concept class).

thats what I mean (not the opposite :slight_smile:)

@teleivo but the link you gave seems to say the opposite. :slight_smile:

Not sure where it says that. On https://12factor.net/config it states:

The twelve-factor app stores config in environment variables

Spring boot might also be interesting, creating a runnable openmrs with embedded app server:

I was looking at your “take configs out of environment variables” vs “The twelve-factor app stores config in environment variables”.

Well it goes both ways :laughing: the app stores and takes/gets its config in/from environment variables.

I think I see the confusion:

“take config out of environment variables”

  • What @teleivo meant: “obtain configuration through environment variables”

  • What @dkayiwa read: “remove configuration from environment variables”

Thanks to English for making it too easy to take ambiguity out of language. :slight_smile:

Love these ideas. Some more thoughts for OpenMRS 3.0.0 (some technical, some more cultural):

  • Add more business logic into the Platform (e.g., incorporating emrapi methods like we discussed recently in a design forum).
  • Steps toward cluster support
    • Remove use of singletons (as you mentioned)
    • Begin using & promoting redis (or similar) for application state
    • Review queries for those that might not be safe in a clustered enviromment & refactor them
  • More automation, including integration tests
  • Utility functions for escaping all user-entered content by default when rendering (i.e., opt-out of escaping when displaying content) to better address XSS vulnerabilities.

Stretch goals:

  • Convert to postgres as default database
  • Migrate from JIRA to GitHub for issue management

For 4.0.0:

  • Make our API horizontally scalable (clusterable)

For 5.0.0:

  • Separate the API into microservices
  • Containerize services so they can leverage whatever technology suits their needs best (e.g., nosql databases)

Loool, @burke you got it man!!! :smile: