whatsmeow vs whatsapp-web.js

whatsmeow for a production service with many sessions; whatsapp-web.js for a quick single-number bot in JavaScript. If the language change is acceptable, whatsmeow's protocol client, Postgres device store and commit rate are the stronger base. If it is not, the honest next step is a hosted API rather than a rewrite.

Why these two get compared

A Go protocol library against a JavaScript browser-automation library looks like an odd pairing, but it is the comparison teams make when a Node prototype built on whatsapp-web.js has to become a service. whatsmeow is where several of them land, because it removes the browser and the per-session memory bill in one move, at the price of a language change.

Side by side

Dimensionwhatsmeow whatsapp-web.js
LicenseMPL-2.0, a file-level copyleft. Using it inside a hosted service is not distribution.source, checked September 14, 2026 Apache-2.0.source, checked September 16, 2026
Engine and protocolGo library speaking the WhatsApp Web multi-device protocol over a WebSocket. No browser.JavaScript library that drives WhatsApp Web in a headless Chromium through Puppeteer.
HostingYour own Go service with a device store. A first-party Postgres sqlstore ships with the library.Your own Node.js process plus one headless browser per linked number.
Groups, Channels and status Groups and Channels (newsletters) are in the client. Status posting is documented as experimental.source, checked September 14, 2026 Groups (create, participants, invite codes) are in the client. Creating and posting to Channels is not.source, checked September 16, 2026
PricingFree under MPL-2.0. The cost is the Go service, its Postgres device store and the upkeep.source, checked September 14, 2026 Free under Apache-2.0. Hosting is the cost: a browser per session needs far more memory than a protocol client.source, checked September 16, 2026
Maintenance cadence65 commits in the 90 days to 14 September 2026. Continuous releases from the main branch rather than tagged versions.source, checked September 14, 2026 3 commits in the 90 days to 16 September 2026. Latest release v1.34.7 (April 2026), with a v2.0.0-alpha.0 tag. 107 open issues.source, checked September 16, 2026
WebhooksNone built in. Events reach a Go handler you register with AddEventHandler; HTTP delivery is yours to write.None built in. Events arrive on client.on('message') and its siblings; HTTP delivery is yours to write.
SDKs and client codeIt is the client: the Go module go.mau.fi/whatsmeow, with typed events and typed failure codes.source, checked September 14, 2026 It is the client: npm whatsapp-web.js.source, checked September 16, 2026

Which one to pick

Pick whatsmeow when

You are building a long-running service, Go is acceptable, and you want a device store, typed failure codes and no browser in production.

Pick whatsapp-web.js when

You need a working bot today in JavaScript on one or two numbers, and you are not yet sure the project will outgrow a prototype.

Where Wapito fits

Against a library, Wapito is the hosted version of the same idea: the session, the storage, the reconnects and the engine upgrades are ours, and you keep a REST contract you can generate a client from.

Everything the Wapito API does

Frequently asked questions

Is moving from whatsapp-web.js to whatsmeow a rewrite?

Yes, in two senses. The language changes from JavaScript to Go, and the model changes from driving a web client to speaking the protocol, so method names, event shapes and identifier formats all differ. What carries across is your own data: group ids, contact mappings and message history you stored yourself. The linked device is replaced, so each number is paired again.

What does whatsmeow not do that whatsapp-web.js does?

Little that the web client exposes and the protocol does not, because the protocol is the wider surface. The gaps are whatsmeow's own: status posting is documented as experimental, there are no label writes and no catalogue support, and there is no forwarding helper, so forwarding means assembling the message context yourself. whatsapp-web.js tracks whatever the web client can do, which lags mobile-first features but includes forwarding.

Which is safer for the linked number?

Neither transport is inherently safer. WhatsApp restricts numbers for behaviour: bursts of messages from a young number, many cold sends to strangers, and ramping up too quickly. A browser-driven client with careful pacing is safer than a protocol client that blasts a list, and the reverse is equally true. Whichever you choose, build the pacing and warm-up controls before the first campaign.

Related

Try it on your own number

Create a channel, link a WhatsApp number by QR or pairing code, and call the API in a couple of minutes. The Sandbox plan is free and needs no card.