Hi everyone,
I’d like to open a discussion around the current structure of the openems/openems repository.
As the project grows in complexity and adoption, we may benefit from splitting the repository by technology to simplify development, contribution, and maintenance.
Current Situation
The monorepo currently includes several distinct components:
- Documentation (AsciiDoc)
- Backend + Edge (Java 21 / OSGi)
- UI (Typescript / Angular)
While having everything in one place has worked so far, this setup brings increasing challenges:
- CI/CD pipelines must handle multiple languages and tools
- Entry barriers are higher for focused contributors (e.g., frontend-only devs)
- Git performance (clone, indexing, IDE responsiveness) suffers
Proposed Split: By Technology
As a first step, I suggest splitting the monorepo into three dedicated repositories based on technology:
openems(Edge + Backend)openems-uiopenems-docs
In a later stage, it could be worth evaluating whether Backend and Edge should also be separated further.
Release Management Considerations
A valid concern is that release management across multiple repos becomes more complex.
However, this can be mitigated with automation (e.g., GitHub Actions, Woodpecker CI, etc.).
On the plus side, smaller repos enable:
- Faster and independent release cycles (e.g., hotfixes to UI without waiting for backend)
- Better control over versioning per component
Additional Benefits
- Faster
git clonetimes and lower disk usage - More maintainable and modular CI/CD workflows
- Clearer repository ownership and responsibilities
- Easier onboarding for new contributors focused on specific tech stacks
What do you think?
I’d love to hear your thoughts:
- Do you support the idea in principle?
- Do you see potential issues or drawbacks?
- Experience with similar restructuring in other projects?
Let’s discuss! A modular repository structure could be an important step forward for OpenEMS as we continue to grow.
- Keep the current monorepo
- Split into multiple repositories