quickstart.md 4.8 KB


type: overview title: Quickstart description: What the wh WhatsApp terminal client with per-chat and global AI autoreply and optional web control panel does, how to build and run it, and where to find each topic in this wiki. tags: [overview, quickstart, rust, whatsapp, tui, ai, web-panel] 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-20T20:27:06.515Z" } verified:
  • by: openwiki/0.7.2 at: 2026-10-20T20:27:06.515Z ---

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 or for all chats at once — in private chats and in groups (broadcasts, status and newsletters excluded). An optional web control panel lets a browser toggle the autoreplies and stop the bot.

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). The release profile strips symbols and uses LTO with a single codegen unit (Cargo.toml:27-33). [lints.rust] linker_messages = "allow" (Cargo.toml:35-37) 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, Enter opens a chat or sends, typing in the list filters it, F2 chats/contacts, F3 toggles autoreply for the open chat, F4 toggles the global autoreply ("AI tutte"), Canc twice deletes the selected chat locally, F10 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:47-56, src/config.rs:166-170); the repository's config.toml.global.template lists every key. 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), AI retries (ai_retries), an AI request log (ai_log, written to ai_requests.log in the same folder) and the web panel port (web_port, unauthenticated, all interfaces). Keys and defaults: Configuration and data.

Startup in one line

main loads the config, opens the history, starts the WhatsApp client, the optional web panel and an input thread, then runs the draw/receive loop until quit (src/main.rs:30-54, 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, filter, chat deletion, 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, retries, errors AI client src/ai.rs
Web control panel: routes, security, browser page Web control panel src/web.rs, src/web_page.html
When and how the AI replies (global/per-chat, groups, cooldowns, deferred replies, catch-up) AI auto-reply workflow src/autoreply.rs, src/app.rs
Local SQLite messages, chats, contacts, settings 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