OpenWA

activetype/resource

OpenWA

TL;DR

Open Source WhatsApp HTTP API gateway — self-hosted NestJS service with multi-session REST API, web dashboard, webhooks (HMAC), and whatsapp-web.js under the hood. MIT-licensed alternative to commercial WAHA tiers; swap DB (SQLite/PostgreSQL), cache (Redis), and media storage (local/S3/MinIO) via config. Pre-1.0 as of May 2026.

What it is

OpenWA exposes WhatsApp as a REST API you run on your own infrastructure. Pairing is session-based (QR via API/dashboard), similar in role to [[Resources/Tech/WAHA/WAHA|WAHA]] but aimed at no vendor lock-in and full source access.

Sitehttps://www.open-wa.org/
Repohttps://github.com/rmyndharis/OpenWA
LicenseMIT
MaintainerYudhi Armyndharis (rmyndharis)
MaturityEarly — marketing site cites v0.1.3; repo releases through v0.1.x (May 2026)

Stack (upstream)

LayerTechnology
RuntimeNode.js 22 LTS
FrameworkNestJS 11.x
LanguageTypeScript 5.x
WA enginewhatsapp-web.js (engine abstraction in src/engine/)
ORMTypeORM
DatabaseSQLite (dev/zero-config) or PostgreSQL (prod profile)
CacheRedis (optional)
StorageLocal / S3 / MinIO
DashboardReact (dashboard/)
DeployDocker Compose (+ Traefik profile)

Default ports

ServiceURL
REST APIhttp://localhost:2785/api
Swaggerhttp://localhost:2785/api/docs
Dashboardhttp://localhost:2886

Auth: X-API-Key header on API calls.

Core capabilities

  • Sessions — create/start/stop multiple WhatsApp sessions; QR endpoint for linking
  • Messaging — text, media (image/video/doc/audio), reactions, bulk send, delivery/read status
  • Webhooks — configurable events (e.g. message.received, session.status) with HMAC secret
  • Groups, channels/newsletters, labels
  • Ops — API keys, rate limiting, CIDR whitelist, per-session proxy, audit logging, health checks, data migration between backends
  • n8n — community nodes advertised on site/README for workflow automation ([[Resources/Tech/n8n/n8n]])

Pluggable infrastructure

Config-driven adapters (no app code changes when swapping):

  • Database: SQLite ↔ PostgreSQL (docker compose --profile postgres)
  • Cache: memory ↔ Redis (--profile redis)
  • Media: local ↔ MinIO/S3 (--profile minio)
  • Prod profiles: with-dashboard, with-proxy (Traefik), full (all optional services)

Dev: docker compose -f docker-compose.dev.yml up -d (SQLite + local storage + API + dashboard).
Prod: docker compose up -d with optional profiles.

API shape (examples)

Session lifecycle and messaging are namespaced under /api/sessions/{sessionId}/…:

# Create session
curl -X POST http://localhost:2785/api/sessions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"name": "my-bot"}'

# Send text (chatId format: 628123456789@c.us)
curl -X POST http://localhost:2785/api/sessions/{sessionId}/messages/send-text \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{"chatId": "628123456789@c.us", "text": "Hello from OpenWA!"}'

vs [[Resources/Tech/WAHA/WAHA|WAHA]] (positioning)

OpenWA’s public comparison table pitches itself against WAHA Core / Plus / Cloud on price (free OSS), multi-session, dashboard, PostgreSQL, webhook UI, and self-hosting. Treat marketing claims as vendor positioning until you validate against your own requirements.

DimensionOpenWAWAHA (vault default)
License / costMIT, self-hostedWAHA Core free; Plus/Cloud paid tiers
Enginewhatsapp-web.jsWAHA supports multiple engines (see WAHA docs)
Stack fitNestJS + TypeORM — aligns with [[Resources/Tech/NestJS/NestJS]] employment patternsSeparate product; already in [[Resources/Tech/Personal default fullstack stack]]
MaturityYoung OSS (2026)Established in personal stack note

When to evaluate OpenWA: need OSS + NestJS-shaped gateway, PostgreSQL/Redis/S3 from day one, or want to avoid WAHA Plus/Cloud fees while keeping a dashboard and Swagger.

Repo documentation map

DocPath
Overviewdocs/01-project-overview.md
Architecturedocs/03-system-architecture.md
Securitydocs/04-security-design.md
API specdocs/06-api-specification.md
Migrationdocs/14-migration-guide.md
Roadmapdocs/15-project-roadmap.md

Operational caveats

  • WhatsApp ToS / compliance — same class of risk as any unofficial Web-session bridge (WAHA, wwebjs, etc.); not Meta’s official Cloud API.
  • Pre-1.0 — API and deployment may shift; pin versions and read changelog before production.
  • Engine choice — tied to whatsapp-web.js behavior (session stability, breaking WA Web changes).

Where I might use it

  • Not yet in [[Resources/Tech/Personal default fullstack stack]] (WAHA is the current WhatsApp leaf).
  • Candidate for LumenDev/personal bots if OSS + NestJS ops win over WAHA Plus features.

Official documentation

Sources

Related vault

  • [[Resources/Tech/WAHA/WAHA]]
  • [[Resources/Tech/n8n/n8n]]
  • [[Resources/Tech/Personal default fullstack stack]]
  • [[Resources/Tech/NestJS/NestJS]]
  • [[Resources/Tech/PostgreSQL/PostgreSQL]]
  • [[Resources/Tech/Redis/Redis]]