# yengas/rust-chat-server architecture

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

- Interactive diagram: https://gitdiagram.com/yengas/rust-chat-server
- Repository: https://github.com/yengas/rust-chat-server

## Overview

This workspace is an educational, room-based chat application: a terminal user connects to the server, joins a room, and exchanges messages. The TUI routes input into a Redux-inspired state store, which manages the TCP client connection and commands; server sessions dispatch room operations and relay room events back to clients. The graph also captures the shared communications protocol and the server’s room/session layers. Some page, room, and event implementations were not sampled, so their wiring is shown only where the README or sampled callers support it.

Main entry points: [`tui/src/state_store/state_store.rs`](https://github.com/yengas/rust-chat-server/blob/main/tui/src/state_store/state_store.rs) (State store), [`server/src/session/chat_session.rs`](https://github.com/yengas/rust-chat-server/blob/main/server/src/session/chat_session.rs) (Chat session), [`comms/src/transport/client.rs`](https://github.com/yengas/rust-chat-server/blob/main/comms/src/transport/client.rs) (TCP client transport), [`tui/src/ui_management/pages/mod.rs`](https://github.com/yengas/rust-chat-server/blob/main/tui/src/ui_management/pages/mod.rs) (Page router)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Terminal client"]
  node_tui_main["TUI runtime<br/>[main.rs]"]
  node_ui_manager["UI manager<br/>[ui_manager.rs]"]
  node_router["Page router<br/>[mod.rs]"]
  node_connect_page["Connect page"]
  node_chat_page["Chat page"]
  node_actions["UI actions<br/>[action.rs]"]
  node_state_store["State store<br/>[state_store.rs]"]
  node_client_state["Client state<br/>[state.rs]"]
end

subgraph group_server["Chat server"]
  node_server_main["Server runtime<br/>[main.rs]"]
  node_session["Chat session<br/>[chat_session.rs]"]
  node_room_manager["Room manager<br/>[room_manager.rs]"]
  node_room["Chat rooms"]
  node_session_handle["Room session handle"]
end

subgraph group_protocol["Shared communications"]
  node_client_transport["TCP client transport<br/>[client.rs]"]
  node_commands["User commands<br/>[command.rs]"]
  node_events["Chat events<br/>[event.rs]"]
  node_server_transport["TCP server transport<br/>[server.rs]"]
end

node_user(("Chat user"))
node_network(("TCP connection"))

node_user -->|"enters address"| node_connect_page
node_user -->|"uses chat"| node_chat_page
node_tui_main -->|"starts loop"| node_state_store
node_tui_main -->|"starts loop"| node_ui_manager
node_ui_manager -->|"renders and routes"| node_router
node_router -->|"selects page"| node_connect_page
node_router -->|"selects page"| node_chat_page
node_connect_page -->|"dispatches"| node_actions
node_chat_page -->|"dispatches"| node_actions
node_actions -->|"consumed by"| node_state_store
node_state_store -->|"updates"| node_client_state
node_state_store -->|"publishes state"| node_ui_manager
node_state_store -->|"connects and exchanges"| node_client_transport
node_client_transport -->|"serializes and reads"| node_commands
node_client_transport -->|"reads and deserializes"| node_events
node_client_transport -->|"uses TCP"| node_network
node_network -->|"connects to listener"| node_server_main
node_server_main -->|"spawns per connection"| node_session
node_session -->|"handles TCP stream"| node_server_transport
node_server_transport -->|"reads commands"| node_commands
node_server_transport -->|"writes events"| node_events
node_session -->|"joins and leaves"| node_room_manager
node_room_manager -->|"manages membership"| node_room
node_session -->|"sends room messages"| node_session_handle
node_session_handle -->|"broadcasts message"| node_events

click node_tui_main "https://github.com/yengas/rust-chat-server/blob/main/tui/src/main.rs"
click node_ui_manager "https://github.com/yengas/rust-chat-server/blob/main/tui/src/ui_management/ui_manager.rs"
click node_router "https://github.com/yengas/rust-chat-server/blob/main/tui/src/ui_management/pages/mod.rs"
click node_connect_page "https://github.com/yengas/rust-chat-server/tree/main/tui/src/ui_management/pages/connect_page"
click node_chat_page "https://github.com/yengas/rust-chat-server/tree/main/tui/src/ui_management/pages/chat_page"
click node_actions "https://github.com/yengas/rust-chat-server/blob/main/tui/src/state_store/action.rs"
click node_state_store "https://github.com/yengas/rust-chat-server/blob/main/tui/src/state_store/state_store.rs"
click node_client_state "https://github.com/yengas/rust-chat-server/blob/main/tui/src/state_store/state.rs"
click node_client_transport "https://github.com/yengas/rust-chat-server/blob/main/comms/src/transport/client.rs"
click node_commands "https://github.com/yengas/rust-chat-server/blob/main/comms/src/command.rs"
click node_events "https://github.com/yengas/rust-chat-server/blob/main/comms/src/event.rs"
click node_server_transport "https://github.com/yengas/rust-chat-server/blob/main/comms/src/transport/server.rs"
click node_server_main "https://github.com/yengas/rust-chat-server/blob/main/server/src/main.rs"
click node_session "https://github.com/yengas/rust-chat-server/blob/main/server/src/session/chat_session.rs"
click node_room_manager "https://github.com/yengas/rust-chat-server/blob/main/server/src/room_manager/room_manager.rs"
click node_room "https://github.com/yengas/rust-chat-server/tree/main/server/src/room_manager/room"
click node_session_handle "https://github.com/yengas/rust-chat-server/blob/main/server/src/room_manager/room/user_session_handle.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_main,node_ui_manager,node_router,node_connect_page,node_chat_page,node_actions,node_state_store,node_client_state,node_user toneBlue
class node_server_main,node_session,node_room_manager,node_room,node_session_handle toneAmber
class node_client_transport,node_commands,node_events,node_server_transport toneMint
class node_network toneIndigo
```

## Components

### Terminal client

- [TUI runtime](https://github.com/yengas/rust-chat-server/blob/main/tui/src/main.rs): `tui/src/main.rs`
- [UI manager](https://github.com/yengas/rust-chat-server/blob/main/tui/src/ui_management/ui_manager.rs): `tui/src/ui_management/ui_manager.rs`
- [Page router](https://github.com/yengas/rust-chat-server/blob/main/tui/src/ui_management/pages/mod.rs): `tui/src/ui_management/pages/mod.rs`
- [Connect page](https://github.com/yengas/rust-chat-server/tree/main/tui/src/ui_management/pages/connect_page): `tui/src/ui_management/pages/connect_page`
- [Chat page](https://github.com/yengas/rust-chat-server/tree/main/tui/src/ui_management/pages/chat_page): `tui/src/ui_management/pages/chat_page`
- [UI actions](https://github.com/yengas/rust-chat-server/blob/main/tui/src/state_store/action.rs): `tui/src/state_store/action.rs`
- [State store](https://github.com/yengas/rust-chat-server/blob/main/tui/src/state_store/state_store.rs): `tui/src/state_store/state_store.rs`
- [Client state](https://github.com/yengas/rust-chat-server/blob/main/tui/src/state_store/state.rs): `tui/src/state_store/state.rs`

### Chat server

- [Server runtime](https://github.com/yengas/rust-chat-server/blob/main/server/src/main.rs): `server/src/main.rs`
- [Chat session](https://github.com/yengas/rust-chat-server/blob/main/server/src/session/chat_session.rs): `server/src/session/chat_session.rs`
- [Room manager](https://github.com/yengas/rust-chat-server/blob/main/server/src/room_manager/room_manager.rs): `server/src/room_manager/room_manager.rs`
- [Chat rooms](https://github.com/yengas/rust-chat-server/tree/main/server/src/room_manager/room): `server/src/room_manager/room`
- [Room session handle](https://github.com/yengas/rust-chat-server/blob/main/server/src/room_manager/room/user_session_handle.rs): `server/src/room_manager/room/user_session_handle.rs`

### Shared communications

- [TCP client transport](https://github.com/yengas/rust-chat-server/blob/main/comms/src/transport/client.rs): `comms/src/transport/client.rs`
- [User commands](https://github.com/yengas/rust-chat-server/blob/main/comms/src/command.rs): `comms/src/command.rs`
- [Chat events](https://github.com/yengas/rust-chat-server/blob/main/comms/src/event.rs): `comms/src/event.rs`
- [TCP server transport](https://github.com/yengas/rust-chat-server/blob/main/comms/src/transport/server.rs): `comms/src/transport/server.rs`

### Other components

- **Chat user**
- **TCP connection**

## Connections

- Chat user → Connect page: enters address
- Chat user → Chat page: uses chat
- TUI runtime → State store: starts loop
- TUI runtime → UI manager: starts loop
- UI manager → Page router: renders and routes
- Page router → Connect page: selects page
- Page router → Chat page: selects page
- Connect page → UI actions: dispatches
- Chat page → UI actions: dispatches
- UI actions → State store: consumed by
- State store → Client state: updates
- State store → UI manager: publishes state
- State store → TCP client transport: connects and exchanges
- TCP client transport → User commands: serializes and reads
- TCP client transport → Chat events: reads and deserializes
- TCP client transport → TCP connection: uses TCP
- TCP connection → Server runtime: connects to listener
- Server runtime → Chat session: spawns per connection
- Chat session → TCP server transport: handles TCP stream
- TCP server transport → User commands: reads commands
- TCP server transport → Chat events: writes events
- Chat session → Room manager: joins and leaves
- Room manager → Chat rooms: manages membership
- Chat session → Room session handle: sends room messages
- Room session handle → Chat events: broadcasts message
