EmitWave gives developers typed client and server SDKs, signed publishing, channel authorization, presence, and webhooks — one realtime protocol behind every language you ship.
import { Client } from "@emitwave/node"
const emitwave = new Client({
gatewayUrl: "https://api.emitwave.com",
appId: process.env.EMITWAVE_APP_ID,
key: process.env.EMITWAVE_KEY,
secret: process.env.EMITWAVE_SECRET,
})
// HMAC-signs the body, POSTs /apps/{appId}/events
await emitwave.trigger("orders", "order.created", {
id: "ord_123",
total: 4900,
}){
"id": "evt_01HX9K8QW4",
"status": "queued",
"channel": "orders.company_123",
"event": "order.approved",
"created_at": "2026-05-02T18:30:00Z"
}npm install @emitwave/nodeconst emitwave = new Client({
gatewayUrl: "https://api.emitwave.com",
appId: process.env.EMITWAVE_APP_ID,
key: process.env.EMITWAVE_KEY,
secret: process.env.EMITWAVE_SECRET
})await emitwave.trigger("orders", "order.created", {
id: "ord_123",
total: 4900
})HMAC-signed publish of an event to any channel type.
/apps/{appId}/eventsMint a short-lived connection token for a browser socket.
/emitwave/connect-tokenAuthorize a private or presence channel for the current user.
/emitwave/channel-authManage organizations, applications, and per-app settings.
/applications/{id}Create, rotate, and revoke server publishing credentials.
/applications/{id}/credentialsConfigure webhooks and inspect or retry their deliveries.
/applications/{id}/webhooksimport { Client } from "@emitwave/node"
const emitwave = new Client({
appId: process.env.EMITWAVE_APP_ID,
key: process.env.EMITWAVE_KEY,
secret: process.env.EMITWAVE_SECRET,
// gatewayUrl defaults to https://api.emitwave.com
})
// HMAC-signs the body and POSTs /apps/{appId}/events
await emitwave.trigger("orders", "order.created", {
id: "ord_123",
total: 4900,
})EmitWave webhooks call your backend when events are published and as deliveries succeed, fail, or are retried — signed, SSRF-guarded, and replayable.
event.publisheddelivery.succeededdelivery.faileddelivery.retried{
"type": "event.published",
"id": "wh_01HX9K8QW4",
"data": {
"channel": "orders",
"event": "order.created",
"payload": { "id": "ord_123" }
},
"created_at": "2026-05-02T18:35:00Z"
}EmitWave uses HMAC-signed publishing, short-lived connection and subscription tokens, private channel authorization, signed webhooks, and per-application tenancy to protect every request and delivery.
Public keys for browsers, HMAC server credentials for publishing — never mixed.
Authorize users with your own rules before they subscribe.
Verify every webhook request, with SSRF-guarded outbound delivery.
Channels are scoped per application, so tenants never share a stream.
Publishing is rate-limited and size-capped with stable error codes.
// The SDK HMAC-signs method, path, query, and
// a hash of the exact body — no bearer key leaks.
await emitwave.trigger("orders", "order.created", {
id: "ord_123",
total: 4900
})Spin up an isolated test application, mint test credentials, and publish against the live debug console — so you can verify end to end without touching production traffic.
// Publish to a test app and watch it
// arrive in the live debug console.
await emitwave.trigger("orders", "order.created", {
id: "ord_test_1"
})Connect, subscribe, and publish your first signed event end to end.
Read morePublic, private, presence, cache, and encrypted channel types.
Read moreTrack who is online with a live member set and join/leave events.
Read moreHow signed server events reach subscribers through the gateway.
Read moreVerify signatures, handle retries, and process delivery events.
Read moreThe gateway publish endpoint, realtime auth, and management API.
Read moreStream metrics, events, and status changes into dashboards the moment they happen.
Push wallet credits, transfer updates, and balance changes to private per-user channels.
Sync comments, cursors, and edits across everyone viewing the same document.
Broadcast driver location and delivery status to customers and operations in realtime.
Show who is online with presence channels and deliver chat messages instantly.
Fan out job progress, queue depth, and incident status to internal tooling.
Start building realtime channels, presence, and live updates with signed publishing and typed client and server SDKs.