RMU Online is a project that implements Rolemaster Unified through a distributed set of APIs, shared libraries, and micro-frontends.
This repository is the platform entry point. It documents the solution, links to the modules that compose it, and provides local orchestration assets for infrastructure, APIs, and supporting services.
|
Warning
|
This application is an independent fan project for Rolemaster Unified. It is not affiliated with, endorsed by, or licensed by Iron Crown Enterprises (ICE), the owners of the Rolemaster intellectual property. All Rolemaster trademarks, game systems, and materials are the property of Iron Crown Enterprises. This software is provided for personal, non-commercial use only. If you enjoy Rolemaster, please support the official publications and content from ICE. |
The RMU Platform repository is intentionally informational and operational. The implementation of each bounded domain lives in its own repository, while this repository keeps the global view of the solution.
Main responsibilities:
-
Link to each API, micro-frontend, and shared module.
-
Describe the platform architecture and runtime dependencies.
-
Provide Docker Compose files for local infrastructure and API execution.
-
Keep deployment-oriented assets such as Kubernetes, Argo CD, Minikube, MongoDB backup, and AWS notes.
-
Centralize diagrams and high-level documentation for contributors.
RMU Engine is an online assistant for playing Rolemaster Unified games.
The application is divided into APIs developed in NestJS, Python, and Express/Node.js, along with micro-frontends developed in React using Webpack Module Federation. The shell handles authentication and shared application composition, while each MFE owns a specific domain such as core rules, strategic play, tactical play, items, NPCs, and spells.
The platform uses MongoDB for domain persistence, Kafka for event communication between services, and Keycloak as the OIDC identity and access management provider. Some local Compose profiles also include PostgreSQL for Keycloak storage and Kafka UI for event inspection.
| Module | Repository | Stack |
|---|---|---|
API Core |
NestJS |
|
API Strategic |
NestJS |
|
API Tactical |
NestJS |
|
API Attack |
Python |
|
API Attack Tables |
Node.js |
|
API Items |
NestJS |
|
API Spells |
NestJS |
|
API NPCs |
NestJS |
|
API NPC Names |
Node.js |
|
API Users |
NestJS |
|
React Shared Library |
React |
| Module | Repository | Stack |
|---|---|---|
MFE Shell |
React |
|
MFE Core |
React |
|
MFE Strategic |
React |
|
MFE Tactical |
React |
|
MFE NPCs |
React |
|
MFE Spells |
React |
|
MFE Assets |
Static assets |
-
docker-compose/: different Docker Compose configurations: base infrastructure only, infrastructure + APIs, infrastructure + APIs + Nginx. -
terraform/: Terraform scripts for AWS infrastructure provisioning. -
diagrams/: Architecture diagrams and their source files.
To deploy the project locally on a local Kubernetes cluster, we have the following Minikube-based resources (WIP):
-
minikube/: Helper scripts for running the platform on Minikube local Kubernetes -
argocd/: Argo CD application descriptors for GitOps deployment. -
k8s/: Kubernetes manifests for deployment on cloud or local clusters.
Install the following tools before starting the platform locally:
-
Docker Engine or Docker Desktop.
-
Docker Compose v2.
-
A local clone of this repository.
-
Access to the Docker images referenced by the Compose files.
The Compose files expect an external Docker network named rmu-network.
docker network create rmu-networkIf the network already exists, Docker will report it and you can continue.
The local Compose setup reads variables from docker-compose/.env. The file contains development credentials and local-only defaults for MongoDB, PostgreSQL, Keycloak, Kafka UI, and OIDC integration.
Use this option when you only need MongoDB, PostgreSQL, Keycloak, Kafka, and Kafka UI.
docker compose -f docker-compose/docker-compose.yaml up -dUseful local endpoints:
| Service | URL |
|---|---|
Keycloak |
|
Kafka UI |
|
MongoDB |
|
Use this option when you want to run the backend services from their published Docker images.
docker compose --env-file docker-compose/.env -f docker-compose/docker-compose-apis.yaml up -dThe API Compose profile exposes services such as:
| Service | Local port |
|---|---|
Core API |
|
Strategic API |
|
Tactical API |
|
Attack Tables API |
|
Items API |
|
NPC Names API |
|
NPCs API |
|
Spells API |
|
Attack API |
|
Use this option when you want the local API gateway in front of the services.
docker compose --env-file docker-compose/.env -f docker-compose/docker-compose-nginx.yaml up -dThe Nginx profile exposes the gateway on http://localhost and routes paths such as /core/, /strategic/, /tactical/, /attack/, /attack-tables/, and /items/ to the corresponding API containers.
docker compose --env-file docker-compose/.env -f docker-compose/docker-compose-apis.yaml downTo remove persisted local data as well, add -v after confirming that you no longer need the local volumes.
|
Warning
|
Some initialization data is intentionally not available in this public repository because it may contain copyrighted Rolemaster Unified material owned by Iron Crown Enterprises. |
As a result, a fresh local environment may start successfully but lack part of the game reference content needed for complete functional usage. Contributors should use legally obtained materials only for personal testing and must not submit copyrighted data, tables, text, or derived protected content to this repository.
The Postman collection linked at the top of this README provides a convenient starting point for exploring the available APIs. Depending on the local profile and seed data available in your environment, some requests may require manual configuration of authentication tokens, base URLs, or test data.
This project is distributed under the GPL-3.0 license. See LICENSE for details.
