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

WRITTEN IN RUST 🦀OPEN SOURCENO TELEMETRYNO ELECTRONLOCAL-FIRST

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.

wisp — send path

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.

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.

jkmove through chats & messages
ggGjump to top / bottom
iinsert mode — write like you code
rreply with quote
xreact to message
cedit your message
sswitch account
Ssearch all chats
Aattach via yazi
yyyank message
vvisual select
^h^lmove between panes

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.

`
q
w
f
p
b
a
r
s
t
g
z
x
c
d
v
gui
lwr
spc
j
l
u
y
;
m
n
e
i
o
'
k
h
,
.
/
ret
rse
alt

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

Live in the terminal? So does your WhatsApp.