Nudgeway
Open source · MIT AI-first · MCP + skills

The open-source WhatsApp Business Platform.

Real-time inbox, in-browser WebRTC calls, template management, groups, and analytics on the WhatsApp Business Cloud API. Multi-tenant, single Go binary, MIT-licensed.

Multi-tenant
MCP-native
Single binary
Docker or native
Inbox
Aditi Rao
Order shipped
+91 98800 12345
Yes please, tomorrow works
Support · Group
Rahul joined the group
Karan Patel
Missed voice call
AR
Aditi Rao
online
Hi! Just checking on my order status.
10:24 AM
Shipped this morning. Tracking on the way.
10:25 AM
Template · order_shipped
Your order #4821 is on the way. Estimated delivery: Sat, Sep 6.
Track Call us
Incoming call
Aditi Rao · WhatsApp
What ships today

Everything you need to run WhatsApp for business.

Nudgeway is the platform, not a wrapper. Every feature is wired end-to-end — canonical domain, real-time UI, audit trail, observability.

Real-time inbox

WebSocket-driven three-pane inbox. Optimistic sends, WhatsApp-style ticks (queued → sent → delivered → read), typing + presence.

Calls with WebRTC

Accept WhatsApp Business calls right in the browser. Inbound popup, one-tap accept, recording + transcript persisted to HBase.

Templates, WhatsApp-native

Create, sync from Meta, submit for review. Renders in the thread the way WhatsApp renders it — header, body, footer, buttons.

Groups

List, sync, and create WhatsApp groups when your number is OBA-eligible. Group threads land in the same inbox.

Audit + Meta telemetry

Every mutation logged. Every Meta Graph call captured with request, response, latency, and status — searchable at /settings/provider-calls.

Analytics + Meta Analytics

Local KPI cards + sparklines for messages, delivery rate, response time, calls. Second tab proxies Meta's WABA analytics — messaging, calls, pricing — with an integration selector and quick-pick date ranges.

OBA · Profile · Username · QR

Business account status, profile CRUD, call settings, business username with QR — one drawer per integration.

Multi-tenant + RBAC

Every query is org-scoped. Session cookies, argon2id passwords, per-permission gating, envelope-encrypted credentials.

API tokens

Long-lived bearer tokens for MCP, CI, and scripts. nk_<prefix>_<secret>, argon2id-hashed, plaintext returned once. Bearer requests skip CSRF — cleaner than session cookies.

Token usage log + metrics

Every bearer request writes an execution row — method, path, status, latency, IP, redacted body — into a per-token log. KPI cards, sparkline, and top paths per token in the settings drawer.

Push webhook to Meta

Operator pastes a public URL (or hits Detect ngrok); Nudgeway posts the WABA-scoped webhook_configuration override to Meta. No copy-pasting the phone-number ID or verify token.

MCP-native

Every REST endpoint (73 and counting — inbox, integrations, templates, calls, groups, analytics, Meta analytics, tokens, usage) is auto-exposed as a Model Context Protocol tool. Point Claude Desktop / Claude Code / any MCP client at Nudgeway and talk to your inbox in natural language.

Built for AI agents

Point any LLM at Nudgeway.

Every REST endpoint is auto-exposed as an MCP tool. Every domain ships with a SKILL.md that teaches an agent how and when to use it. Nudgeway isn't AI-flavoured — it's agent-native.

MCP server
./bin/nudgeway-mcp · stdio · MCP 2024-11-05

Reads openapi.yaml at boot; emits one tool per operationId. Auth via bearer API token (or session cookie for local dev). Zero manual tool registration — new endpoints appear the moment the OpenAPI spec ships them.

export NUDGEWAY_API_TOKEN=nk_...
./bin/nudgeway-mcp --list-tools   # 73 tools and counting
Skills library
skills/*/SKILL.md · per-domain playbooks

Each skill teaches an LLM which tools to invoke, common patterns, gotchas, and the tenancy / CSRF / RBAC rules that apply. Auto-discovered by Claude Code; copy-paste-friendly for any model.

skills/
├── README.md
├── nudgeway-inbox/         SKILL.md
├── nudgeway-integrations/  SKILL.md
├── nudgeway-templates/     SKILL.md
├── nudgeway-calls/         SKILL.md
├── nudgeway-analytics/     SKILL.md
├── nudgeway-api-tokens/    SKILL.md
└── nudgeway-mcp/           SKILL.md
Ships with these skills
Inbox

List conversations, load threads, send text / media / template, mark read. Multi-tenant, org-scoped.

Integrations

Create + test + delete provider integrations. Push webhook overrides to Meta. Envelope-encrypted credentials.

Templates

CRUD + Meta sync + submit-for-review. Send templates with positional or named parameters.

Calls

Inbound popup, in-browser WebRTC accept, call permissions, recording + transcript persistence.

Analytics

KPI cards + sparklines: messages, delivery rate, response time, calls total / answered, avg duration.

API tokens

Mint, list, revoke bearer tokens for MCP / CI / scripts. Argon2id-hashed, plaintext-once, bearer skips CSRF.

MCP meta-skill

Build, run, and wire the MCP server into Claude Desktop / Claude Code / Cursor / any MCP client.

Roadmap

Coming next.

These aren't shipped yet. They're on the near-term roadmap and land as the code lands. Watch the repo, or read the roadmap page for detail.

Coming soon
Broadcast campaigns

Audience builder over contacts + template picker + scheduling + per-org rate-limit + pause / resume / stats.

Coming soon
Click-to-WhatsApp Ads

CTWA attribution — capture the ad payload on the first inbound, thread it through session + conversation, expose it on the contact profile.

Coming soon
WhatsApp Flows

Publish interactive forms (checkout, appointment booking, lead capture) built in the Flow Builder; render responses inline in the inbox thread.

Coming soon
Conversational AI bots

First-touch agent with human-handoff state machine. Anthropic and OpenAI adapters land first

Coming soon
Third-party bot providers

Dialogflow and Azure Bot as drop-in adapters — bring your existing bot, keep the Nudgeway inbox as the operator surface.

Coming soon
Ticketing adapters

Freshdesk + Zendesk to follow. Auto-open tickets from inbound messages; two-way sync of status + notes.

Coming soon
Automation engine

Trigger → condition → action rules (auto-reply, tag, assign, open ticket, invoke AI). Runs against the canonical event bus.

Coming soon
Additional channels

Telegram, Instagram DM, and Messenger as channel adapters — same canonical domain, same inbox.

Coming soon
Plugin marketplace

Community-authored provider adapters + automation actions, discoverable from Settings. Ships after the automation engine + plugin loader.

Under the hood

One binary. Boring, proven infra.

A modular Go monolith serves REST + WebSocket + workers + scheduler + embedded frontend. No microservices tax. Runs on your laptop against native MySQL / Redis / Kafka / HBase — no Docker required.

Backend
Go modular monolith
chi router, WebSocket hub, workers, scheduler — one process, one deploy.
Frontend
React 18 + Vite + TanStack
Router + Query + Tailwind. Built to web/dist and embedded via //go:embed.
Storage
MySQL + Redis + Kafka
MySQL is the source of truth. Redis for cache / locks / rate limits. Kafka for event log + job queues.
Media + events
HBase
Attachments, call recordings, transcripts, and the append-only activity stream.
The prime directive
Canonical domain
org · contact · session · conversation · message
Persist (MySQL + HBase)
Event
Async worker
Provider (Meta)
Result event
Real-time UI
Zero to sent-message

Running in about ten minutes.

Two ways to bring up the four backing services (MySQL 8+ · Redis 7+ · Kafka 3+ · HBase 2+). Pick either — the Nudgeway binary + Vite frontend always run natively.

Path A · one-command with Docker

Docker Desktop / Podman / Apple Containers (macOS 26+). All four services in one shot.

git clone https://github.com/v-senthil/nudgeway.git
cd nudgeway
docker compose up -d           # MySQL + Redis + Kafka + HBase
cp config/example.yaml config/local.yaml
openssl rand -hex 32           # paste into auth.credential_kek_hex
Path B · native install (dev default)

Homebrew / apt / dnf / WSL2. Full walkthrough in docs/install-services.md.

# macOS example
brew install mysql redis kafka hbase
brew services start mysql redis kafka hbase
git clone https://github.com/v-senthil/nudgeway.git
cd nudgeway
cp config/example.yaml config/local.yaml
openssl rand -hex 32
Then, on either path
1 Apply migrations
migrate -path migrations \
  -database "$MYSQL_DSN" up
2 Create org + admin
go build -o bin/nudgeway-cli ./cmd/cli
./bin/nudgeway-cli tenant create \
  --slug acme --name "Acme Co"
./bin/nudgeway-cli user create \
  --org-slug acme \
  --email you@acme.com \
  --password password123 --admin
3 Run the app
make dev
# backend  → :8080
# frontend → :5173
# open http://localhost:5173
Then paste your Meta phone-number ID + WABA ID + access token in Settings → Integrations → Connect WhatsApp, wire the webhook URL into the Meta app dashboard, and send yourself a message.
FAQ

Common questions

Is this a fork of an existing WhatsApp library?

No. Nudgeway is a first-principles platform — canonical domain (org / contact / session / conversation / message / call), real-time UI, MCP-native. Ships with a WhatsApp Business Cloud API adapter.

How do I install MySQL / Redis / Kafka / HBase?

docs/install-services.md covers native install on macOS (Homebrew), Debian/Ubuntu (apt + Apache tarballs), Fedora/RHEL (dnf), and Windows (WSL2). One-liners per OS.

Do I need Docker or Kubernetes?

No — native is the default dev path. But we ship a docker-compose.yml if you want one-command bring-up. Works with Docker Desktop, Podman, and Apple Containers (macOS 26+). The Go server + Vite still run natively — the compose file only replaces the four backing services.

What's the license?

MIT — see LICENSE on GitHub. Use it, fork it, ship it.