# olvid-io/olvid-kotlin-engine architecture

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

## Overview

Olvid Kotlin Engine is a library powering Olvid’s end-to-end encrypted messaging clients, not a standalone application. A client invokes the engine API to manage identities and groups, exchange messages through protocol/channel and network layers, and use cryptographic services; backup and synchronization are additional capabilities. The README documents these major responsibilities, while the source index confirms Engine’s references to backup and channel managers. Several subsystem internals were not sampled, so links beyond those references are documented at the capability level rather than asserted as specific calls.

Main entry points: [`src/main/java/io/olvid/engine/engine/Engine.kt`](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/engine/Engine.kt) (Engine API), [`src/main/java/io/olvid/engine/identity/IdentityManager.kt`](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/identity/IdentityManager.kt) (Identity manager), [`src/main/java/io/olvid/engine/protocol/ProtocolManager.kt`](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/protocol/ProtocolManager.kt) (Protocol manager), [`src/main/java/io/olvid/engine/networkfetch/FetchManager.kt`](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/networkfetch/FetchManager.kt) (Network fetch)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Engine API"]
  node_engine["Engine API<br/>[Engine.kt]"]
  node_session[("Database session<br/>[Session.kt]")]
  node_notifications["Engine notifications"]
end

subgraph group_identity["Identity and groups"]
  node_identity_mgr["Identity manager<br/>[IdentityManager.kt]"]
  node_identity_data[("Identity records")]
end

subgraph group_messaging["Messaging and network"]
  node_protocols["Protocol manager<br/>[ProtocolManager.kt]"]
  node_channels["Channel manager<br/>[ChannelManager.kt]"]
  node_fetch["Network fetch<br/>[FetchManager.kt]"]
  node_send["Network send<br/>[SendManager.kt]"]
end

subgraph group_security["Security foundations"]
  node_crypto["Cryptographic suite<br/>[Suite.kt]"]
  node_random["Random service<br/>[PRNGService.kt]"]
  node_encoding["Binary encoding<br/>[Encoded.kt]"]
end

subgraph group_backup["Backup and sync"]
  node_backups["Backup manager<br/>[BackupManager.kt]"]
  node_sync["Sync snapshots"]
end

node_client(("Client application"))
node_server{{"Olvid server"}}

node_client -->|"calls API"| node_engine
node_engine -.->|"manages identities"| node_identity_mgr
node_identity_mgr -.->|"persists identity data"| node_identity_data
node_engine -.->|"handles protocols"| node_protocols
node_protocols -.->|"uses channels"| node_channels
node_engine -->|"configures"| node_channels
node_engine -->|"configures"| node_backups
node_engine -.->|"communicates with server"| node_fetch
node_engine -.->|"communicates with server"| node_send
node_fetch -.->|"fetches data"| node_server
node_send -.->|"sends data"| node_server
node_engine -.->|"provides cryptography"| node_crypto
node_crypto -.->|"uses randomness"| node_random
node_engine -.->|"encodes data"| node_encoding
node_engine -.->|"uses database sessions"| node_session
node_backups -.->|"uses snapshots"| node_sync
node_engine -.->|"publishes results"| node_notifications

click node_engine "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/engine/Engine.kt"
click node_identity_mgr "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/identity/IdentityManager.kt"
click node_identity_data "https://github.com/olvid-io/olvid-kotlin-engine/tree/main/src/main/java/io/olvid/engine/identity/databases"
click node_protocols "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/protocol/ProtocolManager.kt"
click node_channels "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/channel/ChannelManager.kt"
click node_fetch "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/networkfetch/FetchManager.kt"
click node_send "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/networksend/SendManager.kt"
click node_crypto "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/crypto/Suite.kt"
click node_random "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/crypto/PRNGService.kt"
click node_encoding "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/encoder/Encoded.kt"
click node_session "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/datatypes/Session.kt"
click node_backups "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/backup/BackupManager.kt"
click node_sync "https://github.com/olvid-io/olvid-kotlin-engine/tree/main/src/main/java/io/olvid/engine/engine/types/sync"
click node_notifications "https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/engine/types/EngineNotifications.kt"

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_engine,node_session,node_notifications,node_client toneBlue
class node_identity_mgr,node_identity_data toneAmber
class node_protocols,node_channels,node_fetch,node_send,node_server toneMint
class node_crypto,node_random,node_encoding toneRose
class node_backups,node_sync toneIndigo
```

## Components

### Engine API

- [Engine API](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/engine/Engine.kt): `src/main/java/io/olvid/engine/engine/Engine.kt`
- [Database session](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/datatypes/Session.kt): `src/main/java/io/olvid/engine/datatypes/Session.kt`
- [Engine notifications](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/engine/types/EngineNotifications.kt): `src/main/java/io/olvid/engine/engine/types/EngineNotifications.kt`

### Identity and groups

- [Identity manager](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/identity/IdentityManager.kt): `src/main/java/io/olvid/engine/identity/IdentityManager.kt`
- [Identity records](https://github.com/olvid-io/olvid-kotlin-engine/tree/main/src/main/java/io/olvid/engine/identity/databases): `src/main/java/io/olvid/engine/identity/databases`

### Messaging and network

- [Protocol manager](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/protocol/ProtocolManager.kt): `src/main/java/io/olvid/engine/protocol/ProtocolManager.kt`
- [Channel manager](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/channel/ChannelManager.kt): `src/main/java/io/olvid/engine/channel/ChannelManager.kt`
- [Network fetch](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/networkfetch/FetchManager.kt): `src/main/java/io/olvid/engine/networkfetch/FetchManager.kt`
- [Network send](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/networksend/SendManager.kt): `src/main/java/io/olvid/engine/networksend/SendManager.kt`

### Security foundations

- [Cryptographic suite](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/crypto/Suite.kt): `src/main/java/io/olvid/engine/crypto/Suite.kt`
- [Random service](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/crypto/PRNGService.kt): `src/main/java/io/olvid/engine/crypto/PRNGService.kt`
- [Binary encoding](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/encoder/Encoded.kt): `src/main/java/io/olvid/engine/encoder/Encoded.kt`

### Backup and sync

- [Backup manager](https://github.com/olvid-io/olvid-kotlin-engine/blob/main/src/main/java/io/olvid/engine/backup/BackupManager.kt): `src/main/java/io/olvid/engine/backup/BackupManager.kt`
- [Sync snapshots](https://github.com/olvid-io/olvid-kotlin-engine/tree/main/src/main/java/io/olvid/engine/engine/types/sync): `src/main/java/io/olvid/engine/engine/types/sync`

### Other components

- **Client application**
- **Olvid server**

## Connections

- Client application → Engine API: calls API (evidence: `README.md`)
- Engine API → Identity manager: manages identities
- Identity manager → Identity records: persists identity data
- Engine API → Protocol manager: handles protocols (evidence: `README.md`)
- Protocol manager → Channel manager: uses channels
- Engine API → Channel manager: configures (evidence: `src/main/java/io/olvid/engine/engine/Engine.kt`)
- Engine API → Backup manager: configures (evidence: `src/main/java/io/olvid/engine/engine/Engine.kt`)
- Engine API → Network fetch: communicates with server (evidence: `README.md`)
- Engine API → Network send: communicates with server (evidence: `README.md`)
- Network fetch → Olvid server: fetches data (evidence: `README.md`)
- Network send → Olvid server: sends data (evidence: `README.md`)
- Engine API → Cryptographic suite: provides cryptography (evidence: `README.md`)
- Cryptographic suite → Random service: uses randomness (evidence: `src/main/java/io/olvid/engine/crypto/Suite.kt`)
- Engine API → Binary encoding: encodes data (evidence: `src/main/java/io/olvid/engine/engine/Engine.kt`)
- Engine API → Database session: uses database sessions (evidence: `src/main/java/io/olvid/engine/engine/Engine.kt`)
- Backup manager → Sync snapshots: uses snapshots (evidence: `src/main/java/io/olvid/engine/backup/BackupManager.kt`)
- Engine API → Engine notifications: publishes results (evidence: `src/main/java/io/olvid/engine/engine/Engine.kt`)
