# chojs23/concord architecture

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

- Interactive diagram: https://gitdiagram.com/chojs23/concord
- Repository: https://github.com/chojs23/concord

## Overview

Concord is a Rust terminal client for Discord. The main workflow is terminal input, command dispatch, Discord requests/events, state updates, and dashboard rendering. Separate branches cover authentication, search and messaging, notifications, image/media handling, voice calls and screen broadcasting, and Rich Presence. The README documents these capabilities; sampled source confirms app startup, TUI entry, Discord client responsibilities, and media-preview behavior, but not every subsystem’s internal wiring.

Main entry points: [`src/discord/client.rs`](https://github.com/chojs23/concord/blob/main/src/discord/client.rs) (Discord client), [`src/app.rs`](https://github.com/chojs23/concord/blob/main/src/app.rs) (App lifecycle), [`src/app/command_loop.rs`](https://github.com/chojs23/concord/blob/main/src/app/command_loop.rs) (Command dispatch), [`src/tui/ui.rs`](https://github.com/chojs23/concord/blob/main/src/tui/ui.rs) (Terminal rendering)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Terminal interface"]
  node_tui["Dashboard runtime<br/>[mod.rs]"]
  node_input["Keyboard and pointer<br/>[input.rs]"]
  node_state["Dashboard state<br/>[state.rs]"]
  node_render["Terminal rendering<br/>[ui.rs]"]
  node_login["Login flow<br/>[login.rs]"]
  node_message_ui["Message presentation<br/>[mod.rs]"]
  node_media_preview["Image previews<br/>[preview.rs]"]
end

subgraph group_app["Application orchestration"]
  node_app_entry["App lifecycle<br/>[app.rs]"]
  node_command_loop["Command dispatch<br/>[command_loop.rs]"]
  node_command_dispatch["Command handlers"]
  node_config["Configuration<br/>[config.rs]"]
  node_search["Message search<br/>[search.rs]"]
  node_notifications["Notification inbox<br/>[inbox_commands.rs]"]
end

subgraph group_discord["Discord client"]
  node_client["Discord client<br/>[client.rs]"]
  node_gateway["Gateway events<br/>[gateway.rs]"]
  node_rest["REST operations<br/>[rest.rs]"]
  node_discord_state[("Discord state cache<br/>[state.rs]")]
  node_presence_rpc["Rich Presence RPC<br/>[mod.rs]"]
end

subgraph group_media["Voice and media"]
  node_voice["Voice runtime<br/>[runtime.rs]"]
  node_capture["Screen capture<br/>[capture.rs]"]
end

subgraph group_local["Local integrations"]
  node_token_store[("Credential storage<br/>[token_store.rs]")]
end

node_user(("User"))
node_terminal(("Terminal"))
node_rpc_apps(("RPC applications"))
node_media_player(("Media player"))
node_discord_service(("Discord service"))

node_user -->|"uses"| node_terminal
node_terminal -->|"starts"| node_app_entry
node_app_entry -->|"loads options"| node_config
node_app_entry -->|"creates"| node_client
node_app_entry -->|"starts dashboard"| node_tui
node_app_entry -->|"starts"| node_command_loop
node_tui -->|"handles input"| node_input
node_input -->|"updates"| node_state
node_state -->|"provides view"| node_render
node_render -->|"draws"| node_terminal
node_tui -->|"sends commands"| node_command_loop
node_command_loop -->|"dispatches"| node_command_dispatch
node_command_dispatch -->|"requests actions"| node_client
node_login -->|"authenticates"| node_discord_service
node_login -->|"stores token"| node_token_store
node_client -->|"connects"| node_gateway
node_client -->|"issues requests"| node_rest
node_gateway -->|"exchanges events"| node_discord_service
node_rest -->|"sends requests"| node_discord_service
node_gateway -->|"updates cache"| node_discord_state
node_rest -->|"updates cache"| node_discord_state
node_discord_state -->|"supplies snapshots"| node_state
node_search -->|"requests search"| node_command_loop
node_message_ui -->|"formats messages"| node_render
node_notifications -->|"requests inbox data"| node_command_loop
node_voice -->|"uses client"| node_client
node_voice -->|"captures stream"| node_capture
node_voice -.->|"plays audio"| node_media_player
node_media_preview -->|"renders previews"| node_render
node_presence_rpc -->|"serves RPC"| node_rpc_apps
node_presence_rpc -->|"updates activity"| node_client

click node_app_entry "https://github.com/chojs23/concord/blob/main/src/app.rs"
click node_command_loop "https://github.com/chojs23/concord/blob/main/src/app/command_loop.rs"
click node_command_dispatch "https://github.com/chojs23/concord/blob/main/src/app/command_dispatch.rs"
click node_config "https://github.com/chojs23/concord/blob/main/src/config.rs"
click node_tui "https://github.com/chojs23/concord/blob/main/src/tui/runtime/mod.rs"
click node_input "https://github.com/chojs23/concord/blob/main/src/tui/input.rs"
click node_state "https://github.com/chojs23/concord/blob/main/src/tui/state.rs"
click node_render "https://github.com/chojs23/concord/blob/main/src/tui/ui.rs"
click node_login "https://github.com/chojs23/concord/blob/main/src/tui/login.rs"
click node_client "https://github.com/chojs23/concord/blob/main/src/discord/client.rs"
click node_gateway "https://github.com/chojs23/concord/blob/main/src/discord/gateway.rs"
click node_rest "https://github.com/chojs23/concord/blob/main/src/discord/rest.rs"
click node_discord_state "https://github.com/chojs23/concord/blob/main/src/discord/state.rs"
click node_search "https://github.com/chojs23/concord/blob/main/src/tui/state/popups/search.rs"
click node_message_ui "https://github.com/chojs23/concord/blob/main/src/tui/message/mod.rs"
click node_notifications "https://github.com/chojs23/concord/blob/main/src/app/inbox_commands.rs"
click node_voice "https://github.com/chojs23/concord/blob/main/src/discord/voice/runtime.rs"
click node_capture "https://github.com/chojs23/concord/blob/main/src/discord/voice/capture.rs"
click node_media_preview "https://github.com/chojs23/concord/blob/main/src/tui/media/preview.rs"
click node_presence_rpc "https://github.com/chojs23/concord/blob/main/src/discord/rpc/mod.rs"
click node_token_store "https://github.com/chojs23/concord/blob/main/src/support/token_store.rs"

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_tui,node_input,node_state,node_render,node_login,node_message_ui,node_media_preview,node_user toneBlue
class node_app_entry,node_command_loop,node_command_dispatch,node_config,node_search,node_notifications toneAmber
class node_client,node_gateway,node_rest,node_discord_state,node_presence_rpc toneMint
class node_voice,node_capture toneRose
class node_token_store,node_terminal,node_rpc_apps,node_media_player,node_discord_service toneIndigo
```

## Components

### Terminal interface

- [Dashboard runtime](https://github.com/chojs23/concord/blob/main/src/tui/runtime/mod.rs): `src/tui/runtime/mod.rs`
- [Keyboard and pointer](https://github.com/chojs23/concord/blob/main/src/tui/input.rs): `src/tui/input.rs`
- [Dashboard state](https://github.com/chojs23/concord/blob/main/src/tui/state.rs): `src/tui/state.rs`
- [Terminal rendering](https://github.com/chojs23/concord/blob/main/src/tui/ui.rs): `src/tui/ui.rs`
- [Login flow](https://github.com/chojs23/concord/blob/main/src/tui/login.rs): `src/tui/login.rs`
- [Message presentation](https://github.com/chojs23/concord/blob/main/src/tui/message/mod.rs): `src/tui/message/mod.rs`
- [Image previews](https://github.com/chojs23/concord/blob/main/src/tui/media/preview.rs): `src/tui/media/preview.rs`

### Application orchestration

- [App lifecycle](https://github.com/chojs23/concord/blob/main/src/app.rs): `src/app.rs`
- [Command dispatch](https://github.com/chojs23/concord/blob/main/src/app/command_loop.rs): `src/app/command_loop.rs`
- [Command handlers](https://github.com/chojs23/concord/blob/main/src/app/command_dispatch.rs): `src/app/command_dispatch.rs`
- [Configuration](https://github.com/chojs23/concord/blob/main/src/config.rs): `src/config.rs`
- [Message search](https://github.com/chojs23/concord/blob/main/src/tui/state/popups/search.rs): `src/tui/state/popups/search.rs`
- [Notification inbox](https://github.com/chojs23/concord/blob/main/src/app/inbox_commands.rs): `src/app/inbox_commands.rs`

### Discord client

- [Discord client](https://github.com/chojs23/concord/blob/main/src/discord/client.rs): `src/discord/client.rs`
- [Gateway events](https://github.com/chojs23/concord/blob/main/src/discord/gateway.rs): `src/discord/gateway.rs`
- [REST operations](https://github.com/chojs23/concord/blob/main/src/discord/rest.rs): `src/discord/rest.rs`
- [Discord state cache](https://github.com/chojs23/concord/blob/main/src/discord/state.rs): `src/discord/state.rs`
- [Rich Presence RPC](https://github.com/chojs23/concord/blob/main/src/discord/rpc/mod.rs): `src/discord/rpc/mod.rs`

### Voice and media

- [Voice runtime](https://github.com/chojs23/concord/blob/main/src/discord/voice/runtime.rs): `src/discord/voice/runtime.rs`
- [Screen capture](https://github.com/chojs23/concord/blob/main/src/discord/voice/capture.rs): `src/discord/voice/capture.rs`

### Local integrations

- [Credential storage](https://github.com/chojs23/concord/blob/main/src/support/token_store.rs): `src/support/token_store.rs`

### Other components

- **User**
- **Terminal**
- **RPC applications**
- **Media player**
- **Discord service**

## Connections

- User → Terminal: uses
- Terminal → App lifecycle: starts
- App lifecycle → Configuration: loads options
- App lifecycle → Discord client: creates
- App lifecycle → Dashboard runtime: starts dashboard
- App lifecycle → Command dispatch: starts
- Dashboard runtime → Keyboard and pointer: handles input
- Keyboard and pointer → Dashboard state: updates
- Dashboard state → Terminal rendering: provides view
- Terminal rendering → Terminal: draws
- Dashboard runtime → Command dispatch: sends commands
- Command dispatch → Command handlers: dispatches
- Command handlers → Discord client: requests actions
- Login flow → Discord service: authenticates
- Login flow → Credential storage: stores token
- Discord client → Gateway events: connects
- Discord client → REST operations: issues requests
- Gateway events → Discord service: exchanges events
- REST operations → Discord service: sends requests
- Gateway events → Discord state cache: updates cache
- REST operations → Discord state cache: updates cache
- Discord state cache → Dashboard state: supplies snapshots
- Message search → Command dispatch: requests search
- Message presentation → Terminal rendering: formats messages
- Notification inbox → Command dispatch: requests inbox data
- Voice runtime → Discord client: uses client
- Voice runtime → Screen capture: captures stream
- Voice runtime → Media player: plays audio
- Image previews → Terminal rendering: renders previews
- Rich Presence RPC → RPC applications: serves RPC
- Rich Presence RPC → Discord client: updates activity
