
Security News
eMudhra, Brotli, and the Long Tail of a Security Fix
Fixes for eMudhra and Brotli are out. Getting them everywhere they’re needed means tracking down bundled libraries, runtimes, and certificate stores.
@zaxius/baileys
Advanced tools
A WebSockets library for interacting with WhatsApp Web — zaxius fork of Baileys
A WebSockets library for interacting with WhatsApp Web, maintained under the Zaxius brand. This project is a fork built on top of Baileys by WhiskeySockets.
Requires Node.js 20+ (this package is ESM-only; see Import).
From the npm registry (once published):
npm install @zaxius/baileys
Directly from GitHub:
npm install github:MichaelWens/Baileys
Or add it to your package.json manually:
"dependencies": {
"@zaxius/baileys": "github:MichaelWens/Baileys"
}
Already have a bot built on the original @whiskeysockets/baileys and don't want to change every
require/import in your codebase? Alias the dependency name instead, so the original package
name points to this fork:
"dependencies": {
"@whiskeysockets/baileys": "github:MichaelWens/Baileys"
}
With this alias, keep using require('@whiskeysockets/baileys') in your code as-is — npm will
resolve it to this fork under the hood.
You can also pin to a specific branch or commit:
npm install github:MichaelWens/Baileys#main
ESM (works on every supported Node.js version):
import makeWASocket, { Browsers, DisconnectReason } from '@zaxius/baileys';
CommonJS: the package is ESM-only, so require() only works on Node.js 22.12+ or 20.19+
(Node's require(esm) support). On older versions use import instead.
const {
default: makeWASocket,
// other exports
} = require('@zaxius/baileys');
const {
default: makeWASocket,
Browsers
} = require('@zaxius/baileys');
const client = makeWASocket({
browser: Browsers.zaxius('Chrome')
});
// `printQRInTerminal` is deprecated: the QR string now arrives via connection.update.
// Render it with your own QR library (e.g. qrcode-terminal) if you want it in the terminal.
client.ev.on('connection.update', ({ connection, qr }) => {
if (qr) console.log('Scan this QR string:', qr);
if (connection === 'open') console.log('Connected');
});
const {
default: makeWASocket,
fetchLatestWaWebVersion,
Browsers
} = require('@zaxius/baileys');
async function start() {
// fetchLatestWaWebVersion() resolves to { version, isLatest, error? }
const { version } = await fetchLatestWaWebVersion();
const client = makeWASocket({
browser: Browsers.zaxius('Chrome'),
printQRInTerminal: false,
version,
aiLabel: false // set true to show an AI label on messages sent by the bot
// other options
});
const number = "628XXXXXXXXXX";
const code = await client.requestPairingCode(number.trim()); // or (number, "YYYYYYYY") for a custom pairing code
console.log("Your pairing code: " + code);
}
start();
const {
default: makeWASocket,
makeInMemoryStore
} = require('@zaxius/baileys');
const pino = require('pino');
const store = makeInMemoryStore({
logger: pino().child({ level: 'silent', stream: 'store' })
});
const client = makeWASocket({
// options
});
store.bind(client.ev);
client.ev.on('contacts.upsert', () => {
console.log('New contact: ' + Object.values(store.contacts()));
});
noSelfSyncnoSelfSync is a relayMessage option (private/1-on-1 chats only) that controls whether the
message is also synced to your other own linked devices (other phones/WhatsApp Web sessions
logged into the same account). It does not affect delivery to the recipient.
noSelfSync: true — the message is sent to the recipient as normal, but is not synced
to your other own devices. Useful when you don't want a message to show up on your other
linked sessions (e.g. silent/automated sends from a bot account).noSelfSync: false (default) — normal behavior. The message is sent to the recipient and
also synced to your other own devices, so it appears everywhere you're logged in, just like
sending from the official WhatsApp app.// Sent to the recipient, but NOT synced to your other devices
await client.relayMessage(m.chat, {
conversation: "Hello from Zaxius"
}, {
noSelfSync: true
});
// Sent to the recipient AND synced to your other devices (default behavior)
await client.relayMessage(m.chat, {
conversation: "Hello from Zaxius"
}, {
noSelfSync: false
});
// Also works through sendMessage
await client.sendMessage(m.chat, {
text: "Hello from Zaxius"
}, {
noSelfSync: true
});
const fs = require('fs');
const thumbnail = fs.readFileSync('./zaxiusthumb.jpg');
await client.sendMessage(m.chat, {
thumbnail,
message: "Order summary",
orderTitle: "My Store",
totalAmount1000: 72502,
totalCurrencyCode: "IDR"
}, { quoted: m });
await client.sendMessage(m.chat, {
pollResultMessage: {
name: "My Poll",
options: [
{ optionName: "Option 1" },
{ optionName: "Option 2" }
],
newsletter: {
newsletterName: "0X8 - Society",
newsletterJid: "120363424944937940@newsletter"
}
}
});
await client.relayMessage(m.chat, {
productMessage: {
title: "Product.pdf",
description: "Product description",
thumbnail: { url: "./zaxiusthumb.jpg" },
productId: "EXAMPLE_TOKEN",
retailerId: "EXAMPLE_RETAILER_ID",
url: "https://example.com",
body: "Body text",
footer: "Footer",
buttons: [
{
name: "cta_url",
buttonParamsJson: "{\"display_text\":\"Visit\",\"url\":\"https://example.com\"}"
}
],
priceAmount1000: 72502,
currencyCode: "IDR"
}
});
await client.sendMessage(m.chat, {
image: { url: "./zaxiusimg.jpg" },
text: "body",
title: "title", // required when sending media
footer: "footer",
interactiveButtons: [
{
name: "single_select",
buttonParamsJson: JSON.stringify({
title: "\0"
})
}
],
messageParams: JSON.stringify({
bottom_sheet: {
/** other params **/
}
})
});
await client.sendMessage(m.chat, {
groupLabel: {
labelText: "Tagged members appear here"
}
});
await client.sendMessageMembers(m.chat, {
extendedTextMessage: {
text: "Hello members"
}
}, {});
await client.sendText(m.chat, "Hello!", {
contextInfo: {
mentionedJid: [m.chat]
}
}, {
key: {
remoteJid: "status@broadcast",
participant: m.sender,
fromMe: true
},
message: {
conversation: "\0"
}
});
await client.sendImage(m.chat, { url: "./zaxiusimg.jpg" }, "Caption", {
contextInfo: {
mentionedJid: [m.chat]
}
}, {
key: {
remoteJid: "status@broadcast",
participant: m.sender,
fromMe: true
},
message: {
conversation: "\0"
}
});
await client.sendVideo(m.chat, { url: "./video.mp4" }, "Caption", {
contextInfo: {
mentionedJid: [m.chat]
}
}, {
key: {
remoteJid: "status@broadcast",
participant: m.sender,
fromMe: true
},
message: {
conversation: "\0"
}
});
await client.sendAudio(m.chat, { url: "./zaxiusaudio.mp3" }, {
contextInfo: {
mentionedJid: [m.chat]
}
}, {
key: {
remoteJid: "status@broadcast",
participant: m.sender,
fromMe: true
},
message: {
conversation: "\0"
}
});
await client.sendLocation(m.chat, "Caption", 90.0, 90.0, "https://example.com", "1234567890", {
contextInfo: {
mentionedJid: [m.chat]
}
}, {
key: {
remoteJid: "status@broadcast",
participant: m.sender,
fromMe: true
},
message: {
conversation: "\0"
}
});
await client.sendPoll(m.chat, "Pick one", ["1", "2", "3"], true, {
contextInfo: {
mentionedJid: [m.chat]
}
}, {
key: {
remoteJid: "status@broadcast",
participant: m.sender,
fromMe: true
},
message: {
conversation: "\0"
}
});
await client.sendQuiz(m.chat, "Quiz question", ["1", "2", "3"], "2", {
contextInfo: {
mentionedJid: [m.chat]
}
}, {
key: {
remoteJid: "status@broadcast",
participant: m.sender,
fromMe: true
},
message: {
conversation: "\0"
}
});
await client.statusMention(m.chat, {
extendedTextMessage: {
text: "Mentioned in status"
}
});
Zaxius is a fork of Baileys, originally created by Adhiraj Singh and maintained by the WhiskeySockets community. All credit for the underlying protocol implementation goes to the original authors and contributors. See LICENSE for the full license text and copyright notices.
See CONTRIBUTING.md for guidelines on reporting issues and submitting pull requests.
This is not an official WhatsApp product. Use of this library to send bulk or unsolicited messages may violate WhatsApp's Terms of Service and can result in your number being banned. Use responsibly.
FAQs
A WebSockets library for interacting with WhatsApp Web — zaxius fork of Baileys
The npm package @zaxius/baileys receives a total of 0 weekly downloads. As such, @zaxius/baileys popularity was classified as not popular.
We found that @zaxius/baileys demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Fixes for eMudhra and Brotli are out. Getting them everywhere they’re needed means tracking down bundled libraries, runtimes, and certificate stores.

Threat Research
/Security News
Socket uncovered secret-stealing workflows that ran in LiteLLM’s GitHub repository 11 days before the supply chain attack on PyPI and Docker.

Security News
Cloudflare introduces tsrs, a Rust port of TypeScript’s compiler promising faster checks and lower memory use, with the TypeScript team’s help.