Platform

One platform for
realtime pub/sub.

EmitWave is the infrastructure layer for realtime: one WebSocket for channels and presence, HMAC-signed publishing, and per-application tenant isolation — behind one protocol and every SDK.

WebSocket channelsPresenceSigned publishingEncryptionWebhooks
Architecture
Signed publish (server SDK)
Gateway · verify · scope · rate-limit
Realtime fan-out
Public
Private
Presence
Encrypted
Browser subscribers · WebSocket
publish.ts
200 OK
await emitwave.trigger(
  "private-company.123",
  "invoice.paid",
  {
    invoice_id: "INV-2026-0042",
    amount: 250000,
    currency: "USD"
  }
)
The realtime layer

Stop running your own WebSocket fleet.

Most teams start by hand-rolling socket servers, presence tracking, auth, and fan-out. EmitWave gives you all of it as managed infrastructure — one protocol to subscribe, authorize, publish, and scale.

Channels over WebSockets

Subscribe the browser to public, private, cache, and encrypted channels over a single connection.

Authorized & encrypted

Private channels run your own authorization rules; encrypted channels get a per-channel key.

Presence

Track who is online with a live member set, join/leave events, and server-signed identity.

Signed publishing

Publish from a trusted server with HMAC-signed requests through typed Node, Go, PHP, and Laravel SDKs.

Event flow

From backend publish to browser subscriber in milliseconds.

01

Publish

Your server calls trigger(channel, event, data) with a server SDK, which HMAC-signs the request.

02

Verify

EmitWave verifies the signature, rate-limits, and validates the payload before accepting the event.

03

Scope

The channel name is scoped to your application so tenants never share a channel.

04

Fan out

The event is pushed to every subscriber bound to that channel over their WebSocket.

05

Observe

Every publish surfaces in the live console and in your delivery metrics.

Modules

Built as modular infrastructure.

Publishing

A signed entry point that accepts HMAC-signed publishes, verifies them, and fans them out to subscribers.

  • Signed requests
  • Server SDKs
  • Rate limiting
  • Payload limits
  • App scoping
  • Stable error codes

Access control

Owns your organizations, applications, and credentials, and authorizes every realtime connection.

  • Connect tokens
  • Channel auth
  • Credentials
  • Rotation
  • Org RBAC
  • App settings

Channels

Low-latency WebSocket streams for dashboards, chat, collaboration, and live workflows.

  • Public channels
  • Private channels
  • Cache channels
  • Connection state
  • bind / bindAll
  • Auto app-scoping

Presence

A live member set with join and leave events, backed by server-signed member identity.

  • Member set
  • member_added
  • member_removed
  • members.me
  • Signed identity
  • Presence cache

Encryption

End-to-end encrypted channels where only authorized subscribers hold the decryption key.

  • Per-channel key
  • Local decrypt
  • Auth-gated keys
  • Ciphertext wire
  • decryption_error
  • No plaintext leak

Observability

A live debug console plus connection, channel, and delivery metrics in your dashboard.

  • Live console
  • Connection metrics
  • Delivery insights
  • Health status
  • Webhooks
  • Delivery history
Developer experience

Developer-first from the first API call.

EmitWave is designed for teams that want a clean API, reliable SDKs, predictable payloads, helpful logs, and simple debugging tools.

import { 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
})

await emitwave.trigger("orders", "order.shipped", {
  order_id: "ORD-9042",
  tracking_number: "DHL-829103",
})
  • Typed client & server SDKs
  • HMAC signing built in
  • Dedicated error types
  • Stable error codes
  • Sandbox testing
  • Signed publish helper
  • Live debug console
  • Delivery metrics
  • Environment overrides
  • Integration test suites
Channel capabilities

One prefix, the right behavior every time.

A channel's prefix decides how it is authorized and delivered. private- requires authorization, presence- adds a member set, cache- replays the latest event, and private-encrypted- adds a per-channel key.

Channel
Channel auth
Presence
Retained
Encrypted
news
cache-prices
private-account.42
presence-room.lobby
presence-cache-room.lobby
private-encrypted-account.42
Reliability & scale

Designed for production workloads.

EmitWave is built for applications where users expect events to arrive instantly and reliably. Signed publishing, rate limiting, health checks, self-healing workers, and tenant isolation are built in.

HMAC-signed publishing

Every publish is verified; unknown, revoked, or stale requests are rejected.

Rate & size limits

Publishing is rate-limited and payload-capped with stable error codes.

Self-healing workers

Queue and scheduler workers carry a restart policy and recover on their own.

Readiness & liveness

Every service exposes health and readiness so orchestration can route safely.

Per-app tenant isolation

Channels are scoped as namespace:app_id.canonical, so tenants never collide.

Cache channels

New subscribers can receive the latest retained event to rehydrate state.

Security

Secure messaging infrastructure by default.

HMAC-signed publishing
Short-lived connection tokens
Per-channel subscription tokens
Private channel authorization
End-to-end channel encryption
Per-app channel scoping
Signed webhooks (SSRF-guarded)
Encrypted transport (TLS 1.3)
Organization RBAC
Credential rotation
Rate & payload limits
Stable error codes
Observability

See every publish and connection.

Events published
24.1M
healthy
Active connections
42.1k
healthy
Active channels
13.9k
healthy
Presence members
6.9k
healthy
Publish p99
19ms
healthy
Rejected (rate)
187
healthy
Webhook success
99.97%
healthy
Delivery p99
24ms
healthy
Live event log
● streaming
[12:30:01]publishpublish private-company.123 → invoice.paid
[12:30:01]authsignature verified
[12:30:02]routescoped namespace:app_1a2b.private-company.123
[12:30:02]realtimefan-out to 18 subscribers
[12:30:03]authchannel-auth presence-room.lobby allowed
[12:30:04]webhookwebhook event.published dispatched 200 OK
Use cases

Built for experiences that cannot wait.

Fintech & Payments

Push wallet credits, transfer status, and balance changes to private per-user channels in realtime.

SaaS Products

Live dashboards, collaborative editing with presence, mentions, and activity feeds.

Collaboration

Sync cursors, comments, and edits across everyone viewing the same document or board.

Marketplaces

Stream order status, inventory, and buyer–seller chat as events the moment they change.

Logistics

Broadcast driver location and delivery status to customers and operations as it happens.

Gaming & live events

Multiplayer state, live scores, presence, and announcements over low-latency channels.

Integrations

Connect EmitWave to your existing stack.

Subscribe from the browser with the JS, React, Next.js, and Vue SDKs, publish from your backend with the Node, Python, PHP, Laravel, Go, Ruby, Rust, and Java SDKs, or talk to the REST API and webhooks directly.

JavaScript
TypeScript
Vue
Nuxt
React
Node.js
Go
PHP
Laravel
Python
Ruby
Rust
Java
Webhooks
REST API
CLI
Comparison

Why teams choose EmitWave.

Instead of a self-hosted socket fleet

Skip running, scaling, and patching WebSocket servers, connection state, and fan-out.

Instead of hand-rolled auth

Get connection tokens, channel authorization, and presence identity as managed primitives.

Instead of per-tenant leakage risk

Channels are scoped per application automatically, so tenants never share a stream.

Instead of blind delivery

Watch publishes in a live console and track connection and delivery metrics in your dashboard.

Build realtime features
without rebuilding infrastructure.

EmitWave gives your application a managed WebSocket for channels and presence, HMAC-signed publishing, and typed client and server SDKs.