Skip to content

PubSubJS

Build real-time applications with confidence using type-safe, schema-validated publish/subscribe patterns.

Type-Safe

Full TypeScript support with inferred types for events, payloads, and handlers. Catch errors at compile time.

Schema Validation

Validate payloads at runtime using Zod, Valibot, or any Standard Schema compatible library.

Transport Agnostic

Use WebSocket, Redis, SSE, or create your own transport. Switch transports without changing your code.

Middleware Support

Add logging, rate limiting, idempotency, and more with composable middleware for both publishing and subscribing.

import { z } from "zod";
import { defineEvent, Publisher, Subscriber } from "@pubsubjs/core";
import { WebSocketServerTransport } from "@pubsubjs/transport-websocket";
// Define type-safe events with schemas
const events = defineEvent([
{
name: "user.created",
schema: z.object({
userId: z.string(),
email: z.string().email(),
}),
},
]);
// Create transport
const transport = new WebSocketServerTransport({ port: 8080 });
// Publish events
const publisher = new Publisher({ events, transport });
await publisher.publish("user.created", {
userId: "123",
email: "user@example.com",
});
// Subscribe to events
const subscriber = new Subscriber({ events, transport });
subscriber.on("user.created", (payload) => {
console.log(`New user: ${payload.email}`);
});
await subscriber.subscribe();
PackageDescription
@pubsubjs/coreCore pub/sub functionality, types, and middleware
@pubsubjs/transport-websocketWebSocket transport for browser and server
@pubsubjs/transport-redisRedis transport for distributed systems
@pubsubjs/transport-sseServer-Sent Events transport
@pubsubjs/reactReact hooks and components