Run a keyboard-only WhatsApp client inside a terminal window over SSH
Archive every WhatsApp event into dated JSON logs and extract clean per-entity files
Forward all WhatsApp events to a webhook for a bot or analytics pipeline
Decrypt and inspect WhatsApp polls per voter for moderation or research
Needs Node.js 24+, pnpm, and Python 3 for payload extraction; uses the unofficial Baileys library so account bans are a real risk.
wpp-tui is a WhatsApp client that runs entirely inside a terminal window rather than as a graphical app. To make this work it pairs two libraries: Baileys, an unofficial WhatsApp socket implementation in Node.js, and Ink, which lets developers build terminal interfaces using React components. The result is a text-based UI where boxes, lists, and message feeds are drawn with line characters, and the chat layout looks similar to a normal messenger app rendered in ASCII art. Getting started involves installing dependencies with pnpm and running pnpm dev. On first launch the user scans a QR code with the Linked Devices feature in WhatsApp, and the session is reused on later runs. The interface has three tabs that the user cycles through with Tab or slash commands. The Chat tab shows a sidebar of groups marked with a hash and direct messages marked with an at sign, along with an auto-scrolling message feed. The Stats tab draws a bar chart of top senders and a breakdown of message types. The Debug tab shows a live stream of incoming events with scroll support and connection details. The tool also acts as a structured logger. Every WhatsApp event, including message upserts, delivery updates, reactions, presence changes, group member tag changes, and credential updates, is persisted to dated JSON files under a logs directory. A make extract-payload command then parses those raw logs into more useful files, such as messages.json, users.json, groups-full.json, reactions.json, threads.json, polls.json, member-profiles.json, activity.json, stickers.json, receipts.json, presence.json, a unified timeline.json, and a stats.json summary. Polls are decrypted using AES-256-GCM and HMAC-SHA256 so that individual votes are visible per user. An optional webhook proxy can forward every event to an external URL by setting a WEBHOOK_URL environment variable before starting the dev script. Keyboard shortcuts are documented for tab cycling, chat navigation, and quitting. The project structure listing shows source files for the Ink components, a hook that wraps the Baileys socket, and a Python script for the payload extraction step. The tech stack is Node.js 24 or newer, Baileys 7, Ink 7 with React 19, tsup for builds, pino for logging, and Python 3 for extraction. The license is ISC.
Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.