# wso2/product-is architecture

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

- Interactive diagram: https://gitdiagram.com/wso2/product-is
- Repository: https://github.com/wso2/product-is

## Overview

WSO2 Identity Server is an identity and access management product with developer/administrator and end-user interfaces. The visible runtime assets include a dashboard framework and portal gadgets for account recovery, approvals, credentials, sessions, consent, certificates, and profile management. The repository slice also contains integration/scenario clients and OIDC conformance tooling; these are supporting test and validation workflows, not the server’s identity-processing backend. The excerpts do not show most frontend wiring or backend calls, so those relationships are left unasserted.

Main entry points: [`modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/app.js`](https://github.com/wso2/product-is/blob/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/app.js) (Dashboard app), [`product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/util/AuthenticateStubUtil.java`](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/util/AuthenticateStubUtil.java) (Scenario stub auth), [`oidc-conformance-tests/start_conformance_suite.py`](https://github.com/wso2/product-is/blob/master/oidc-conformance-tests/start_conformance_suite.py) (OIDC test runner), [`product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/oauth/OauthAdminClient.java`](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/oauth/OauthAdminClient.java) (OAuth admin client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dash["Dashboard"]
  node_dashboard["Dashboard app<br/>[app.js]"]
  node_dashboard_services["Dashboard modules<br/>[modules]"]
  node_dashboard_ui["Dashboard UI<br/>[js]"]
end

subgraph group_portal["End-user portal"]
  node_account_recovery["Account recovery<br/>[account-recovery]"]
  node_approvals["Approvals<br/>[approvals]"]
  node_backup_otp["Backup OTP<br/>[backup_otp]"]
  node_certificates["Certificate authority"]
  node_connected_accounts["Connected accounts<br/>[connected_accounts]"]
  node_consent["Consent management<br/>[consent_management]"]
  node_identity_management["Identity management"]
  node_sessions["Login sessions<br/>[login-sessions]"]
  node_my_sessions["My sessions<br/>[my-login-sessions]"]
  node_password["Password change<br/>[pwd_change]"]
  node_scim["SCIM providers<br/>[scim_providers]"]
  node_auth_apps["Authentication apps<br/>[user_auth_apps]"]
  node_profile["User profile<br/>[user_profile]"]
  node_portal_theme["Portal theme<br/>[portal]"]
end

subgraph group_clients["Integration clients"]
  node_admin_clients["Admin service clients"]
  node_authenticate_stub["Stub authentication"]
  node_remote_user_store["Remote user store"]
  node_uuid_user_store["UUID user store"]
  node_saml_query["SAML query client"]
  node_saml_utils["SAML query utilities"]
  node_scenario_oauth["OAuth scenarios"]
  node_scenario_oauth_admin["OAuth admin client"]
  node_scenario_user_store["Scenario user store"]
  node_scenario_auth["Scenario authenticator"]
  node_scenario_user_management["User management client"]
  node_scenario_auth_util["Scenario stub auth"]
end

subgraph group_conformance["OIDC conformance"]
  node_conformance_driver["OIDC test runner"]
  node_conformance_setup["Server configuration<br/>[configure_is.py]"]
  node_conformance_results["Result export<br/>[export_results.py]"]
end

node_user(("User"))
node_admin(("Administrator"))

node_user -.->|"opens"| node_dashboard
node_admin -.->|"opens"| node_dashboard
node_user -.->|"uses"| node_account_recovery
node_user -.->|"uses"| node_approvals
node_user -.->|"uses"| node_backup_otp
node_user -.->|"uses"| node_certificates
node_user -.->|"uses"| node_connected_accounts
node_user -.->|"uses"| node_consent
node_user -.->|"uses"| node_identity_management
node_user -.->|"uses"| node_sessions
node_user -.->|"uses"| node_my_sessions
node_user -.->|"uses"| node_password
node_user -.->|"uses"| node_scim
node_user -.->|"uses"| node_auth_apps
node_user -.->|"uses"| node_profile
node_dashboard -.->|"uses"| node_dashboard_services
node_dashboard -.->|"uses"| node_dashboard_ui
node_saml_query -->|"calls"| node_saml_utils
node_remote_user_store -->|"authenticates"| node_authenticate_stub
node_uuid_user_store -->|"authenticates"| node_authenticate_stub
node_scenario_oauth -->|"uses"| node_scenario_oauth_admin
node_scenario_oauth_admin -->|"authenticates"| node_scenario_auth_util
node_scenario_user_store -->|"authenticates"| node_scenario_auth_util
node_scenario_user_management -.->|"authenticates"| node_scenario_auth_util
node_scenario_auth -.->|"calls"| node_admin_clients
node_conformance_driver -.->|"configures"| node_conformance_setup
node_conformance_driver -.->|"exports"| node_conformance_results

click node_dashboard "https://github.com/wso2/product-is/blob/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/app.js"
click node_dashboard_services "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/modules"
click node_dashboard_ui "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/js"
click node_account_recovery "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/account-recovery"
click node_approvals "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/approvals"
click node_backup_otp "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/backup_otp"
click node_certificates "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/certificate_authority"
click node_connected_accounts "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/connected_accounts"
click node_consent "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/consent_management"
click node_identity_management "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/identity_management"
click node_sessions "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/login-sessions"
click node_my_sessions "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/my-login-sessions"
click node_password "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/pwd_change"
click node_scim "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/scim_providers"
click node_auth_apps "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/user_auth_apps"
click node_profile "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/user_profile"
click node_portal_theme "https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/themes/portal"
click node_admin_clients "https://github.com/wso2/product-is/tree/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients"
click node_authenticate_stub "https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/AuthenticateStub.java"
click node_remote_user_store "https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java"
click node_uuid_user_store "https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/uuid/UUIDUserStoreManagerServiceClient.java"
click node_saml_query "https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/sso/saml/query/SAMLQueryClient.java"
click node_saml_utils "https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/sso/saml/query/QueryClientUtils.java"
click node_scenario_oauth "https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/OAuth2CommonClient.java"
click node_scenario_oauth_admin "https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/oauth/OauthAdminClient.java"
click node_scenario_user_store "https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java"
click node_scenario_auth "https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/login/AuthenticatorClient.java"
click node_scenario_user_management "https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/UserManagementClient.java"
click node_scenario_auth_util "https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/util/AuthenticateStubUtil.java"
click node_conformance_driver "https://github.com/wso2/product-is/blob/master/oidc-conformance-tests/start_conformance_suite.py"
click node_conformance_setup "https://github.com/wso2/product-is/blob/master/oidc-conformance-tests/configure_is.py"
click node_conformance_results "https://github.com/wso2/product-is/blob/master/oidc-conformance-tests/export_results.py"

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_dashboard,node_dashboard_services,node_dashboard_ui,node_user toneBlue
class node_account_recovery,node_approvals,node_backup_otp,node_certificates,node_connected_accounts,node_consent,node_identity_management,node_sessions,node_my_sessions,node_password,node_scim,node_auth_apps,node_profile,node_portal_theme toneAmber
class node_admin_clients,node_authenticate_stub,node_remote_user_store,node_uuid_user_store,node_saml_query,node_saml_utils,node_scenario_oauth,node_scenario_oauth_admin,node_scenario_user_store,node_scenario_auth,node_scenario_user_management,node_scenario_auth_util toneMint
class node_conformance_driver,node_conformance_setup,node_conformance_results toneRose
class node_admin toneIndigo
```

## Components

### Dashboard

- [Dashboard app](https://github.com/wso2/product-is/blob/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/app.js): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/app.js`
- [Dashboard modules](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/modules): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/modules`
- [Dashboard UI](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/js): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/dashboard/js`

### End-user portal

- [Account recovery](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/account-recovery): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/account-recovery`
- [Approvals](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/approvals): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/approvals`
- [Backup OTP](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/backup_otp): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/backup_otp`
- [Certificate authority](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/certificate_authority): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/certificate_authority`
- [Connected accounts](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/connected_accounts): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/connected_accounts`
- [Consent management](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/consent_management): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/consent_management`
- [Identity management](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/identity_management): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/identity_management`
- [Login sessions](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/login-sessions): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/login-sessions`
- [My sessions](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/my-login-sessions): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/my-login-sessions`
- [Password change](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/pwd_change): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/pwd_change`
- [SCIM providers](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/scim_providers): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/scim_providers`
- [Authentication apps](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/user_auth_apps): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/user_auth_apps`
- [User profile](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/user_profile): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/gadgets/user_profile`
- [Portal theme](https://github.com/wso2/product-is/tree/master/modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/themes/portal): `modules/features/org.wso2.identity.jaggery.apps.feature/src/main/resources/portal/themes/portal`

### Integration clients

- [Admin service clients](https://github.com/wso2/product-is/tree/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients): `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients`
- [Stub authentication](https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/AuthenticateStub.java): `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/AuthenticateStub.java`
- [Remote user store](https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java): `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java`
- [UUID user store](https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/uuid/UUIDUserStoreManagerServiceClient.java): `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/uuid/UUIDUserStoreManagerServiceClient.java`
- [SAML query client](https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/sso/saml/query/SAMLQueryClient.java): `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/sso/saml/query/SAMLQueryClient.java`
- [SAML query utilities](https://github.com/wso2/product-is/blob/master/modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/sso/saml/query/QueryClientUtils.java): `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/sso/saml/query/QueryClientUtils.java`
- [OAuth scenarios](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/OAuth2CommonClient.java): `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/OAuth2CommonClient.java`
- [OAuth admin client](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/oauth/OauthAdminClient.java): `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/oauth/OauthAdminClient.java`
- [Scenario user store](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java): `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java`
- [Scenario authenticator](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/login/AuthenticatorClient.java): `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/login/AuthenticatorClient.java`
- [User management client](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/UserManagementClient.java): `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/UserManagementClient.java`
- [Scenario stub auth](https://github.com/wso2/product-is/blob/master/product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/util/AuthenticateStubUtil.java): `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/util/AuthenticateStubUtil.java`

### OIDC conformance

- [OIDC test runner](https://github.com/wso2/product-is/blob/master/oidc-conformance-tests/start_conformance_suite.py): `oidc-conformance-tests/start_conformance_suite.py`
- [Server configuration](https://github.com/wso2/product-is/blob/master/oidc-conformance-tests/configure_is.py): `oidc-conformance-tests/configure_is.py`
- [Result export](https://github.com/wso2/product-is/blob/master/oidc-conformance-tests/export_results.py): `oidc-conformance-tests/export_results.py`

### Other components

- **User**
- **Administrator**

## Connections

- User → Dashboard app: opens
- Administrator → Dashboard app: opens
- User → Account recovery: uses
- User → Approvals: uses
- User → Backup OTP: uses
- User → Certificate authority: uses
- User → Connected accounts: uses
- User → Consent management: uses
- User → Identity management: uses
- User → Login sessions: uses
- User → My sessions: uses
- User → Password change: uses
- User → SCIM providers: uses
- User → Authentication apps: uses
- User → User profile: uses
- Dashboard app → Dashboard modules: uses
- Dashboard app → Dashboard UI: uses
- SAML query client → SAML query utilities: calls (evidence: `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/sso/saml/query/SAMLQueryClient.java`)
- Remote user store → Stub authentication: authenticates (evidence: `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java`)
- UUID user store → Stub authentication: authenticates (evidence: `modules/integration/tests-common/admin-clients/src/main/java/org/wso2/identity/integration/common/clients/usermgt/uuid/UUIDUserStoreManagerServiceClient.java`)
- OAuth scenarios → OAuth admin client: uses (evidence: `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/OAuth2CommonClient.java`)
- OAuth admin client → Scenario stub auth: authenticates (evidence: `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/oauth/OauthAdminClient.java`)
- Scenario user store → Scenario stub auth: authenticates (evidence: `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/usermgt/remote/RemoteUserStoreManagerServiceClient.java`)
- User management client → Scenario stub auth: authenticates (evidence: `product-scenarios/scenarios-commons/src/main/java/org/wso2/identity/scenarios/commons/clients/UserManagementClient.java`)
- Scenario authenticator → Admin service clients: calls
- OIDC test runner → Server configuration: configures
- OIDC test runner → Result export: exports
