Skip to main content

System Architecture

OpenCDMP is built on a microservices architecture — each capability runs as an independent Docker container, communicating through well-defined APIs and an async message bus. This allows each service to be developed, deployed, and scaled independently.


Services

Nginx — Reverse Proxy

The sole service exposed to the internet. Handles SSL/TLS termination, routes incoming requests to the Webapp or API, and hides all internal services from direct external access.

Webapp — Angular Frontend

Serves the browser-based user interface. Communicates exclusively with the API Service and authenticates users via Keycloak.

API Service — Java Backend

The core of the platform. Handles all business logic, exposes the REST API consumed by the Webapp, orchestrates plugin calls (file transformers, deposit services), writes to PostgreSQL, indexes to Elasticsearch, and publishes events to RabbitMQ.

Annotation Service

Manages the annotations (comments and reviews) lifecycle — creating, resolving, and tracking annotation threads on plans and descriptions. Closed source, free-to-use license.

Notification Service

Sends email and in-app notifications triggered by platform events (invitations, status changes, annotations, etc.). Templates and preferences are configurable. Closed source, free-to-use license.

RabbitMQ — Message Broker

Decouples the API Service from the Annotation and Notification services. The API publishes domain events; downstream services subscribe and react asynchronously.

PostgreSQL — Primary Database

Stores all persistent application data: plans, descriptions, blueprints, templates, users, configuration, and annotation records.

Elasticsearch — Search Index

Powers full-text search across plans and descriptions. The API keeps the index in sync on every create, update, and delete operation.

File Transformers — Pluggable Export/Import

Independent Spring Boot microservices, one per format. Each transformer implements a standard interface and registers with OpenCDMP at startup. PDF export is handled by the DOCX transformer — there is no separate PDF service. See File Transformer Plugin.

Deposit Services — Pluggable DOI Assignment

Independent Spring Boot microservices, one per repository. Each service authenticates with its target repository, uploads the plan files, and returns the minted DOI. See Deposit Plugin.

Keycloak — Authentication

Manages user identities, roles, and access tokens. Both the Webapp (user login) and the API Service (token validation) integrate with Keycloak via OAuth2/OIDC.