quickstart.md 4.0 KB


type: overview title: Quickstart description: What the wh WhatsApp terminal client with per-chat AI autoreply does, how to build and run it, and where to find each topic in this wiki. tags: [overview, quickstart, rust, whatsapp, tui, ai] sources:

  • id: openwiki-source-651d1fb6c9 resource: repo://Cargo.toml
  • id: openwiki-source-9fec9d1af4 resource: repo://src/app.rs
  • id: openwiki-source-043e6252ba resource: repo://src/autoreply.rs
  • id: openwiki-source-2a737474d8 resource: repo://src/config.rs
  • id: openwiki-source-b55a21a31e resource: repo://src/main.rs generated: { by: "claude-code", at: "2026-10-19T19:53:56.480Z" } verified:
  • by: openwiki/0.7.2 at: 2026-10-19T19:53:56.480Z ---

Quickstart

wh (Cargo.toml:1-5) is a Rust terminal client for WhatsApp. It links as a companion device by QR code, shows chats and contacts in a ratatui interface, stores messages locally in SQLite and can answer incoming messages automatically with an OpenAI-compatible model, chat by chat — in private chats and in groups (broadcasts, status and newsletters excluded).

Build and run

cargo build --release
cargo run --release
cargo test

The crate uses edition 2024. whatsapp-rust is built with default-features = false because its default simd feature needs nightly (Cargo.toml:8-10). [lints.rust] linker_messages = "allow" (Cargo.toml:25-27) silences the informational MSVC linker line printed because the binary exports symbols.

On first start the app shows a QR code: scan it from WhatsApp → Linked devices. The session is kept in session.db, so later starts connect directly. Main keys: Tab switches list/input, F2 chats/contacts, Enter opens a chat or sends, Ctrl+A toggles autoreply for the open chat, Ctrl+C quits (key bindings).

Configuration in short

Settings live in config.toml inside the data directory <platform config dir>/wh (on Windows %APPDATA%\wh), next to session.db and history.db (src/config.rs:40-49, src/config.rs:144-148). The two databases are separate by design: session.db is the WhatsApp library's session and key store, history.db holds the app's chats, messages and autoreply flags. Without the file the app still runs as a plain WhatsApp client; the autoreply needs openai_api_key and system_prompt. Optional keys tune the cooldowns (cooldown_seconds, group_cooldown_seconds), the startup catch-up (catch_up_seconds) and an AI request log (ai_log, written to ai_requests.log in the same folder). Keys and defaults: Configuration and data.

Startup in one line

main loads the config, opens the history, starts the WhatsApp client and an input thread, then runs the draw/receive loop until quit (src/main.rs:28-51, see Runtime and event loop).

Where to look

Task Page Source
Startup, channels, threads, main loop Runtime and event loop src/main.rs
Events, state, keys, background tasks Application state src/app.rs
Screens, rendering, message formatting Terminal UI src/ui.rs
WhatsApp session, events, JIDs, media WhatsApp client src/whatsapp.rs
AI HTTP requests, vision, errors AI client src/ai.rs
When and how the AI replies (groups, cooldowns, deferred replies, catch-up) AI auto-reply workflow src/autoreply.rs, src/app.rs
Local SQLite messages, chats, contacts History store src/history.rs
Config keys, data dir, security notes Configuration and data src/config.rs
Test suites and how to run them Unit tests src/*.rs