04 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.

RustTauri 2Svelte 5SQLiteMIT

Rust tests

352

Frontend tests

66

Total LOC

~68K

Version

v0.1.0

01

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.

02

Key decisions

Native protocol, no webview

Built on whatsapp-rust pinned to a git revision newer than 0.7.0 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.

Disk and RAM decoupled

SQLite is a durable archive; the open conversation keeps a bounded message window (500 default, 50-2,000). Eviction 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.

03

Measured against a webview client

Same account, same machine.

Comparison
Idle CPU ~0.3% vs ~200%
Memory ~600 MB vs 2.2 → 23 GB
History at pairing none vs ~20 GB
Session DB compacted 97 MB → 5.8 MB
Rows preserved 399,620
04

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