NATIVE DESKTOP · MESSAGING PROTOCOL

postal

A standalone native WhatsApp client that speaks the multi-device protocol directly. No webview, no forced history download.

SQLite is the durable archive. RAM is a bounded window. History sync is a program decision rather than a pairing requirement.

Rust Tauri 2 Svelte 5 SQLite MIT
WhatsApp phone (multi-device link) │ ▼ whatsapp-rust protocol core │ ▼ Service event loop │ ▼ StoreWorker async gate (exclusive lease + savepoint) │ ┌─────────┴─────────┐ ▼ ▼ SQLite archive Bounded RAM window (durable rows) (500 msgs, 50-2000) │ │ └─────────┬─────────┘ ▼ Tauri 2 IPC │ ▼ Svelte 5 UI

Problem

Wrapping WhatsApp Web forces the client to download and hold the account's entire message history. That is tens of gigabytes on disk, multiple gigabytes of RAM, and performance that degrades as the history grows. The protocol itself does not require any of it.

Key decisions

Native protocol, no webview

Built on whatsapp-rust pinned to a git revision newer than the 0.7.0 release for history-sync admission. The only webview renders Postal's own UI.

History sync is opt-in

Pairing pulls the recent window only. Full history (up to 10,000 days, phone permitting) is requested explicitly from Settings instead of being downloaded by default.

Disk and RAM decoupled

SQLite is a durable archive; the open conversation keeps a bounded message window (500 default, 50-2,000). Eviction from RAM never deletes disk rows.

Serialized store access

A StoreWorker gate holds an exclusive lease through each savepoint, so live and history batches never race while background work waits without occupying Tokio workers.

Measured against a webview client

Same account, same machine
Idle CPU~0.3% vs ~200%
Memory~600 MB vs 2.2 → 23 GB
History at pairingnone vs ~20 GB
Session DB compacted97 MB → 5.8 MB
Rows preserved399,620

Results

Rust tests
352
Frontend tests
66
Total LOC
~68K
Version
v0.1.0

Tradeoffs

  • ·Databases, media, and backups are plaintext on disk; encryption is open work
  • ·Releases are on hold until they cover every supported platform; installers build from master
  • ·No calls, tray icon, status updates, communities, or album support yet