venom is a free, open source ai interaction & interfaces project written in TypeScript and released under Apache-2.0. It has 6,580 GitHub stars, 1,331 forks and 62 open issues, and was last pushed 9 days ago. On this registry it ranks #45 of 113 tracked projects in AI Interaction & Interfaces, with 5 head-to-head comparisons available.

What is venom?

Venom is an Apache-2.0 TypeScript framework that drives WhatsApp Web through Puppeteer, giving JavaScript and TypeScript developers a programmatic API for chatbots, customer-service flows and message automation.

What it is

Venom is a Node.js library that automates a WhatsApp Web session and exposes it through a JavaScript API. Version 6 is a full rewrite: pure Puppeteer with no puppeteer-extra and no stealth plugins, updated WhatsApp Web modules such as WAWebSocketModel and WAWebConnModel, TypeScript 5.7+ with strict types, a Pino logger for structured logging, and a codebase reduced to six source files from more than eighty. It lives in the npm and Node.js ecosystem, requires Node.js 18 or later, and downloads Chromium automatically at install time.

The concrete problem it solves is the gap between WhatsApp as a closed messaging product and the need to drive it from application code. Instead of manually operating a client, a developer calls methods such as create({ session: 'venom-bot' }), scans a QR code once, and then handles inbound events with client.onMessage while sending text, media, documents, stickers, locations, polls and list menus through named send methods. Sessions persist automatically, so a restart does not require rescanning. It replaces the general-purpose browser-automation scripting that developers would otherwise have to build themselves on top of raw Puppeteer.

Key capabilities

  • Messaging coverage includes sendText, sendImage, sendImageFromBase64, sendFile, sendFileFromBase64, sendVoice, sendImageAsSticker, sendImageAsStickerGif, sendLocation, sendLinkPreview, sendContactVcard, sendContactVcardList, sendPollCreation and sendListMenu.
  • Human-like sending through sendTextViaTyping and sendPhotoVideoViaTyping, which attach typing indicators before delivery.
  • Conversation control with reply to an original message id, forwardMessages for batch forwarding, and sendMentioned for user mentions.
  • Data retrieval from the live session: getAllChats, getAllContacts, getUnreadMessages, getAllMessagesInChat, and getProfilePicFromServer.
  • Session persistence out of the box, with automatic saving so QR scanning is a one-time step per session.
  • Multi-session support for scaling, built on a modular architecture designed to be extended.
  • Deployment of the runtime is handled for the user: Chromium is fetched during npm install, and logging goes through Pino rather than ad-hoc console output.

Who uses it and how

  • Developers building WhatsApp chatbots in JavaScript or TypeScript, using the ai and chatbot topics as the intended framing for conversational flows.
  • Customer-service implementations where inbound messages are read through getUnreadMessages and getAllMessagesInChat and answered with text, documents or menu lists.
  • Media and notification pipelines that push images, audio, video and PDFs to chats via sendImage, sendVoice and sendFile.
  • Teams that need several WhatsApp identities at once, using multi-session support rather than running a separate process per account.
  • The README states the library is battle-tested in production by thousands of developers, with 6,580 stars and 1,331 forks on GitHub, and it is part of the Orkestral ecosystem hosted at orkestral.io.

Getting started

Install with npm install venom-bot on Node.js 18 or later; Chromium downloads automatically during install. Nightly builds are available as venom-bot-nightly.tgz from the releases page, and installation from source uses npm install github:orkestral/venom.

How it compares

No comparable or paid alternative products are named in the facts for this entry, and no replacement list is provided, so Venom stands alone in this registry on the evidence available.

When to use it — and when not to

A self-hoster must operate a Node.js 18+ runtime and hold a live WhatsApp Web session tied to a scanned QR code, and the project depends on WhatsApp Web internals that can change outside its control. Version 6 drops puppeteer-extra and stealth plugins, so workarounds for detection are no longer bundled. Choose something else if a supported, officially sanctioned WhatsApp Business API is a requirement, or if the project must run on Node.js versions below 18.

project readme (upstream, from github) — read inline

Venom

Venom v6

The next generation of WhatsApp automation. Completely rebuilt.

npm node downloads build license


Why Venom?

Venom is not just another library. It's a complete automation platform designed from the ground up for performance, reliability, and developer experience.

Built on top of proven technologies, Venom gives you full control over WhatsApp Web through a clean, intuitive API — whether you're building a simple chatbot or a large-scale enterprise solution.

  Blazing fast message processing
  Session persistence out of the box
  Modular architecture — extend with ease
  Multi-session support for scaling
  Battle-tested in production by thousands of developers

What's new in v6

  Rewritten from scratch — cleaner, simpler codebase
  Pure Puppeteer — no puppeteer-extra, no stealth plugins
  Updated WhatsApp Web modules (WAWebSocketModel, WAWebConnModel, etc.)
  Chromium auto-download on npm install
  Node.js 18+ required
  TypeScript 5.7+ with strict types
  Pino logger — fast, structured logging
  Only 6 source files — down from 83+

Install

Requires Node.js 18+. Chromium is downloaded automatically on install.

npm install venom-bot
🧪 Nightly builds
npm install https://github.com/orkestral/venom/releases/download/nightly/venom-bot-nightly.tgz
📦 Install from source
npm install github:orkestral/venom

Quick Start

Get a fully functional bot running in under 30 seconds.

import { create } from 'venom-bot';

create({ session: 'venom-bot' }).then((client) => {

  client.onMessage(async (message) => {
    if (message.body === 'hello') {
      await client.sendText(message.from, 'Hey there! 👋 I\'m running on Venom.');
    }
  });

});

Scan the QR code that appears in your terminal. Done — you're live.

[!TIP] Sessions are saved automatically. No need to re-scan on every restart.


Capabilities

Messaging

Send anything. Text, images, videos, documents, audio, stickers, locations, polls — you name it.

// Text
await client.sendText(chatId, 'Hello from Venom 🕷️');

// Image with caption
await client.sendImage(chatId, './photo.jpg', 'photo', 'Check this out!');

// Image from base64
await client.sendImageFromBase64(chatId, base64Image, 'image');

// Document
await client.sendFile(chatId, './report.pdf', 'report.pdf', 'Monthly report');

// Document from base64
await client.sendFileFromBase64(chatId, base64File, 'file.pdf', 'Description');

// Audio
await client.sendVoice(chatId, './message.mp3');

// Sticker
await client.sendImageAsSticker(chatId, './sticker.png');

// Animated sticker
await client.sendImageAsStickerGif(chatId, './animation.gif');

// Location
await client.sendLocation(chatId, '-23.5505', '-46.6333', 'São Paulo, Brazil');

// Link with auto-preview
await client.sendLinkPreview(chatId, 'https://github.com/orkestral/venom', 'Venom Bot');

// Contact card
await client.sendContactVcard(chatId, '[email protected]', 'John Doe');

// Multiple contact cards
await client.sendContactVcardList(chatId, ['[email protected]', '[email protected]']);

// Poll
await client.sendPollCreation(chatId, {
  name: 'Best framework?',
  options: [{ name: 'Venom' }, { name: 'Others' }],
  selectableOptionsCount: 1
});

// List menu
await client.sendListMenu(chatId, 'Menu', 'Subtitle', 'Choose an option', 'Select', [
  {
    title: 'Category A',
    rows: [{ title: 'Option 1', description: 'First option' }]
  }
]);

Smart Sending

// Send with typing indicator
await client.sendTextViaTyping(chatId, 'This feels more natural...');

// Send photo/video with typing simulation
await client.sendPhotoVideoViaTyping(chatId, './sunset.jpg', 'Beautiful sunset');

// Reply to a message
await client.reply(chatId, 'Got it!', originalMessageId);

// Forward messages
await client.forwardMessages(chatId, [messageId1, messageId2]);

// Mention users
await client.sendMentioned(chatId, 'Hey @5511999999999!', ['5511999999999']);

Data Retrieval

const chats    = await client.getAllChats();
const contacts = await client.getAllContacts();
const unread   = await client.getUnreadMessages();
const messages = await client.getAllMessagesInChat(chatId);
const profile  = await client.getProfilePicFromServer(chatId);
const status   = await client.checkNumberStatus(chatId);
const blocked  = await client.getBlockList();

Group Management

// Create a group
await client.createGroup('Team Chat', ['[email protected]', '[email protected]']);

// Manage participants
await client.addParticipant(groupId, '[email protected]');
await client.removeParticipant(groupId, '[email protected]');

// Admin controls
await client.promoteParticipant(groupId, '[email protected]');
await client.demoteParticipant(groupId, '[email protected]');

// Group info
await client.getGroupMembers(groupId);
await client.getGroupAdmins(groupId);
await client.getGroupInviteLink(groupId);
await client.setGroupDescription(groupId, 'Our awesome group');

// Join via invite
await client.joinGroup(inviteCode);

// Leave
await client.leaveGroup(groupId);

Profile & Device

await client.setProfileStatus('Building something amazing 🚀');
await client.setProfileName('Venom Bot');
await client.setProfilePic('./avatar.jpg');
await client.getHostDevice();
await client.getConnectionState();
await client.getBatteryLevel();
await client.isConnected();
await client.getWAVersion();

Chat Operations

await client.sendSeen(chatId);
await client.startTyping(chatId);
await client.deleteChat(chatId);
await client.clearChatMessages(chatId);
await client.archiveChat(chatId, true);
await client.pinChat(chatId, true);
await client.blockContact(chatId);
await client.unblockContact(chatId);
await client.sendMute(chatId, 30, 'minutes');

Events

Build reactive bots with powerful event listeners.

// Incoming messages
client.onMessage((msg) => { /* handle message */ });
client.onAnyMessage((msg) => { /* all messages including groups */ });

// Message status tracking
client.onAck((ack) => {
  // -7 MD_DOWNGRADE | -6 INACTIVE | -5 CONTENT_UNUPLOADABLE
  // -4 CONTENT_TOO_BIG | -3 CONTENT_GONE | -2 EXPIRED | -1 FAILED
  //  0 CLOCK | 1 SENT | 2 RECEIVED | 3 READ | 4 PLAYED
});

// Connection state
client.onStateChange((state) => {
  // CONFLICT | CONNECTED | DEPRECATED_VERSION | OPENING | PAIRING
  // PROXYBLOCK | TIMEOUT | TOS_BLOCK | UNLAUNCHED | UNPAIRED
});

// Live location
client.onLiveLocation(chatId, (location) => { /* track location */ });

// Group participants
client.onParticipantsChanged(groupId, (event) => { /* member joined/left */ });

// Added to group
client.onAddedToGroup((chat) => { /* handle new group */ });

// Incoming calls
client.onIncomingCall(async (call) => {
  await client.sendText(call.peerJid, "I'm a bot, can't take calls 📞");
});

File Downloads

Download any media received — images, videos, audio, documents. Fast.

import * as fs from 'fs';
import * as mime from 'mime-types';

client.onMessage(async (message) => {
  if (message.isMedia || message.isMMS) {
    const buffer = await client.decryptFile(message);
    const fileName = `file.${mime.extension(message.mimetype)}`;
    fs.writeFileSync(fileName, buffer);
  }
});

Advanced Configuration

Full control over every aspect of the browser and session.

create({
  session: 'production',

  catchQR: (base64Qr, asciiQR, attempts, urlCode) => {
    console.log(`Scan attempt ${attempts}`);

readme truncated — read the full docs on github

Frequently asked questions

Is venom free to use?

venom is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does venom do?

Venom is a high-performance system developed with JavaScript to create a bot for WhatsApp, support for creating any interaction, such as customer service, media

What is venom written in?

venom is primarily written in TypeScript. Its source is publicly available at https://github.com/vynect/venom, and it has 6,580 GitHub stars.