A browser-based WhatsApp management interface built on top of Evolution API v2. No installation, no Node.js, no build step — just open index.html.
- A running Evolution API v2 instance (self-hosted)
- A connected WhatsApp instance on that server
- A modern browser (Chrome / Edge / Firefox)
- Download or clone this repo
- Open
index.htmldirectly in your browser - Click the Settings gear button in the top-right
- Fill in:
- Business / App Name — display name shown in the header (e.g. your company name)
- Server URL — your Evolution API base URL (e.g.
https://your-server.com) - Instance Name — the WhatsApp instance name configured in your Evolution API
- API Key — your Evolution API key
- Click Save — credentials are stored locally in your browser (never sent anywhere else)
| Type | Description |
|---|---|
| Text | Send text messages to one or multiple recipients (chip-based input) |
| Media | Send images, videos, documents with optional caption |
| Voice Note | Send audio files as voice messages |
| Location | Send GPS coordinates with place name and address |
| Contact | Share a contact card (vCard) |
| Reaction | React to a specific message with an emoji |
| Poll | Create a poll with up to 12 options |
| Buttons | Send interactive button messages |
| List | Send interactive list messages with sections |
| Status/Story | Post WhatsApp status updates (text, image, video, audio) |
- Browse & Send — fetch all groups, select one or more, broadcast a message
- Create Group — create a new group with participants
- Manage Group — update subject, description, picture, participants, settings, invite links, ephemeral timer
- Send to multiple recipients or groups with a randomized delay between messages (configurable min/max seconds) to simulate human sending behavior
Schedule any Compose or Group Broadcast job to send automatically at a future time. The browser tab must remain open.
| Action | Description |
|---|---|
| Schedule | Pick a future date/time — job queued and sent automatically |
| Cancel & Edit | Cancels the pending job and loads it back into the tab for full editing (recipients, messages, time) |
| Duplicate | Loads job content into the tab as a new draft — original untouched, schedule cleared for a fresh time |
| Resend | Clone a completed or cancelled job with a new send time (no editing) |
| Restore | Re-activate a cancelled job (only if scheduled time hasn't passed) |
| Cancel | Cancel a pending job without editing |
- Jobs are stored in IndexedDB (survives page refresh, handles large payloads)
- Each card shows an inline message preview (icon + truncated content) collapsed by default
- Scheduler polls every 30 seconds; jobs execute in order with the configured random delay between messages
- Validates phone numbers using libphonenumber-js
- Auto-normalizes local numbers to E.164 format (e.g.
0501234567→972501234567for IL) - Configure default country in Settings for local number parsing
When hosting on a web server, you can pre-configure all settings centrally using a config.json file placed next to index.html. Users won't need to touch Settings — everything is loaded automatically.
Copy config.example.json → config.json and fill in your values:
{
"appName": "My Business",
"base": "https://your-evolution-api-server.com",
"instance": "MyInstance",
"apikey": "your-api-key-here",
"country": "IL",
"delayMin": 1,
"delayMax": 5
}Any field can be omitted — omitted fields fall back to the user's local browser settings.
Note:
config.jsonis listed in.gitignoreso your credentials are never committed to the repo.
- Credentials are stored in your browser's localStorage (local use) or in
config.jsonon your server (hosted use) - Nothing is hardcoded in the source — the repo contains zero credentials
- Credentials never leave your browser except in direct API calls to your own Evolution API server
MIT — free to use and modify.