# openidentityplatform/openidm architecture

> Architecture diagram of the GitHub repository openidentityplatform/openidm, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/openidentityplatform/openidm
- Repository: https://github.com/openidentityplatform/openidm

## Overview

OpenIDM is an identity-management platform for consolidating identity sources, managing objects through REST, and synchronizing data with external systems. A principal workflow is a client request entering the service layer, passing authentication, and reaching managed-object handling backed by a repository; configured synchronization and reconciliation provide the cross-system workflow. The tree and excerpts support these major subsystems, but do not establish every runtime connection, so uncertain links are omitted. The README also describes user self-service and admin UIs; their implementation is not represented in the sampled runtime sources.

Main entry points: [`openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectService.java`](https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectService.java) (Managed Objects), [`openidm-core/src/main/java/org/forgerock/openidm/sync/impl/SynchronizationService.java`](https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/sync/impl/SynchronizationService.java) (Synchronization), [`openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/impl/OpenICFProvisionerService.java`](https://github.com/openidentityplatform/openidm/blob/master/openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/impl/OpenICFProvisionerService.java) (OpenICF Connectors), [`openidm-config/src/main/java/org/forgerock/openidm/config/manage/ConfigObjectService.java`](https://github.com/openidentityplatform/openidm/blob/master/openidm-config/src/main/java/org/forgerock/openidm/config/manage/ConfigObjectService.java) (Configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and API"]
  node_servlet["Servlet API"]
  node_auth["Authentication"]
  node_routes["REST Routing<br/>[RouteService.java]"]
end

subgraph group_identity["Identity Management"]
  node_managed["Managed Objects"]
  node_repository[("JDBC Repository")]
  node_sync["Synchronization"]
  node_recon["Reconciliation"]
end

subgraph group_integration["Integration"]
  node_systemsets["System Objects"]
  node_openicf["OpenICF Connectors"]
  node_idp["Identity Providers"]
  node_externalrest["External REST<br/>[RestService.java]"]
  node_email["Email Service"]
end

subgraph group_platform["Platform Services"]
  node_config["Configuration"]
  node_scheduler["Scheduler"]
  node_messaging["Messaging"]
  node_audit["Audit"]
  node_health["Health Status<br/>[HealthService.java]"]
end

node_client(("API Client"))
node_data[("Identity Sources")]

node_client -->|"sends request"| node_servlet
node_servlet -->|"passes request"| node_auth
node_auth -->|"authenticates"| node_routes
node_routes -->|"dispatches"| node_managed
node_managed -->|"reads and writes"| node_repository
node_managed -.->|"routes sync actions"| node_sync
node_scheduler -->|"executes scheduled actions"| node_sync
node_sync -->|"starts reconciliation"| node_recon
node_systemsets -->|"uses provisioner"| node_openicf
node_openicf -->|"provisions identities"| node_data
node_sync -.->|"synchronizes systems"| node_systemsets
node_idp -.->|"obtains identity"| node_data
node_externalrest -.->|"calls external API"| node_data
node_email -.->|"sends notifications"| node_data
node_config -->|"configures objects"| node_managed
node_config -->|"configures connectors"| node_openicf
node_messaging -.->|"processes messages"| node_data
node_audit -.->|"records events"| node_data
node_health -->|"reports readiness"| node_client

click node_servlet "https://github.com/openidentityplatform/openidm/blob/master/openidm-api-servlet/src/main/java/org/forgerock/openidm/servlet/internal/ServletComponent.java"
click node_auth "https://github.com/openidentityplatform/openidm/blob/master/openidm-authnfilter/src/main/java/org/forgerock/openidm/auth/AuthenticationService.java"
click node_routes "https://github.com/openidentityplatform/openidm/blob/master/openidm-router/src/main/java/org/forgerock/openidm/router/RouteService.java"
click node_managed "https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectService.java"
click node_repository "https://github.com/openidentityplatform/openidm/blob/master/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/JDBCRepoService.java"
click node_sync "https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/sync/impl/SynchronizationService.java"
click node_recon "https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/sync/impl/ReconciliationService.java"
click node_systemsets "https://github.com/openidentityplatform/openidm/blob/master/openidm-provisioner/src/main/java/org/forgerock/openidm/provisioner/impl/SystemObjectSetService.java"
click node_openicf "https://github.com/openidentityplatform/openidm/blob/master/openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/impl/OpenICFProvisionerService.java"
click node_idp "https://github.com/openidentityplatform/openidm/blob/master/openidm-identity-provider/src/main/java/org/forgerock/openidm/idp/impl/IdentityProviderService.java"
click node_externalrest "https://github.com/openidentityplatform/openidm/blob/master/openidm-external-rest/src/main/java/org/forgerock/openidm/external/rest/RestService.java"
click node_email "https://github.com/openidentityplatform/openidm/blob/master/openidm-external-email/src/main/java/org/forgerock/openidm/external/email/impl/EmailServiceImpl.java"
click node_config "https://github.com/openidentityplatform/openidm/blob/master/openidm-config/src/main/java/org/forgerock/openidm/config/manage/ConfigObjectService.java"
click node_scheduler "https://github.com/openidentityplatform/openidm/blob/master/openidm-scheduler/src/main/java/org/forgerock/openidm/scheduler/SchedulerService.java"
click node_messaging "https://github.com/openidentityplatform/openidm/blob/master/openidm-messaging/src/main/java/org/forgerock/openidm/messaging/MessagingService.java"
click node_audit "https://github.com/openidentityplatform/openidm/blob/master/openidm-audit/src/main/java/org/forgerock/openidm/audit/impl/AuditServiceImpl.java"
click node_health "https://github.com/openidentityplatform/openidm/blob/master/openidm-infoservice/src/main/java/org/forgerock/openidm/info/impl/HealthService.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_servlet,node_auth,node_routes,node_client toneBlue
class node_managed,node_repository,node_sync,node_recon,node_data toneAmber
class node_systemsets,node_openicf,node_idp,node_externalrest,node_email toneMint
class node_config,node_scheduler,node_messaging,node_audit,node_health toneRose
```

## Components

### Access and API

- [Servlet API](https://github.com/openidentityplatform/openidm/blob/master/openidm-api-servlet/src/main/java/org/forgerock/openidm/servlet/internal/ServletComponent.java): `openidm-api-servlet/src/main/java/org/forgerock/openidm/servlet/internal/ServletComponent.java`
- [Authentication](https://github.com/openidentityplatform/openidm/blob/master/openidm-authnfilter/src/main/java/org/forgerock/openidm/auth/AuthenticationService.java): `openidm-authnfilter/src/main/java/org/forgerock/openidm/auth/AuthenticationService.java`
- [REST Routing](https://github.com/openidentityplatform/openidm/blob/master/openidm-router/src/main/java/org/forgerock/openidm/router/RouteService.java): `openidm-router/src/main/java/org/forgerock/openidm/router/RouteService.java`

### Identity Management

- [Managed Objects](https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectService.java): `openidm-core/src/main/java/org/forgerock/openidm/managed/ManagedObjectService.java`
- [JDBC Repository](https://github.com/openidentityplatform/openidm/blob/master/openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/JDBCRepoService.java): `openidm-repo-jdbc/src/main/java/org/forgerock/openidm/repo/jdbc/impl/JDBCRepoService.java`
- [Synchronization](https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/sync/impl/SynchronizationService.java): `openidm-core/src/main/java/org/forgerock/openidm/sync/impl/SynchronizationService.java`
- [Reconciliation](https://github.com/openidentityplatform/openidm/blob/master/openidm-core/src/main/java/org/forgerock/openidm/sync/impl/ReconciliationService.java): `openidm-core/src/main/java/org/forgerock/openidm/sync/impl/ReconciliationService.java`

### Integration

- [System Objects](https://github.com/openidentityplatform/openidm/blob/master/openidm-provisioner/src/main/java/org/forgerock/openidm/provisioner/impl/SystemObjectSetService.java): `openidm-provisioner/src/main/java/org/forgerock/openidm/provisioner/impl/SystemObjectSetService.java`
- [OpenICF Connectors](https://github.com/openidentityplatform/openidm/blob/master/openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/impl/OpenICFProvisionerService.java): `openidm-provisioner-openicf/src/main/java/org/forgerock/openidm/provisioner/openicf/impl/OpenICFProvisionerService.java`
- [Identity Providers](https://github.com/openidentityplatform/openidm/blob/master/openidm-identity-provider/src/main/java/org/forgerock/openidm/idp/impl/IdentityProviderService.java): `openidm-identity-provider/src/main/java/org/forgerock/openidm/idp/impl/IdentityProviderService.java`
- [External REST](https://github.com/openidentityplatform/openidm/blob/master/openidm-external-rest/src/main/java/org/forgerock/openidm/external/rest/RestService.java): `openidm-external-rest/src/main/java/org/forgerock/openidm/external/rest/RestService.java`
- [Email Service](https://github.com/openidentityplatform/openidm/blob/master/openidm-external-email/src/main/java/org/forgerock/openidm/external/email/impl/EmailServiceImpl.java): `openidm-external-email/src/main/java/org/forgerock/openidm/external/email/impl/EmailServiceImpl.java`

### Platform Services

- [Configuration](https://github.com/openidentityplatform/openidm/blob/master/openidm-config/src/main/java/org/forgerock/openidm/config/manage/ConfigObjectService.java): `openidm-config/src/main/java/org/forgerock/openidm/config/manage/ConfigObjectService.java`
- [Scheduler](https://github.com/openidentityplatform/openidm/blob/master/openidm-scheduler/src/main/java/org/forgerock/openidm/scheduler/SchedulerService.java): `openidm-scheduler/src/main/java/org/forgerock/openidm/scheduler/SchedulerService.java`
- [Messaging](https://github.com/openidentityplatform/openidm/blob/master/openidm-messaging/src/main/java/org/forgerock/openidm/messaging/MessagingService.java): `openidm-messaging/src/main/java/org/forgerock/openidm/messaging/MessagingService.java`
- [Audit](https://github.com/openidentityplatform/openidm/blob/master/openidm-audit/src/main/java/org/forgerock/openidm/audit/impl/AuditServiceImpl.java): `openidm-audit/src/main/java/org/forgerock/openidm/audit/impl/AuditServiceImpl.java`
- [Health Status](https://github.com/openidentityplatform/openidm/blob/master/openidm-infoservice/src/main/java/org/forgerock/openidm/info/impl/HealthService.java): `openidm-infoservice/src/main/java/org/forgerock/openidm/info/impl/HealthService.java`

### Other components

- **API Client**
- **Identity Sources**

## Connections

- API Client → Servlet API: sends request
- Servlet API → Authentication: passes request
- Authentication → REST Routing: authenticates
- REST Routing → Managed Objects: dispatches
- Managed Objects → JDBC Repository: reads and writes
- Managed Objects → Synchronization: routes sync actions
- Scheduler → Synchronization: executes scheduled actions
- Synchronization → Reconciliation: starts reconciliation
- System Objects → OpenICF Connectors: uses provisioner
- OpenICF Connectors → Identity Sources: provisions identities
- Synchronization → System Objects: synchronizes systems
- Identity Providers → Identity Sources: obtains identity
- External REST → Identity Sources: calls external API
- Email Service → Identity Sources: sends notifications
- Configuration → Managed Objects: configures objects
- Configuration → OpenICF Connectors: configures connectors
- Messaging → Identity Sources: processes messages
- Audit → Identity Sources: records events
- Health Status → API Client: reports readiness
