How boson-chat/boson works
Boson is a desktop IRC chat application with a Preact renderer, an in-process Go IRC engine, and a companion HTTP API for accounts, directory, sessions, presence, and related services. The main user flow is sign-in or guest entry, server discovery or manual setup, IRC connection and chat, with local history and account-linked features. The monorepo also includes a standalone marketing website and shared design system. Several subsystem paths are documented but unsampled; their internal connections are therefore not expanded.
Main entry points: server.go HTTP API · app.tsx App shell · DirectoryScreen.tsx Server directory · engine.client.ts Engine client
Components 27
Chat client
- App shell
client/src/renderer/src/app.tsx - Authentication
client/src/renderer/src/modules/auth/auth.service.ts - Encrypted identity
client/src/renderer/src/modules/identity/identity.service.ts - Secure storage
client/src/renderer/src/shared/secure-storage.ts - Server directory
client/src/renderer/src/screens/DirectoryScreen/DirectoryScreen.tsx - Directory API client
client/src/renderer/src/modules/directory/directory.service.ts - Chat operations
client/src/renderer/src/modules/chat/chat.service.ts - Chat history
client/src/renderer/src/modules/history/idb-chat-history.store.ts - Inbox memos
client/src/renderer/src/modules/memos/memo.store.ts - Engine client
client/src/renderer/src/modules/engine/engine.client.ts
IRC runtime
- Desktop shell
desktop/engine.go - OS secure store
desktop/securestore.go - Engine IPC
engine/ipc/server.go - IRC connections
engine/irc/client.go
Account services
- HTTP API
backend/http/server.go - User service
backend/internal/services/user/repository.go - Directory service
backend/internal/services/server/service.go - Session service
backend/internal/services/session/service.go - Presence service
backend/internal/services/presence/service.go - Nick claims
backend/internal/services/nickclaim/pop3_worker.go - Postgres
backend/internal/db/db.go
Public website
- Marketing site
website/src/app.tsx - Public pages
website/src/pages/FeaturesPage.tsx - Release lookup
website/src/hooks/useLatestRelease.ts
Other components
- User
- Supabase Auth
- GitHub releases
Connections 28
- User → App shell: uses
README.md - App shell → Authentication: initializes
client/src/renderer/src/app.tsx - Authentication → Supabase Auth: authenticates
client/src/renderer/src/modules/auth/auth.service.ts - App shell → Server directory: renders
client/src/renderer/src/app.tsx - Server directory → Directory API client: uses
- Directory API client → HTTP API: requests
- App shell → Encrypted identity: restores identity
client/src/renderer/src/app.tsx - Encrypted identity → Secure storage: persists secrets
- User → Server directory: selects server
README.md - Server directory → Chat operations: starts chat
- Chat operations → Engine client: commands
- Engine client → Desktop shell: sends frames
desktop/engine.go - Desktop shell → Engine IPC: serves session
desktop/engine.go - Engine client → IRC connections: controls via IPC
- Engine IPC → IRC connections: dispatches commands
engine/ipc/server.go - IRC connections → Engine client: streams events
- Chat operations → Chat history: stores history
- App shell → Inbox memos: reads memos
client/src/renderer/src/app.tsx - HTTP API → User service: routes requests
backend/http/server.go - HTTP API → Directory service: routes requests
backend/http/server.go - HTTP API → Session service: routes requests
backend/http/server.go - HTTP API → Presence service: routes requests
backend/http/server.go - HTTP API → Nick claims: starts worker
backend/http/server.go - User service → Postgres: reads and writes
- Directory service → Postgres: reads and writes
- Marketing site → Public pages: routes pages
website/src/app.tsx - Public pages → Release lookup: reads release
- Release lookup → GitHub releases: fetches release
website/src/hooks/useLatestRelease.ts