@eduh_dev021/wappmeow
v0.1.2
Published
High-performance WhatsApp Web TypeScript library
Readme
Stability Notice
@eduh_dev021/wappmeowfollows SemVer: breaking changes ship only in a major release; minors add features, patches fix bugs.
Install
npm install @eduh_dev021/wappmeowZero mandatory runtime dependencies. Pick the optional packages you need on top: a persistent store, the media processor for thumbnails / voice-note metadata, and the native crypto accelerator.
# Persistent store
npm install @eduh_dev021/wappmeow-store-sqlite better-sqlite3
# Optional - thumbnails + waveforms + voice-note normalization
npm install @eduh_dev021/wappmeow-media-utils sharp
# plus a system `ffmpeg` + `ffprobe` on PATH (see media-utils README)
# Optional - Rust crypto accelerator, no code change required
npm install @eduh_dev021/wappmeow-native
# Optional - structured logging
npm install pino pino-pretty@eduh_dev021/wappmeow-native is picked up automatically once installed: the core
resolves it on first use and falls back to the JS implementation when it is
absent, so nothing else changes. It accelerates the two primitives that
dominate the messaging hot path, X25519 ECDH and XEdDSA sign / verify. The
published build is the WASM one (WAPPMEOW_NATIVE_BACKEND=auto tries the NAPI
addon first, then WASM); the compiled NAPI addon is not on npm yet and has
to be built from packages/native. Set WAPPMEOW_NATIVE_BACKEND=js to opt out.
Quick Start
import { ConsoleLogger, createStore, WaClient } from '@eduh_dev021/wappmeow'
import { createSqliteStore } from '@eduh_dev021/wappmeow-store-sqlite'
const store = createStore({
backends: {
sqlite: createSqliteStore({ path: '.auth/state.sqlite' })
},
providers: {
auth: 'sqlite',
signal: 'sqlite',
preKey: 'sqlite',
session: 'sqlite',
identity: 'sqlite',
senderKey: 'sqlite',
appState: 'sqlite',
privacyToken: 'sqlite',
messages: 'sqlite', // 'none' to skip the message archive
threads: 'sqlite', // 'none' to skip
contacts: 'sqlite' // 'none' to skip
}
})
const client = new WaClient({ store, sessionId: 'default' }, new ConsoleLogger('info'))
client.on('auth_qr', ({ qr }) => {
console.log('scan this:', qr)
})
client.on('auth_paired', ({ credentials }) => {
console.log('paired as', credentials.meJid)
})
client.on('message', async (event) => {
if (event.message?.conversation === 'ping') {
await client.message.send(event.key.remoteJid, 'pong')
}
})
await client.connect()That's the minimum to pair, listen for messages, and reply. For everything else - sending media, reactions, polls, groups, newsletters, app-state mutations, business profile, events catalog, store providers, the typed event map, and the architectural reasoning - read the guides at web.lagoshost.com.br/docs.
Packages
The core is @eduh_dev021/wappmeow. Optional packages ship under the @eduh_dev021/wappmeow-* scope — see the table below. Install only what you need.
| Package | Peer dependency | Purpose |
| ---------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| @eduh_dev021/wappmeow-store-sqlite | better-sqlite3 | SQLite persistent store (single-process bots, dev sessions, small-to-medium prod). |
| @eduh_dev021/wappmeow-media-utils | sharp + file-type + ffmpeg | WaMediaProcessor: thumbnails, waveforms, voice-note normalization. |
| @eduh_dev021/wappmeow-native | (none) | Rust crypto accelerator for the messaging hot path (X25519 ECDH, XEdDSA sign / verify). Auto-detected once installed; ships as a WASM build. |
| @eduh_dev021/wappmeow-voip | @roamhq/wrtc + libmlow-wasm | client.voip plugin for calls: MLow/WASM codec, SRTP, STUN, WebRTC/SCTP relay transport. |
| @eduh_dev021/wappmeow-wam | (none) | client.wam plugin emitting the client-side WAM telemetry batches WA Web sends, for wire parity and anti-fingerprinting. |
| @eduh_dev021/wappmeow-fake-server | (none) | In-process fake WhatsApp Web server for end-to-end testing. |
| @eduh_dev021/wappmeow-mcp-server | @modelcontextprotocol/sdk | Dev-only. MCP server exposing multi-session WaClients as dynamic tools for an LLM agent (Claude Code / Cursor / etc.). Not for production. |
Each package's README has the install + config + integration notes.
Documentation
- web.lagoshost.com.br/docs — guides, full API reference, examples and protocol notes
- Per-package READMEs — rendered on each package's npm page
Security
Found a vulnerability in the crypto, auth, or Signal layer? Please do not open a public issue — report it privately via npm support.
License
Disclaimer
This project is an independent implementation for engineering and interoperability research. It is not affiliated with or endorsed by WhatsApp.
