# olvid-io/olvid-android architecture

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

## Overview

Olvid is an Android end-to-end encrypted messenger: users manage identities and contacts, exchange messages, and use group, calling, and account features. The README places cryptography, contact/group management, and network communication in a separate Kotlin engine; the app layer supplies messaging and Android integration. The graph includes major capabilities documented in the README and visible in the tree. Some feature links are omitted because their routing was not sampled; dashed links mark unverified relationships.

Main entry points: [`obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java`](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java) (Identity manager), [`obv_messenger/app/src/main/java/io/olvid/messenger/App.java`](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/App.java) (Android app), [`obv_messenger/app/src/main/java/io/olvid/messenger/discussion/DiscussionActivity.kt`](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/discussion/DiscussionActivity.kt) (Conversation screen), [`obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Message.java`](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Message.java) (Message operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app["Android app<br/>[App.java]"]
  node_identity["Identity manager<br/>[AppSingleton.java]"]
  node_notifications["Notifications"]
end

subgraph group_messaging["Messaging"]
  node_engine_events["Engine event handling"]
  node_discussion["Conversation screen"]
  node_message["Message operations<br/>[Message.java]"]
  node_contacts["Contact records<br/>[Contact.java]"]
  node_groups["Group features<br/>[Routes.kt]"]
end

subgraph group_state["Local state"]
  node_unread["Unread tracking"]
  node_database[("Encrypted app database<br/>[AppDatabase.kt]")]
  node_storage["Storage management"]
end

subgraph group_integrations["Integrations"]
  node_service["Foreground services"]
  node_webclient["Web client"]
  node_calls["WebRTC calls"]
  node_keycloak["Keycloak identity<br/>[KeycloakManager.kt]"]
  node_billing["Subscriptions"]
end

node_user(("Messenger user"))
node_engine{{"Crypto engine"}}

node_user -.->|"opens"| node_app
node_app -.->|"initializes"| node_identity
node_identity -->|"configures"| node_engine
node_user -.->|"opens"| node_discussion
node_discussion -.->|"uses"| node_message
node_message -->|"posts payload"| node_engine
node_engine_events -->|"processes events"| node_database
node_identity -->|"initializes"| node_unread
node_unread -->|"loads counts"| node_database
node_user -.->|"manages"| node_contacts
node_user -.->|"manages"| node_groups
node_service -->|"controls"| node_webclient
node_user -.->|"starts"| node_calls
node_user -.->|"explores"| node_storage
node_user -.->|"authenticates"| node_keycloak
node_user -.->|"subscribes"| node_billing

click node_app "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/App.java"
click node_identity "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java"
click node_engine_events "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/EngineNotificationProcessor.java"
click node_discussion "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/discussion/DiscussionActivity.kt"
click node_message "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Message.java"
click node_contacts "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Contact.java"
click node_groups "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/group/components/Routes.kt"
click node_notifications "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/notifications/AndroidNotificationManager.java"
click node_unread "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/UnreadCountsSingleton.kt"
click node_database "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/databases/AppDatabase.kt"
click node_storage "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/storage_manager/StorageManagerViewModel.kt"
click node_service "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/services/UnifiedForegroundService.java"
click node_webclient "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/webclient/WebClientManager.java"
click node_calls "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/webrtc/WebrtcCallService.kt"
click node_keycloak "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/openid/KeycloakManager.kt"
click node_billing "https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/full/java/io/olvid/messenger/billing/SubscriptionRepository.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_app,node_identity,node_notifications,node_user toneBlue
class node_engine_events,node_discussion,node_message,node_contacts,node_groups toneAmber
class node_unread,node_database,node_storage toneMint
class node_service,node_webclient,node_calls,node_keycloak,node_billing toneRose
class node_engine toneIndigo
```

## Components

### Application

- [Android app](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/App.java): `obv_messenger/app/src/main/java/io/olvid/messenger/App.java`
- [Identity manager](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java): `obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java`
- [Notifications](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/notifications/AndroidNotificationManager.java): `obv_messenger/app/src/main/java/io/olvid/messenger/notifications/AndroidNotificationManager.java`

### Messaging

- [Engine event handling](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/EngineNotificationProcessor.java): `obv_messenger/app/src/main/java/io/olvid/messenger/EngineNotificationProcessor.java`
- [Conversation screen](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/discussion/DiscussionActivity.kt): `obv_messenger/app/src/main/java/io/olvid/messenger/discussion/DiscussionActivity.kt`
- [Message operations](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Message.java): `obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Message.java`
- [Contact records](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Contact.java): `obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Contact.java`
- [Group features](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/group/components/Routes.kt): `obv_messenger/app/src/main/java/io/olvid/messenger/group/components/Routes.kt`

### Local state

- [Unread tracking](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/UnreadCountsSingleton.kt): `obv_messenger/app/src/main/java/io/olvid/messenger/UnreadCountsSingleton.kt`
- [Encrypted app database](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/databases/AppDatabase.kt): `obv_messenger/app/src/main/java/io/olvid/messenger/databases/AppDatabase.kt`
- [Storage management](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/storage_manager/StorageManagerViewModel.kt): `obv_messenger/app/src/main/java/io/olvid/messenger/storage_manager/StorageManagerViewModel.kt`

### Integrations

- [Foreground services](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/services/UnifiedForegroundService.java): `obv_messenger/app/src/main/java/io/olvid/messenger/services/UnifiedForegroundService.java`
- [Web client](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/webclient/WebClientManager.java): `obv_messenger/app/src/main/java/io/olvid/messenger/webclient/WebClientManager.java`
- [WebRTC calls](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/webrtc/WebrtcCallService.kt): `obv_messenger/app/src/main/java/io/olvid/messenger/webrtc/WebrtcCallService.kt`
- [Keycloak identity](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/main/java/io/olvid/messenger/openid/KeycloakManager.kt): `obv_messenger/app/src/main/java/io/olvid/messenger/openid/KeycloakManager.kt`
- [Subscriptions](https://github.com/olvid-io/olvid-android/blob/main/obv_messenger/app/src/full/java/io/olvid/messenger/billing/SubscriptionRepository.kt): `obv_messenger/app/src/full/java/io/olvid/messenger/billing/SubscriptionRepository.kt`

### Other components

- **Messenger user**
- **Crypto engine**

## Connections

- Messenger user → Android app: opens
- Android app → Identity manager: initializes (evidence: `obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java`)
- Identity manager → Crypto engine: configures (evidence: `obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java`)
- Messenger user → Conversation screen: opens
- Conversation screen → Message operations: uses
- Message operations → Crypto engine: posts payload (evidence: `obv_messenger/app/src/main/java/io/olvid/messenger/databases/entity/Message.java`)
- Engine event handling → Encrypted app database: processes events (evidence: `obv_messenger/app/src/main/java/io/olvid/messenger/EngineNotificationProcessor.java`)
- Identity manager → Unread tracking: initializes (evidence: `obv_messenger/app/src/main/java/io/olvid/messenger/AppSingleton.java`)
- Unread tracking → Encrypted app database: loads counts (evidence: `obv_messenger/app/src/main/java/io/olvid/messenger/UnreadCountsSingleton.kt`)
- Messenger user → Contact records: manages
- Messenger user → Group features: manages
- Foreground services → Web client: controls (evidence: `obv_messenger/app/src/main/java/io/olvid/messenger/services/UnifiedForegroundService.java`)
- Messenger user → WebRTC calls: starts
- Messenger user → Storage management: explores
- Messenger user → Keycloak identity: authenticates
- Messenger user → Subscriptions: subscribes
