Event-driven Node.js framework
Built for a domain, not a framework
Section titled “Built for a domain, not a framework”Controllers never call business logic. They emit domain events; channels decide what happens next. Side effects become observable and replaceable.
Transport lives in brokers. Run the same controllers and channels over HTTP today and over WebSocket or RPC tomorrow — only the adapter wiring changes.
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.
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.
Assert the events a controller emitted. Call a channel handler with a fake context. Because side effects live in channels, your suites stay small.
Install only the packages you need and mount Gland channels next to your existing HTTP layer. There is no big-bang migration.