
whatsapp rest.
Requirements
Supported platforms: Linux (amd64, arm64, armv7, 386), macOS (Intel, Apple Silicon), Windows (amd64, 386; WSL recommended).
Docker
Images are published to Docker Hub and GHCR:aldinokemal2104/go-whatsapp-web-multideviceghcr.io/aldinokemal/go-whatsapp-web-multidevice
/app/storagesholds the SQLite databases (sessions, chat history, schedules, OAuth). Losing it unpairs every device./app/staticsholds QR images, uploads and downloaded media.- The default command is
rest. Pass flags after it, for example... go-whatsapp-web-multidevice rest --autoreply="Away". - The entrypoint fixes volume ownership and drops privileges to
gowauser(UID 20001, GID 20000). - Container time is UTC (
TZ=UTC). OverrideTZif you need local log timestamps.
Docker Compose
docker-compose.yml
docker-compose.yml builds the image from docker/golang.Dockerfile and reads src/.env. Use it when you want to build locally: cp src/.env.example src/.env && docker compose up -d --build.
Release binary
Download an archive from GitHub Releases. Archives are namedwhatsapp_<version>_<os>_<arch>.zip, for example:
checksums.txt from the same release. ./whatsapp version prints the version; ./whatsapp --help lists every flag.
From source
export CGO_CFLAGS_ALLOW="-Xpreprocessor" before building.
ARM without a C toolchain
Thepurego build tag selects a pure-Go SQLite driver, so you can cross-compile with CGO disabled:
Storage
By default everything is SQLite understorages/:
DB_URI also accepts PostgreSQL, for example postgres://user:pass@host:5432/gowa?sslmode=disable. Back up storages/ (or the PostgreSQL database plus storages/) to keep paired devices across rebuilds.
Behind a reverse proxy
Serve GOWA under a subpath withAPP_BASE_PATH, and trust the proxy’s forwarded headers with APP_TRUSTED_PROXIES:
/health stays at the root (/health, not /gowa/health) so probes work regardless of base path.
Verify
/health returns OK once storage is initialized. It does not report whether any WhatsApp account is connected; use GET /devices/{device_id}/status for that.
Upgrading
Back upstorages/, pull the new image or binary, and restart. Read the release notes for breaking changes first. Notable ones: v6 made the rest subcommand mandatory, v7 moved binaries to GoReleaser archives, v8 added multi-device (device-scoped calls need X-Device-Id once more than one device exists), and the standalone whatsapp mcp mode (:8080/sse) was replaced by the /mcp endpoint on the REST server.