Build on top

Build on top of evlog

Live event observation, custom drains, plugins, custom enrichers, framework integration — everything you can wire on top of the evlog pipeline.

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…

QuestionAnswer
Subscribe to live events (in-process or over SSE for browsers / CLIs)Stream
Replay or tail historic events from diskFS reader
Build a small consumer panel, devtool, or pipe to curl + jqConsumer recipes
React to specific events, add derived context, decide what to keep, identify my trafficPipeline extension
Ship events to a custom backend, batch + retry, fan out to several destinationsSinks
Support a framework that's not in the list, or a non-HTTP runtimeFramework 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.