Chatter: a shared Rust client for private conversations
A messenger for everyday conversations, with encrypted private chats, voice calls and optional Shield metadata protection through Tor onion routing and anonymous mailboxes. Rust and Slint share the application core and interface across platform builds. Go, Protobuf/Connect RPC, HTTP/3/QUIC, PostgreSQL, Redis and Temporal power the service. Platform support varies; Android and Linux are the current development focus.
- Rust + Slintshared client core and interface
- Shield + Toroptional metadata protection
- Closed alphareal device testing; still developing
From the current build
A closer look at Chatter
These captures come from my own Android phones. The conversations and channels are fictional demo content. Chatter is in closed alpha.

Your conversations, together
Direct chats, public channels, private spaces and anonymous groups in one home screen.

Replies that keep their context
Reactions, quoted replies, typing indicators and read receipts.

Stay in the conversation
A connected voice call can stay above the conversation or expand to fill the screen.

Photos, GIFs and albums
Text with media, animated attachments and multiple photos under one caption. AI-generated demo pictures inside the real app.

Choose what you share
Profile visibility, username discovery, read receipts, typing indicators and optional Shield mode.
More room on a tablet
The landscape layout keeps the conversation list beside your messages. Captured on a Samsung Tab S9 Ultra development build, with a fictional private mesh conversation.

Mesh chat, without the Chatter server
Nearby devices can exchange messages over Bluetooth Low Energy. I disabled Wi-Fi and mobile data on my phone and tablet, then sent the message shown in this recording. This is a real nearby-device exchange, not a multi-hop range test.
Public #mesh channels are readable by nearby participants. Private mesh messages use Noise encryption; nicknames are self-asserted until you verify the peer. Optional Nostr relays require internet. Mesh and Tor-based Shield are separate features.
More than text
A captioned photo, GIF and two-photo album. Real app recording with AI-generated demo attachments.
A message arrives
Typing indicator, incoming message and conversation movement. Silent screen recording.
A call without losing your place
Switching between full-screen and compact views during a connected voice call. Silent screen recording.
The hard problems I'm solving
- Sharing the Rust application core and Slint UI while handling native permissions, notifications, media devices and app lifecycle on each platform. Android and Linux are the focus; Windows build support and macOS packaging exist, and the iOS UI port is in progress.
- Private conversations require end-to-end encryption through libsignal. The client refuses plaintext fallback when encryption is required. Public channels are a separate mode and can carry service-readable content.
- Shield routes RPC traffic and attachment transfers through Tor when enabled and connected. Blind-signed anonymous mailbox tokens reduce account-to-mailbox linkage. This protects metadata without promising zero metadata or immunity to traffic analysis.
- Multi-device identity, key changes, background delivery and reconnect behavior need to remain consistent across the shared core and native platform adapters.
- LiveKit/WebRTC calling with a verification emoji display and compact or full-screen call views. The screenshots show a connected voice call between two Android test phones.
- Encrypted local history through SQLCipher, encrypted attachment handling, and an operational privacy model that also considers logs, retained metadata and key custody.
The stack
Deep dives on the blog
Ask about alpha testing →Building Chatter: private conversations, from chat to call

A look inside Chatter: real Android demos, a shared Rust and Slint client, a Go backend, voice calls, and the boundaries of its encryption and privacy model.
Read more →Two Cryptos, One Binary: How Rust Links With C (and How I Got Heap Corruption)

A Windows build crashed with no Rust panic — an access violation deep in C. Tracking it down meant learning how compilation, symbols, and linking really work.
Read more →From React to Rust: Why I Switched to Native Mid-Project

Building a chat app taught me that every abstraction layer has a cost—and some costs only become clear when you're deep in development.
Read more →The Cryptographic Elegance of the Signal Protocol: How Chatter Implements End-to-End Security

A deep dive into the Signal Protocol's cryptographic foundations and how we implement X3DH, Double Ratchet, and Sealed Sender in Chatter
Read more →Breaking the Metadata Chain: Implementing Anonymous Inboxes in Chatter

How we implemented anonymous mailboxes with blind signatures to defeat Statistical Disclosure Attacks, based on the NDSS 2021 paper 'Improving Signal's Sealed Sender'
Read more →Building Chatter: A Domain-Driven Monolithic Architecture

Exploring how Domain-Driven Design principles and modular architecture create maintainable monoliths
Read more →Why it's here
Plenty of people can talk about architecture. This is me actually building it across the whole stack — cryptography, backend, native clients, and the infrastructure to run it. It's where the idea-to-production, building-blocks, architecture review, and AI-app audit work comes from — applied to my own code first.
Status: closed alpha. Platform readiness and privacy features are still developing. An independent security audit is not being claimed.
Want this kind of work on your product?
A free 30-minute call. Tell me where you are; I’ll tell you the fastest path to shipped.
Book a free discovery call