Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

aldinokemal/go-whatsapp-web-multidevice

Productivity & Utilities

Self-hosted WhatsApp REST API server in Go with multip-device support, webhooks, MCP tools and a web dashboard.

5,049
1,234
Go
MIT
4 years old

Overview

GOWA turns a WhatsApp account into a REST API and an MCP endpoint that you can host yourself. It is written in Go and built on the multi-device WhatsApp protocol, so a single server instance can hold several linked WhatsApp accounts and expose their messaging, contact, group, newsletter and status operations over HTTP.

Beyond sending messages and media, the server supports scheduled and recurring sends, per-device webhooks with HMAC-SHA-256 signatures, auto-replies, auto-read, media download and compression, sticker conversion, and Chatwoot integration. Since v9 the MCP endpoint (/mcp, streamable HTTP) is served by the same process as the REST API, giving MCP-capable AI clients seven consolidated tools for sending, scheduling, chats, groups, app control and newsletters. The OpenAPI contract in docs/openapi.yaml is the machine-readable API reference.

This suits developers who want to automate a personal or small-business WhatsApp account from their own infrastructure, and teams wiring WhatsApp into n8n or an AI agent.

Quick start

Prerequisites: Go 1.26.0 or later when building from source, plus FFmpeg and libwebp for media handling (macOS: brew install ffmpeg webp and export CGO_CFLAGS_ALLOW="-Xpreprocessor"; Linux: sudo apt install ffmpeg webp).

Run from source:

git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice
cd go-whatsapp-web-multidevice/src
go run . rest

Then open http://localhost:3000 and log in by scanning the QR code. The same rest command also serves the MCP endpoint at http://localhost:3000/mcp.

Docker is the alternative that avoids installing Go, FFmpeg and libwebp locally:

git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice
cd go-whatsapp-web-multidevice
cp src/.env.example src/.env
docker compose up -d --build

Prebuilt binaries are on the releases page, and images are published on Docker Hub and GHCR. To use the API, call the endpoints listed in the OpenAPI spec, authenticate with Basic Auth when configured, and pass X-Device-Id when more than one account is registered.

Constraints

  • Supported platforms are Linux (x86_64, ARM64), macOS (Intel and Apple Silicon) and Windows x86_64 via WSL; cross-compiling for Raspberry Pi uses the purego build tag to avoid CGO.
  • Session storage defaults to SQLite under storages/; PostgreSQL (for example Neon) can back sessions and keys, and in-memory storage is not recommended in production because restarts can lose WhatsApp session state.
  • A non-loopback bind requires Basic Auth in APP_BASIC_AUTH unless you explicitly opt out with APP_ALLOW_UNAUTHENTICATED. Set APP_TRUSTED_ORIGINS for dashboards served from another origin; a file://-opened dashboard cannot make state-changing requests.
  • Webhook receivers should configure a stable WHATSAPP_WEBHOOK_SECRET; if none is set, a random per-process key is generated and changes on restart.
  • Scheduled sends retry failed occurrences under the same message id but do not guarantee exactly-once delivery.
  • The dashboard is downloaded from the separate gowa-ui repository at startup and refreshed every 3 hours by default; pin it with APP_UI_ASSET_SHA256 or pre-seed storages/ui/index.html and disable updates for air-gapped deployments.
  • The project is unofficial and not affiliated with WhatsApp; the README directs production-grade needs to the official WhatsApp Business Platform. Licensed MIT.

HotRepo's take

On the Go daily list for 2026-11-15 the repository recorded 5,047 stars with 8 new stars that day and a best position of 17. A single snapshot only confirms that day's placement, so it does not establish a trend. What stands out from the technical material is the consolidation in v9: MCP moved into the REST process, and the dashboard moved to a separate repository that the server fetches and verifies by digest. Those are meaningful operational changes for anyone pinning versions or deploying on restricted networks.

Written by AI from the project's README, updated . The project's own docs are the source of truth.

You might also like

  1. lharries/whatsapp-mcpLets an LLM agent search, read, and send WhatsApp messages from your own account, locally.Go6,710
  2. tulir/whatsmeowA Go library that lets developers build WhatsApp messaging into their own apps via the web multidevice API.Go7,687
  3. melgarafael/DeskcommCRMSelf-hosted WhatsApp sales CRM where AI agents qualify, follow up and hand off to humans.TypeScript4,994
  4. finereli/whatsapp-mcpRead-only MCP server that lets an AI agent search and read your own WhatsApp history.TypeScript391
  5. crmne/zapfastA native desktop WhatsApp client for Linux, macOS and Windows that skips the browser engine.Rust2,291