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.
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.
| Site | https://www.open-wa.org/ |
| Repo | https://github.com/rmyndharis/OpenWA |
| License | MIT |
| Maintainer | Yudhi Armyndharis (rmyndharis) |
| Maturity | Early — marketing site cites v0.1.3; repo releases through v0.1.x (May 2026) |
| Layer | Technology |
|---|---|
| Runtime | Node.js 22 LTS |
| Framework | NestJS 11.x |
| Language | TypeScript 5.x |
| WA engine | whatsapp-web.js (engine abstraction in src/engine/) |
| ORM | TypeORM |
| Database | SQLite (dev/zero-config) or PostgreSQL (prod profile) |
| Cache | Redis (optional) |
| Storage | Local / S3 / MinIO |
| Dashboard | React (dashboard/) |
| Deploy | Docker Compose (+ Traefik profile) |
| Service | URL |
|---|---|
| REST API | http://localhost:2785/api |
| Swagger | http://localhost:2785/api/docs |
| Dashboard | http://localhost:2886 |
Auth: X-API-Key header on API calls.
message.received, session.status) with HMAC secretConfig-driven adapters (no app code changes when swapping):
docker compose --profile postgres)--profile redis)--profile minio)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.
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!"}'
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.
| Dimension | OpenWA | WAHA (vault default) |
|---|---|---|
| License / cost | MIT, self-hosted | WAHA Core free; Plus/Cloud paid tiers |
| Engine | whatsapp-web.js | WAHA supports multiple engines (see WAHA docs) |
| Stack fit | NestJS + TypeORM — aligns with [[Resources/Tech/NestJS/NestJS]] employment patterns | Separate product; already in [[Resources/Tech/Personal default fullstack stack]] |
| Maturity | Young 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.
| Doc | Path |
|---|---|
| Overview | docs/01-project-overview.md |
| Architecture | docs/03-system-architecture.md |
| Security | docs/04-security-design.md |
| API spec | docs/06-api-specification.md |
| Migration | docs/14-migration-guide.md |
| Roadmap | docs/15-project-roadmap.md |
docs/15-project-roadmap.md