Closed alpha

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.

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.

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.

Chatter tablet development build in dark mode, showing 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

ClientRust + Slint, shared application logic and UI, native platform adapters
BackendGo, Protobuf/Connect RPC, HTTP/3/QUIC with HTTP/2 fallback, Temporal workflows and SpiceDB authorization
DataPostgreSQL, Redis, object storage and client-side SQLCipher
Privacylibsignal, optional Shield mode, Tor onion routing and blind-signed anonymous mailboxes
CallsLiveKit + WebRTC; platform-specific media and audio integration
InfrastructureOVHcloud in France, containers, systemd and infrastructure as code

Deep dives on the blog

Ask about alpha testing →

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