# beldex-coin/bchat-android architecture

> Architecture diagram of the GitHub repository beldex-coin/bchat-android, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/beldex-coin/bchat-android
- Repository: https://github.com/beldex-coin/bchat-android

## Overview

BChat is an Android decentralized messaging app on the Beldex network. Its main user workflow is composing a conversation message, scheduling send work, and transferring message or attachment data through the messaging/network layers; persistence supports that flow. The tree and excerpts also show distinct social-group, contact, backup, and WebRTC calling capabilities. Several central messaging modules are named in the SOURCE INDEX but were not excerpted, so their uncertain runtime connections are omitted; the graph includes those documented modules without asserting unshown calls.

Main entry points: [`app/src/main/java/io/beldex/bchat/database/Storage.kt`](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/Storage.kt) (App storage), [`app/src/main/java/io/beldex/bchat/webrtc/CallManager.kt`](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/webrtc/CallManager.kt) (Call manager), [`libsession/src/main/java/com/beldex/libbchat/database/StorageProtocol.kt`](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/database/StorageProtocol.kt) (Storage protocol), [`app/src/main/java/io/beldex/bchat/ApplicationContext.kt`](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/ApplicationContext.kt) (Application context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Android client"]
  node_app_context["Application context"]
  node_conversation["Conversation UI"]
end

subgraph group_messaging["Messaging"]
  node_message_sender["Message sender<br/>[MessageSender.kt]"]
  node_send_job["Message send job<br/>[MessageSendJob.kt]"]
  node_attachment_job["Attachment upload job"]
  node_message["Message model<br/>[Message.kt]"]
  node_visible_message["Visible message<br/>[VisibleMessage.kt]"]
  node_mnode["Beldex node API<br/>[MnodeAPI.kt]"]
end

subgraph group_data["Data and groups"]
  node_storage_protocol["Storage protocol<br/>[StorageProtocol.kt]"]
  node_storage_impl["App storage<br/>[Storage.kt]"]
  node_message_db[("Message database")]
  node_thread_db[("Thread database")]
  node_contacts[("Contact management")]
  node_groups["Open groups"]
  node_backup_export["Backup export"]
  node_backup_import["Backup import"]
end

subgraph group_calling["Calling"]
  node_call_service["Call service"]
  node_call_manager["Call manager<br/>[CallManager.kt]"]
  node_call_activity["WebRTC call screen"]
end

node_user(("BChat user"))

node_user -->|"composes in"| node_conversation
node_app_context -->|"injects"| node_storage_impl
node_storage_impl -->|"implements"| node_storage_protocol
node_storage_impl -->|"updates"| node_thread_db
node_storage_impl -->|"delegates group add"| node_groups
node_call_service -->|"routes call events"| node_call_manager
node_call_manager -->|"imports"| node_storage_protocol
node_attachment_job -->|"uses message data"| node_message

click node_app_context "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/ApplicationContext.kt"
click node_conversation "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/conversation/v2/ConversationActivityV2.kt"
click node_message_sender "https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/sending_receiving/MessageSender.kt"
click node_send_job "https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/jobs/MessageSendJob.kt"
click node_attachment_job "https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/jobs/AttachmentUploadJob.kt"
click node_message "https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/messages/Message.kt"
click node_visible_message "https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/messages/visible/VisibleMessage.kt"
click node_mnode "https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/mnode/MnodeAPI.kt"
click node_storage_protocol "https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/database/StorageProtocol.kt"
click node_storage_impl "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/Storage.kt"
click node_message_db "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/BeldexMessageDatabase.kt"
click node_thread_db "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/BeldexThreadDatabase.kt"
click node_contacts "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/BchatContactDatabase.kt"
click node_groups "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/groups/OpenGroupManager.kt"
click node_backup_export "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/backup/FullBackupExporter.kt"
click node_backup_import "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/backup/FullBackupImporter.kt"
click node_call_service "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/service/WebRtcCallService.kt"
click node_call_manager "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/webrtc/CallManager.kt"
click node_call_activity "https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/calls/WebRtcCallActivity.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_context,node_conversation,node_user toneBlue
class node_message_sender,node_send_job,node_attachment_job,node_message,node_visible_message,node_mnode toneAmber
class node_storage_protocol,node_storage_impl,node_message_db,node_thread_db,node_contacts,node_groups,node_backup_export,node_backup_import toneMint
class node_call_service,node_call_manager,node_call_activity toneRose
```

## Components

### Android client

- [Application context](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/ApplicationContext.kt): `app/src/main/java/io/beldex/bchat/ApplicationContext.kt`
- [Conversation UI](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/conversation/v2/ConversationActivityV2.kt): `app/src/main/java/io/beldex/bchat/conversation/v2/ConversationActivityV2.kt`

### Messaging

- [Message sender](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/sending_receiving/MessageSender.kt): `libsession/src/main/java/com/beldex/libbchat/messaging/sending_receiving/MessageSender.kt`
- [Message send job](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/jobs/MessageSendJob.kt): `libsession/src/main/java/com/beldex/libbchat/messaging/jobs/MessageSendJob.kt`
- [Attachment upload job](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/jobs/AttachmentUploadJob.kt): `libsession/src/main/java/com/beldex/libbchat/messaging/jobs/AttachmentUploadJob.kt`
- [Message model](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/messages/Message.kt): `libsession/src/main/java/com/beldex/libbchat/messaging/messages/Message.kt`
- [Visible message](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/messaging/messages/visible/VisibleMessage.kt): `libsession/src/main/java/com/beldex/libbchat/messaging/messages/visible/VisibleMessage.kt`
- [Beldex node API](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/mnode/MnodeAPI.kt): `libsession/src/main/java/com/beldex/libbchat/mnode/MnodeAPI.kt`

### Data and groups

- [Storage protocol](https://github.com/beldex-coin/bchat-android/blob/master/libsession/src/main/java/com/beldex/libbchat/database/StorageProtocol.kt): `libsession/src/main/java/com/beldex/libbchat/database/StorageProtocol.kt`
- [App storage](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/Storage.kt): `app/src/main/java/io/beldex/bchat/database/Storage.kt`
- [Message database](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/BeldexMessageDatabase.kt): `app/src/main/java/io/beldex/bchat/database/BeldexMessageDatabase.kt`
- [Thread database](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/BeldexThreadDatabase.kt): `app/src/main/java/io/beldex/bchat/database/BeldexThreadDatabase.kt`
- [Contact management](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/database/BchatContactDatabase.kt): `app/src/main/java/io/beldex/bchat/database/BchatContactDatabase.kt`
- [Open groups](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/groups/OpenGroupManager.kt): `app/src/main/java/io/beldex/bchat/groups/OpenGroupManager.kt`
- [Backup export](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/backup/FullBackupExporter.kt): `app/src/main/java/io/beldex/bchat/backup/FullBackupExporter.kt`
- [Backup import](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/backup/FullBackupImporter.kt): `app/src/main/java/io/beldex/bchat/backup/FullBackupImporter.kt`

### Calling

- [Call service](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/service/WebRtcCallService.kt): `app/src/main/java/io/beldex/bchat/service/WebRtcCallService.kt`
- [Call manager](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/webrtc/CallManager.kt): `app/src/main/java/io/beldex/bchat/webrtc/CallManager.kt`
- [WebRTC call screen](https://github.com/beldex-coin/bchat-android/blob/master/app/src/main/java/io/beldex/bchat/calls/WebRtcCallActivity.kt): `app/src/main/java/io/beldex/bchat/calls/WebRtcCallActivity.kt`

### Other components

- **BChat user**

## Connections

- BChat user → Conversation UI: composes in (evidence: `README.md`)
- Application context → App storage: injects (evidence: `app/src/main/java/io/beldex/bchat/ApplicationContext.kt`)
- App storage → Storage protocol: implements (evidence: `app/src/main/java/io/beldex/bchat/database/Storage.kt`)
- App storage → Thread database: updates (evidence: `app/src/main/java/io/beldex/bchat/database/Storage.kt`)
- App storage → Open groups: delegates group add (evidence: `app/src/main/java/io/beldex/bchat/database/Storage.kt`)
- Call service → Call manager: routes call events (evidence: `app/src/main/java/io/beldex/bchat/service/WebRtcCallService.kt`)
- Call manager → Storage protocol: imports (evidence: `app/src/main/java/io/beldex/bchat/webrtc/CallManager.kt`)
- Attachment upload job → Message model: uses message data (evidence: `libsession/src/main/java/com/beldex/libbchat/messaging/jobs/AttachmentUploadJob.kt`)
