# olvid-io/nextcloud-app architecture

> Architecture diagram of the GitHub repository olvid-io/nextcloud-app, 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/olvid-io/nextcloud-app
- Repository: https://github.com/olvid-io/nextcloud-app

## Overview

Olvid is a Nextcloud app that provides an administrative UI for managing users and groups, plus directory and binary engine APIs for Olvid clients. Admins navigate the Vue views and use detail panels to manage identities and groups; the frontend calls the app API, whose handlers use Nextcloud context and persistent Olvid records. Client-facing directory routes dispatch to directory and engine handlers. Event listeners and synchronization tasks form supporting lifecycle and server-sync branches. Several route, cron, and storage implementations were not sampled, so uncertain links are omitted.

Main entry points: [`src/App.vue`](https://github.com/olvid-io/nextcloud-app/blob/main/src/App.vue) (Admin shell), [`src/components/UserDetailsSidebar.vue`](https://github.com/olvid-io/nextcloud-app/blob/main/src/components/UserDetailsSidebar.vue) (User detail panel), [`lib/Controller/DirectoryApiController.php`](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Controller/DirectoryApiController.php) (Directory routes), [`lib/Utils/Context/OlvidContext.php`](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Utils/Context/OlvidContext.php) (Runtime context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Admin interface"]
  node_main["UI bootstrap<br/>[main.js]"]
  node_app["Admin shell<br/>[App.vue]"]
  node_router["Page router<br/>[router.ts]"]
  node_views["Management views"]
  node_user_panel["User detail panel"]
  node_group_panel["Group detail panel"]
  node_user_dialogs["Identity dialogs"]
  node_magic_link["Magic link dialog<br/>[MagicLinkModal.vue]"]
  node_avatar["Avatar display<br/>[OlvidAvatar.vue]"]
end

subgraph group_admin_api["App management API"]
  node_app_controller["Management routes"]
  node_app_handlers["User and group handlers"]
end

subgraph group_client_api["Client APIs"]
  node_directory_controller["Directory routes"]
  node_directory_handlers["Directory handlers"]
  node_engine_handlers["Engine handlers"]
  node_engine_base["Binary API base"]
end

subgraph group_domain["Domain and persistence"]
  node_context["Runtime context<br/>[OlvidContext.php]"]
  node_db_context["Database context"]
  node_mappers["Record mappers"]
  node_group_record["Group record<br/>[OlvidGroup.php]"]
  node_config["App configuration"]
end

subgraph group_lifecycle["Lifecycle and sync"]
  node_app_bootstrap["App registration<br/>[Application.php]"]
  node_listeners["User and group events"]
  node_cron["Sync tasks"]
end

node_admin(("Nextcloud admin"))
node_client(("Olvid client"))
node_olvid_server["Olvid server"]

node_admin -->|"opens app"| node_main
node_main -->|"mounts"| node_app
node_main -->|"loads routes"| node_router
node_router -->|"routes to"| node_views
node_app -->|"renders"| node_user_panel
node_app -->|"renders"| node_group_panel
node_user_panel -->|"renders"| node_user_dialogs
node_user_panel -->|"renders"| node_magic_link
node_user_panel -->|"renders"| node_avatar
node_group_panel -->|"renders"| node_avatar
node_app -->|"fetches status"| node_app_controller
node_app_controller -->|"delegates to"| node_app_handlers
node_app_controller -->|"uses context"| node_context
node_directory_controller -->|"dispatches to"| node_directory_handlers
node_directory_controller -->|"dispatches to"| node_engine_handlers
node_client -.->|"calls routes"| node_directory_controller
node_engine_handlers -->|"extends base"| node_engine_base
node_engine_base -->|"receives context"| node_context
node_context -->|"exposes database"| node_db_context
node_db_context -->|"holds mappers"| node_mappers
node_group_record -->|"builds signed data"| node_context
node_directory_controller -->|"uses config"| node_config
node_app_bootstrap -->|"registers listeners"| node_listeners
node_app_bootstrap -->|"registers settings"| node_config
node_cron -.->|"synchronizes"| node_olvid_server

click node_main "https://github.com/olvid-io/nextcloud-app/blob/main/src/main.js"
click node_app "https://github.com/olvid-io/nextcloud-app/blob/main/src/App.vue"
click node_router "https://github.com/olvid-io/nextcloud-app/blob/main/src/router.ts"
click node_views "https://github.com/olvid-io/nextcloud-app/tree/main/src/views"
click node_user_panel "https://github.com/olvid-io/nextcloud-app/blob/main/src/components/UserDetailsSidebar.vue"
click node_group_panel "https://github.com/olvid-io/nextcloud-app/blob/main/src/components/GroupDetailsSidebar.vue"
click node_user_dialogs "https://github.com/olvid-io/nextcloud-app/blob/main/src/components/UnlinkIdentityModal.vue"
click node_magic_link "https://github.com/olvid-io/nextcloud-app/blob/main/src/components/MagicLinkModal.vue"
click node_avatar "https://github.com/olvid-io/nextcloud-app/blob/main/src/components/OlvidAvatar.vue"
click node_app_controller "https://github.com/olvid-io/nextcloud-app/blob/main/lib/Controller/AppApiController.php"
click node_app_handlers "https://github.com/olvid-io/nextcloud-app/tree/main/lib/Api/App"
click node_directory_controller "https://github.com/olvid-io/nextcloud-app/blob/main/lib/Controller/DirectoryApiController.php"
click node_directory_handlers "https://github.com/olvid-io/nextcloud-app/tree/main/lib/Api/Directory"
click node_engine_handlers "https://github.com/olvid-io/nextcloud-app/tree/main/lib/Api/Engine"
click node_engine_base "https://github.com/olvid-io/nextcloud-app/blob/main/lib/Api/Engine/AbstractEngineApiHandler.php"
click node_context "https://github.com/olvid-io/nextcloud-app/blob/main/lib/Utils/Context/OlvidContext.php"
click node_db_context "https://github.com/olvid-io/nextcloud-app/blob/main/lib/Utils/Context/OlvidContextDatabase.php"
click node_mappers "https://github.com/olvid-io/nextcloud-app/tree/main/lib/Db"
click node_group_record "https://github.com/olvid-io/nextcloud-app/blob/main/lib/Db/OlvidGroup.php"
click node_config "https://github.com/olvid-io/nextcloud-app/blob/main/lib/Utils/OlvidAppConfigManager.php"
click node_app_bootstrap "https://github.com/olvid-io/nextcloud-app/blob/main/lib/AppInfo/Application.php"
click node_listeners "https://github.com/olvid-io/nextcloud-app/tree/main/lib/Listener"
click node_cron "https://github.com/olvid-io/nextcloud-app/tree/main/lib/Cron"

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_main,node_app,node_router,node_views,node_user_panel,node_group_panel,node_user_dialogs,node_magic_link,node_avatar,node_client toneBlue
class node_app_controller,node_app_handlers toneAmber
class node_directory_controller,node_directory_handlers,node_engine_handlers,node_engine_base,node_olvid_server toneMint
class node_context,node_db_context,node_mappers,node_group_record,node_config toneRose
class node_app_bootstrap,node_listeners,node_cron,node_admin toneIndigo
```

## Components

### Admin interface

- [UI bootstrap](https://github.com/olvid-io/nextcloud-app/blob/main/src/main.js): `src/main.js`
- [Admin shell](https://github.com/olvid-io/nextcloud-app/blob/main/src/App.vue): `src/App.vue`
- [Page router](https://github.com/olvid-io/nextcloud-app/blob/main/src/router.ts): `src/router.ts`
- [Management views](https://github.com/olvid-io/nextcloud-app/tree/main/src/views): `src/views`
- [User detail panel](https://github.com/olvid-io/nextcloud-app/blob/main/src/components/UserDetailsSidebar.vue): `src/components/UserDetailsSidebar.vue`
- [Group detail panel](https://github.com/olvid-io/nextcloud-app/blob/main/src/components/GroupDetailsSidebar.vue): `src/components/GroupDetailsSidebar.vue`
- [Identity dialogs](https://github.com/olvid-io/nextcloud-app/blob/main/src/components/UnlinkIdentityModal.vue): `src/components/UnlinkIdentityModal.vue`
- [Magic link dialog](https://github.com/olvid-io/nextcloud-app/blob/main/src/components/MagicLinkModal.vue): `src/components/MagicLinkModal.vue`
- [Avatar display](https://github.com/olvid-io/nextcloud-app/blob/main/src/components/OlvidAvatar.vue): `src/components/OlvidAvatar.vue`

### App management API

- [Management routes](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Controller/AppApiController.php): `lib/Controller/AppApiController.php`
- [User and group handlers](https://github.com/olvid-io/nextcloud-app/tree/main/lib/Api/App): `lib/Api/App`

### Client APIs

- [Directory routes](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Controller/DirectoryApiController.php): `lib/Controller/DirectoryApiController.php`
- [Directory handlers](https://github.com/olvid-io/nextcloud-app/tree/main/lib/Api/Directory): `lib/Api/Directory`
- [Engine handlers](https://github.com/olvid-io/nextcloud-app/tree/main/lib/Api/Engine): `lib/Api/Engine`
- [Binary API base](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Api/Engine/AbstractEngineApiHandler.php): `lib/Api/Engine/AbstractEngineApiHandler.php`

### Domain and persistence

- [Runtime context](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Utils/Context/OlvidContext.php): `lib/Utils/Context/OlvidContext.php`
- [Database context](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Utils/Context/OlvidContextDatabase.php): `lib/Utils/Context/OlvidContextDatabase.php`
- [Record mappers](https://github.com/olvid-io/nextcloud-app/tree/main/lib/Db): `lib/Db`
- [Group record](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Db/OlvidGroup.php): `lib/Db/OlvidGroup.php`
- [App configuration](https://github.com/olvid-io/nextcloud-app/blob/main/lib/Utils/OlvidAppConfigManager.php): `lib/Utils/OlvidAppConfigManager.php`

### Lifecycle and sync

- [App registration](https://github.com/olvid-io/nextcloud-app/blob/main/lib/AppInfo/Application.php): `lib/AppInfo/Application.php`
- [User and group events](https://github.com/olvid-io/nextcloud-app/tree/main/lib/Listener): `lib/Listener`
- [Sync tasks](https://github.com/olvid-io/nextcloud-app/tree/main/lib/Cron): `lib/Cron`

### Other components

- **Nextcloud admin**
- **Olvid client**
- **Olvid server**

## Connections

- Nextcloud admin → UI bootstrap: opens app (evidence: `src/main.js`)
- UI bootstrap → Admin shell: mounts (evidence: `src/main.js`)
- UI bootstrap → Page router: loads routes (evidence: `src/main.js`)
- Page router → Management views: routes to (evidence: `src/router.ts`)
- Admin shell → User detail panel: renders (evidence: `src/App.vue`)
- Admin shell → Group detail panel: renders (evidence: `src/App.vue`)
- User detail panel → Identity dialogs: renders (evidence: `src/components/UserDetailsSidebar.vue`)
- User detail panel → Magic link dialog: renders (evidence: `src/components/UserDetailsSidebar.vue`)
- User detail panel → Avatar display: renders (evidence: `src/components/UserDetailsSidebar.vue`)
- Group detail panel → Avatar display: renders (evidence: `src/components/GroupDetailsSidebar.vue`)
- Admin shell → Management routes: fetches status (evidence: `src/App.vue`)
- Management routes → User and group handlers: delegates to (evidence: `lib/Controller/AppApiController.php`)
- Management routes → Runtime context: uses context (evidence: `lib/Controller/AppApiController.php`)
- Directory routes → Directory handlers: dispatches to (evidence: `lib/Controller/DirectoryApiController.php`)
- Directory routes → Engine handlers: dispatches to (evidence: `lib/Controller/DirectoryApiController.php`)
- Olvid client → Directory routes: calls routes
- Engine handlers → Binary API base: extends base (evidence: `lib/Api/Engine/GetSession.php`)
- Binary API base → Runtime context: receives context (evidence: `lib/Api/Engine/AbstractEngineApiHandler.php`)
- Runtime context → Database context: exposes database (evidence: `lib/Utils/Context/OlvidContext.php`)
- Database context → Record mappers: holds mappers (evidence: `lib/Utils/Context/OlvidContextDatabase.php`)
- Group record → Runtime context: builds signed data (evidence: `lib/Db/OlvidGroup.php`)
- Directory routes → App configuration: uses config (evidence: `lib/Controller/DirectoryApiController.php`)
- App registration → User and group events: registers listeners (evidence: `lib/AppInfo/Application.php`)
- App registration → App configuration: registers settings (evidence: `lib/AppInfo/Application.php`)
- Sync tasks → Olvid server: synchronizes
