Version: 3.0
Created: 3 Februari 2026
Last Updated: 8 Februari 2026
Status: ✅ All Phases Completed
Membangun WhatsApp Gateway open source terlengkap yang menggabungkan semua killer features dalam satu self-hosted solution.
MultiWA V3.0 = Evolution API + WAHA + Fonnte + Whapi.id
(All features combined, none missing)
| Feature | Evolution | WAHA | Fonnte | OpenWA | MultiWA V3 |
|---|---|---|---|---|---|
| Self-hosted OSS | ✅ | ❌ Paid | ✅ | ✅ | |
| Multi-engine | ✅ | ✅ | ❌ | ❌ WWebJS only | ✅ |
| Dashboard UI | ❌ | ✅ Basic | ✅ | ❌ | ✅ Premium |
| Real-time Chat | ❌ | ❌ | ❌ | ❌ | ✅ Unique |
| Broadcast | ❌ | ❌ | ✅ | ❌ | ✅ |
| Automation Rules | ❌ | ✅ | ✅ | ||
| Multi-tenant | ❌ | ❌ | ❌ | ❌ | ✅ Unique |
| Visual Flow Builder | ❌ | ❌ | ❌ | ✅ | |
| Contact Mgmt | ❌ | ❌ | ✅ | ❌ | ✅ |
| Template System | ❌ | ❌ | ✅ | ❌ | ✅ |
| Poll/Location/Contact | ❌ | ❌ | ❌ | ❌ | ✅ |
| Analytics Dashboard | ❌ | ❌ | ✅ | ❌ | ✅ |
| SDK (npm) | ❌ | ❌ | ❌ | ✅ (is SDK) | ✅ |
| Integrations (n8n/CW/WP) | ❌ | ❌ | ❌ | Chatwoot/S3 | ✅ |
| Webhook System | ✅ | ✅ | ✅ | ✅ | ✅ |
| Group Management | ✅ | ❌ | ✅ | ✅ | |
| API Documentation | ✅ | ✅ | ✅ | ✅ | ✅ |
| License | MIT | Freemium | Paid | MIT |
Note
OpenWA is a library/CLI (requires coding), not a managed platform. MultiWA's advantage is being a full-stack platform with Dashboard + API + Automation + Visual Builder in one self-hosted package.
MultiWA V3 mendukung multiple WhatsApp engines melalui Hexagonal Architecture:
┌─────────────────────────────────────────────────┐
│ Engine Abstraction Layer │
│ (IWhatsAppEngine Interface) │
├─────────────┬─────────────┬─────────────────────┤
│ Baileys │ WA-Web.js │ Cloud API (Future) │
│ Adapter │ Adapter │ Adapter │
└─────────────┴─────────────┴─────────────────────┘
| Aspect | Baileys | whatsapp-web.js |
|---|---|---|
| Type | WebSocket (pure Node.js) | Browser-based (Puppeteer) |
| Memory | ~50-100MB | ~200-400MB |
| Stability | Medium (more updates needed) | High (battle-tested) |
| Features | Full | Full |
| Maintenance | Active (WhiskeySockets) | Active |
| Your V2 Experience | - | ✅ Already used |
- Primary: whatsapp-web.js - Lebih stabil, sudah proven di V2
- Secondary: Baileys - Untuk scaling (lower memory)
- User dapat memilih engine per profile via dashboard
| Phase | Duration | Focus | Status |
|---|---|---|---|
| 1 | Week 1-4 | Core Infrastructure | ✅ Completed |
| 2 | Week 5-7 | Messaging Core | ✅ Completed |
| 3 | Week 8-10 | Business Features | ✅ Completed |
| 4 | Week 11-13 | Automation | ✅ Completed |
| 5 | Week 14-16 | Enterprise | ✅ Completed |
| 6 | Ongoing | Ecosystem | ✅ Completed |
multiwa-gateway/
├── apps/
│ ├── api/ # NestJS + Fastify
│ ├── admin/ # Next.js 14 Dashboard
│ └── worker/ # BullMQ Jobs
│
├── packages/
│ ├── core/ # Domain (Hexagonal)
│ ├── engines/ # WhatsApp Adapters
│ │ ├── whatsapp-web-js/ # Primary
│ │ ├── baileys/ # Secondary
│ │ └── mock/ # Testing
│ ├── database/ # Prisma
│ ├── ui/ # Shared Components
│ └── config/ # Configs
│
├── docker/
└── docs/
-- Multi-tenant hierarchy
CREATE TABLE organizations (
id UUID PRIMARY KEY,
name VARCHAR(255) NOT NULL,
slug VARCHAR(100) UNIQUE NOT NULL,
plan VARCHAR(50) DEFAULT 'free'
);
CREATE TABLE workspaces (
id UUID PRIMARY KEY,
organization_id UUID REFERENCES organizations(id),
name VARCHAR(255) NOT NULL,
slug VARCHAR(100) NOT NULL
);
CREATE TABLE profiles (
id UUID PRIMARY KEY,
workspace_id UUID REFERENCES workspaces(id),
name VARCHAR(255) NOT NULL,
phone VARCHAR(20),
engine VARCHAR(50) NOT NULL, -- 'whatsapp-web-js' | 'baileys'
status VARCHAR(50) DEFAULT 'disconnected',
session_data JSONB
);export interface IWhatsAppEngine {
// Lifecycle
initialize(config: EngineConfig): Promise<void>;
connect(): Promise<void>;
disconnect(): Promise<void>;
getQRCode(): AsyncGenerator<string>;
// Messaging
sendText(to: string, text: string): Promise<MessageResult>;
sendMedia(to: string, media: MediaPayload): Promise<MessageResult>;
// Events
on(event: EngineEvent, handler: EventHandler): void;
}- Text, Image, Video, Audio, Document
- Location, Contact, Sticker
- Reply/Quote, Reactions, Poll
- Groups, Channels, Status
- message.received, message.sent
- message.delivered, message.read
- connection.update, group.update
- Recipient selection (tags, contacts, CSV)
- Scheduling (one-time, recurring)
- Variable personalization
- Progress tracking
- Categories, Variables
- Preview & usage stats
- Tags, Custom fields
- Import/Export CSV
- Trigger: keyword, regex, new_contact, schedule
- Actions: reply, add_tag, webhook, delay
- Webhook-based (ChatGPT, Gemini, Claude)
- MCP Protocol for AI agents
- RBAC with custom roles
- Audit logging
- Analytics dashboard
- Visual Flow Builder (React Flow)
- TypeScript SDK
- n8n integration
- Chatwoot integration
- WordPress plugin
| Layer | Technology |
|---|---|
| Backend | NestJS + Fastify |
| Database | PostgreSQL + Prisma |
| Cache/Queue | Redis + BullMQ |
| Frontend | Next.js 14 + shadcn/ui |
| Monorepo | Turborepo + pnpm |
| Deploy | Docker Compose |
All phases fully implemented as of 8 Februari 2026:
| Gap Area | Status | Package/Location |
|---|---|---|
| Dashboard Fixes | ✅ | apps/admin |
| Automation Wiring | ✅ | apps/api + apps/admin |
| Template Integration | ✅ | apps/admin (Messages + Broadcast) |
| Missing Message Types | ✅ | Location, Poll, Contact, Sticker |
| Visual Flow Builder | ✅ | apps/admin/automation/builder |
| Analytics Dashboard | ✅ | apps/admin/analytics |
| TypeScript SDK | ✅ | packages/sdk (7 client modules) |
| n8n Integration | ✅ | packages/n8n-nodes-multiwa |
| Chatwoot Bridge | ✅ | packages/chatwoot-bridge |
| WordPress Plugin | ✅ | packages/wordpress-plugin |
Document permanent - untuk tracking progress development