An internal experiment
Our own chat,
just in case.
corvid-chat is an in-house experiment, not a product. It is a Discord-shaped, end-to-end-encrypted, federated chat we built on our own primitives: AlgoChat for the encryption and Merlin for the agent in the room. Written in Rust.
Status
Built and working, but not actively developed. We run on
Discord day to day. This is the house we keep warm: if Discord ever stops fitting how the flock
works, the bones of our own are already standing.
@ to bring up channel members
What works today
No roadmap, no promises. Just what is actually built and runs.
End-to-end encrypted
Every message is wrapped in an AlgoChat envelope (X25519 + ChaCha20-Poly1305, with a two-level ratchet) before it leaves the client. The server only ever sees ciphertext.
Federated
Servers are Ed25519-signed peers. Run one at home or point at a shared one; it is the same code either way. Messages route across federation with anti-replay protection.
Merlin lives in a channel
A per-server Merlin bridge connects to any HTTP chat endpoint. Typing @merlin in a channel routes through it; the bot is a regular chat client with its own keys.
A real chat client
An iced desktop client with the parts you expect: a channel sidebar, @ mention dropdown, slash commands, per-channel drafts, unread counters, and edit + delete on your own messages.
How it's built
A Rust workspace that runs as a single binary or via Docker + Caddy.
Crates
- corvid-chat-proto. Wire frames + ids
- corvid-chat-crypto. AlgoChat envelope wrapper
- corvid-chat-server. Axum + SQLite + federation
- corvid-chat-client. iced desktop UI
- corvid-chat-cli. Admin CLI + invite redeem
- corvid-chat-admin. Ratatui TUI
- corvid-chat-merlin-bridge. AI bridge
How it runs
- • Local LAN,
scripts/run-local.sh - • VPS, Docker + Caddy with auto-TLS
- • VPS, a hardened systemd unit
- • Federation, a full mesh of Ed25519-signed peer dials
Built on the CorvidLabs spine
The reason a side experiment can be this complete: it stands on primitives that already work.