Build on top of evlog
evlog is designed to be extended on both ends — you can observe what flows through (without altering the pipeline) or plug into the pipeline itself (sources, enrichers, drains, sinks).
Six focused pages cover every extension surface. Each ships with a ::prompt block you can drop into Cursor / Windsurf to scaffold the integration in your own app.
Mental model
your app code
│
│ emit
▼
┌──────────────────────────────────────────────────────────────────┐
│ evlog pipeline │
│ │
│ request lifecycle → enrich → tail sample → drain │
│ │
└──────────────────────────────────────────────────────────────────┘
│ │
│ observe (no mutation) │ ship
▼ ▼
┌─────────────────────────────────────────┐ ┌─────────────────────┐
│ stream (in-process + SSE bridge) │ │ sinks │
│ fs reader (NDJSON history) │ │ (custom drains, │
│ consumer recipes (devtools, dashboards)│ │ pipeline, fanout)│
└─────────────────────────────────────────┘ └─────────────────────┘
I want to…
| Question | Answer |
|---|---|
| Subscribe to live events (in-process or over SSE for browsers / CLIs) | Stream |
| Replay or tail historic events from disk | FS reader |
Build a small consumer panel, devtool, or pipe to curl + jq | Consumer recipes |
| React to specific events, add derived context, decide what to keep, identify my traffic | Pipeline extension |
| Ship events to a custom backend, batch + retry, fan out to several destinations | Sinks |
| Support a framework that's not in the list, or a non-HTTP runtime | Framework integration |
What works where
Only the stream (in-process bus + SSE bridge) is local-only — it lives inside one Node / Bun / Deno process and does not work on serverless platforms (Vercel Functions, Cloudflare Workers, AWS Lambda). The stream page explains the constraint in detail.
Everything else — FS reader, pipeline extension, sinks, framework integration — runs everywhere evlog runs.
Custom Integration
Build your own evlog framework integration using the toolkit API — defineFrameworkIntegration, createMiddlewareLogger, AsyncLocalStorage, and the full drain/enrich/keep pipeline.
Stream
Subscribe to wide events flowing through evlog — in-process with createStreamDrain, or over the network with the local SSE stream server.