WhatsApp · in your terminal
Chat on WhatsApp without leaving your keyboard
wisp is a fast, keyboard-driven WhatsApp client for the terminal. Real inline images, vim keybindings, multiple accounts — a single Rust binary, zero Electron.
free & open source · macOS & Linux · kitty-compatible terminal for images
features
Everything you'd expect. In a pane.
vim keys, everywhere
j/k, gg/G, dw, ciw — modal compose with motions. Never touch the mouse.
real inline images
Photos render as true images via the kitty graphics protocol. Not ASCII.
multiple accounts
Run several numbers at once — s cycles, every account stays live.
ticks that tell the truth
✓ / ✓✓ / read, backed by real server acks and a self-healing send path.
Arabic & RTL, done right
Proper bidi: shaped, connected, right-to-left — like the real app.
search + jump
S searches across every chat and jumps you to the hit.
replies, reactions, edits
Quote with r, react with x, edit with c — recipients can tap-to-jump.
media in, media out
p plays, o opens, d downloads. A opens yazi to send without leaving.
written in Rust
One native binary. No Electron, no browser engine, sips RAM.
local-first
Chats cached on your machine, instant on launch. No servers, no telemetry.
one config.toml
Theme, keymap, tick rate, presence, media player — rebind anything.
survives restarts
Everything is there when you come back. F / Ctrl-R resyncs on demand.
delivery
Ticks that tell the truth.
Every checkmark is backed by a real server acknowledgement. The send path self-heals — resending and re-establishing sessions until the message actually lands. No fake checkmarks, ever.
14:04 queueing… ◷
14:04 server ack ✓
14:04 delivered to device ✓✓
14:05 read ✓✓
$ session re-established · resent 1 · delivered
install
Up and running in a minute.
$ git clone https://github.com/migi96/wisp$ cd wisp && cargo build --release$ ./target/release/wisp
first run: scan the QR from WhatsApp → Linked Devices. images need a kitty-graphics terminal (kitty, Ghostty…).
keybindings
Your hands never leave home row.
every action is bound in a TOML config — rebind anything.
recommended rig
Best served on a split keyboard.
wisp is keyboard-only by design. This is the setup it was written on — and the one it begs for.
home row — a r s t · n e i o
hardware
a split keyboard
Corne, Sofle, Lily58 or a Glove80 — shoulders squared, hands where they belong. wisp's Ctrl-hjkl pane hops feel native on a 36–58 key split.
firmware
running ZMK
Wireless, open-source firmware. Put wisp's chords on a layer: home-row mods, a nav layer for j/k/gg/G, combos for :send. Flash it and forget it.
layout
on Colemak-DH
The home row does the talking — and in wisp, n·e·i·o and a·r·s·t are exactly where your fingers rest. Your WPM in chats will be illegal.
faq
Honest answers.
Is this official? Is my account safe?
No — wisp uses a reverse-engineered multi-device protocol (the whatsapp-rust crate). It's unofficial and carries some account risk. We recommend testing with a spare number first.
Which terminals work?
Anything speaking the kitty graphics protocol gets real inline images: kitty, Ghostty, and friends. Everything else degrades gracefully to a text placeholder.
macOS? Linux? Windows?
macOS and Linux today. Windows isn't supported yet — WSL may work, but it's untested.
Does it store my messages?
Only a local cache on your machine, so chats appear instantly on launch. No servers, no telemetry, nothing leaves your box.
Can I use multiple numbers?
Yes — multi-account is first-class. `:account add` pairs a new one, `s` cycles between them, and every account stays live in the background.
How do I update or resync?
`F` or Ctrl-R resyncs a chat on demand. To update the binary, pull and rebuild (cargo build --release).