Skip to content

Event-driven Node.js framework

Event-driven, protocol-agnostic and TypeScript-first. Controllers emit, channels act, brokers carry the transport.
Event-driven by default

Controllers never call business logic. They emit domain events; channels decide what happens next. Side effects become observable and replaceable.

Protocol-agnostic

Transport lives in brokers. Run the same controllers and channels over HTTP today and over WebSocket or RPC tomorrow — only the adapter wiring changes.

Tiny primitives

The emitter is three methods and a couple of kilobytes. The broker adds channels, mesh networking and async watchers on top of it. Nothing is hidden.

TypeScript-first

Event names and payload shapes live in one typed map. A renamed event or a changed payload is a compile error, not a production incident.

Testable by construction

Assert the events a controller emitted. Call a channel handler with a fake context. Because side effects live in channels, your suites stay small.

Gradually adoptable

Install only the packages you need and mount Gland channels next to your existing HTTP layer. There is no big-bang migration.