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.
Rust tests
352
Frontend tests
66
Total LOC
~68K
Version
v0.1.0
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 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.
Measured against a webview client
Same account, same machine.
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