Command Palette

Search for a command to run...

Building on a library

Polymorfa vs whatsapp-web.js

whatsapp-web.js drives WhatsApp Web in a headless Chrome browser from Node.js, under the Apache-2.0 license. Each session runs a browser. Polymorfa gives you an HTTP API over a socket-based engine, with the official route beside it.

Choose whatsapp-web.js if

  • You want the WhatsApp Web client itself, driven from Node.js.
  • You are fine running a browser per session.

Choose Polymorfa if

  • You want to avoid running a Chrome process for every number.
  • You need an API, webhooks and customer onboarding without building them.
  • You need calls or official Cloud API numbers.
Build or buy

The library is the start of the work.

A library connects one number in one process. A product also needs an HTTP API, durable session storage, reconnects, signed webhooks, media storage and upgrades when WhatsApp changes.

Polymorfa runs all of that as a service, and adds the official Cloud API route beside it.

WorkYou hostPolymorfa
Servers and a database for session stateYou
Reconnects after drops and restartsYou
Library upgrades when WhatsApp changesYou
Signed webhooks, retries and replayYou
Per-number proxies and pacingYou
Someone on call when numbers disconnectYou
The software can be free. The servers, upgrades and on-call time that keep it running are not.
Migration

Keep the sessions you already run.

Session import is in preview: bring existing Baileys sessions over without asking customers to scan again. whatsmeow imports are assisted by our team.

Session import
  1. Existing session foundyour current auth state
  2. Imported into Polymorfakeys stay encrypted at rest
  3. Connectedno QR rescan on the phone
Bring the sessions you already run. Your customers do not have to find their phones and scan again.
Calls

Calls the libraries do not place.

The libraries surface call events and let you reject calls. whatsmeow's README lists calls as not yet implemented. Polymorfa places and answers voice and video calls on linked-device numbers.

Incoming WhatsApp callcall.received webhook
Polymorfa callsVoice and video, one call object
Browser
Server code
SIP / PBX
Answer in a browser, from server code that reads and writes the audio, or on your own PBX over SIP. The same webhooks follow every call.
Side by side

Polymorfa and whatsapp-web.js, feature by feature.

Hover a feature name for a definition.

Feature
PolymorfaWhatsApp infrastructure API
whatsapp-web.jsNode.js browser library
Connection routes
YesQR code or pairing code
Yes
BetaMeta Embedded Signup; needs beta access
Not applicable
BetaKeep using the WhatsApp Business app
Not applicable
Both routes behind one API
Sends and reactionsEdits, deletes, groups and channels are linked-device only
Not applicable
Pairing code (no camera)
In QuickLink
Yes
Hosted onboarding link for your customers
QuickLink
You build it
Import existing sessions without rescanning
PreviewBaileys sessions; others assisted
You build it
Messaging
Media, polls, reactions, edits, deletes
YesEdits and deletes on linked device
Library primitive
Group management
Linked device
Library primitive
Channels
Linked device
Library primitive
Status posts
Not listed
Library primitive
Message templates
YesSubmitted to Meta for review
Not applicable
Scheduled campaigns
Pro numbers
You build it
24-hour keys
You build it
Hosted message history
Beta
Sync events; storage is yours
Media storage
Hosted
You build it
Calls
Incoming call events
11 call events
Call events, reject
Place and answer calls from code
Browser, server, SIP
Not listed
Video calls
Linked deviceCloud API calls are one-to-one audio
Not listed
SIP trunk to your PBX
Both directions
You build it
Browser calling components
React and web componentPrerelease SDK
You build it
Call history
With quality stats
You build it
Developer experience
REST API with OpenAPI spec
OpenAPI 3.1
In-process library
Official SDKs
TS · Python · Go · PHP · Rust
Node.js only
Official CLI
Prerelease
Not applicable
Signed webhooks with retries
HMAC-SHA256Up to 8 attempts over about 41 hours
You build it
Streaming event feed
SSE, beta
In-process events
Free test environment
Beta test numbers0 credits
Needs a real number
BetaSimulated test numbers
Not listed
Embeddable UI components
Call components
Not listed
Operations and safety
Number health estimate
0–100, rules-basedProduction linked-device numbers
You build it
Typing, pacing and presence controls
Standard and ProEvery setting is off until you turn it on
Presence primitive
Per-number proxy
Not offered
Browser launch option
Customer accounts for SaaS builders
Customers API
You build it
Branded onboarding
Branded QuickLink$50 a month add-on
Not applicable
Team roles and scoped API keys
Roles and scoped keys
You build it
Audit log
With export
You build it
Deployment and pricing
Managed cloud
Yes
You run it
Self-hosting
Not offered
Inside your app
Source license
Proprietary
Apache-2.0
Pricing model
Per online number-day
Free library, you pay hosting
Paid entry price
$0.25 per online dayStandard number; +55 numbers cost 15% less
Not applicable
Free tier or trial
1 project, 1 real numberFree team
Free
Region choice
Not selectable
Wherever you run it

Checked against each vendor's public website and documentation on 24 September 2026. “Not listed” means we did not find the capability on those pages. It does not mean the product lacks it. Prices are list prices shown publicly on that date and exclude Meta's fees and taxes unless stated.

Spotted something out of date? Tell us and we will correct it.

Ship a WhatsApp integration this afternoon.

Free on the sandbox. No credit card. The projects you start here migrate straight into production.