WEBJS

Overview

What is Engine?

WAHA is a Node.js application that acts as a unified “glue layer” on top of multiple community-driven WhatsApp engines.

Under the hood, each engine is an independent open-source library that handles the actual WhatsApp communication:

  • WEBJS and WPP use a real browser (Chromium or Chrome) via Puppeteer
  • NOWEB communicates directly over WebSocket using a Node.js/TypeScript
  • GOWS communicates directly over WebSocket using a Golang library

WAHA wraps all of them behind one consistent REST API and webhook interface, so you can switch engines with a single environment variable change and minimal code adjustments on your side.

If something doesn’t work in one engine — just try another one!

API responses and webhook payloads may differ significantly, test your system before changing the engine!

A WhatsApp API client that connects through the WhatsApp Web browser app. It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.

👉 WAHA uses WhatsApp WebJS engine by default (if you don’t set WHATSAPP_DEFAULT_ENGINE environment variable to another engine).

⚠ Read the article before using WEBJS engine How to avoid blocking ->.

Run WEBJS

# Plus
docker run -v `pwd`/.sessions:/app/.sessions -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha-plus

# Core
docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha

Configuration

You can use the following environment variables to configure the global behavior of the WEBJS engine:

  • WAHA_WEBJS_PUPPETER_ARGS=--single-process - Add custom puppeter arguments so you can test it affects without waiting a new release (use it with cation)

Session Config

You can configure WEBJS-specific options per session via config.webjs.

  • tagsEventsOn — Enable emission of special tag:* engine 🔄 Events - required for presence.update and message.ack.

WARNING: Enabling tagsEventsOn this may have a performance and stability impact. Disabled by default.

{
  "name": "default",
  "config": {
    "webjs": {
      "tagsEventsOn": false
    }
  }
}