[{"data":1,"prerenderedAt":1379},["ShallowReactive",2],{"navigation_docs":3,"-build-on-top-sse-bridge":421,"-build-on-top-sse-bridge-surround":1374},[4,35,159,201,289,318,405],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,299,304,309,314],{"title":295,"path":296,"stem":297,"icon":298},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F1.identity-headers","i-lucide-fingerprint",{"title":300,"path":301,"stem":302,"icon":303},"Stream API","\u002Fbuild-on-top\u002Fstream-api","5.build-on-top\u002F2.stream-api","i-lucide-radio-tower",{"title":305,"path":306,"stem":307,"icon":308},"SSE bridge","\u002Fbuild-on-top\u002Fsse-bridge","5.build-on-top\u002F3.sse-bridge","i-lucide-wifi",{"title":310,"path":311,"stem":312,"icon":313},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":315,"stem":316,"icon":317},"\u002Fbuild-on-top\u002Frecipes","5.build-on-top\u002F4.recipes","i-lucide-chef-hat",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Adapters","\u002Fadapters","6.adapters",[323,326,366,381],{"title":41,"path":324,"stem":325,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":327,"path":328,"stem":329,"children":330,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[331,336,341,346,351,356,361],{"title":332,"path":333,"stem":334,"icon":335},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":337,"path":338,"stem":339,"icon":340},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":342,"path":343,"stem":344,"icon":345},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":347,"path":348,"stem":349,"icon":350},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":352,"path":353,"stem":354,"icon":355},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":357,"path":358,"stem":359,"icon":360},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":362,"path":363,"stem":364,"icon":365},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":367,"path":368,"stem":369,"children":370,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[371,376],{"title":372,"path":373,"stem":374,"icon":375},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":377,"path":378,"stem":379,"icon":380},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":382,"path":383,"stem":384,"children":385,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[386,391,396,400],{"title":387,"path":388,"stem":389,"icon":390},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":392,"path":393,"stem":394,"icon":395},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":397,"path":398,"stem":399,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":401,"path":402,"stem":403,"icon":404},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":406,"path":407,"stem":408,"children":409,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[410,413,417],{"title":41,"path":411,"stem":412,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":418,"path":419,"stem":420,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":422,"title":305,"body":423,"description":1367,"extension":1368,"links":1369,"meta":1370,"navigation":1371,"path":306,"seo":1372,"stem":307,"__hash__":1373},"docs\u002F5.build-on-top\u002F3.sse-bridge.md",{"type":424,"value":425,"toc":1358},"minimark",[426,441,471,476,486,496,499,711,714,785,792,796,802,823,834,838,843,883,886,900,903,915,919,926,932,996,1003,1007,1065,1072,1076,1314,1323,1327,1354],[427,428,429,430,435,436,440],"p",{},"The Nuxt module ships an opt-in Server-Sent Events endpoint that exposes the ",[431,432,434],"a",{"href":433},"\u002Fbuild-on-top\u002Fstream-api#default-singleton","in-process default stream"," over HTTP. Anything that speaks SSE — a browser tab, a Tauri app, a CLI using ",[437,438,439],"code",{},"fetch",", a curl one-liner — can subscribe to live wide events.",[442,443,446,452,464],"callout",{"color":444,"icon":445},"warning","i-lucide-alert-triangle",[427,447,448],{},[449,450,451],"strong",{},"Local development and long-lived self-hosted servers only.",[427,453,454,455,458,459,458,461,463],{},"The bridge is built on the in-process stream. On serverless platforms (",[449,456,457],{},"Vercel Functions",", ",[449,460,266],{},[449,462,280],{},"…), each request is a separate isolate — the SSE consumer in one isolate will not see events emitted by other isolates, so the stream looks empty in production. Use a real broker (Redis Streams, NATS, Pub\u002FSub…) when you need cross-instance fan-out in serverless.",[427,465,466,467,470],{},"It works perfectly in ",[437,468,469],{},"pnpm dev",", on a Node \u002F Bun \u002F Deno container, on a long-lived VM, or on Fly \u002F Railway-style instances.",[472,473,475],"h2",{"id":474},"enable","Enable",[427,477,478,479,482,483,485],{},"In a Nuxt project the bridge is ",[449,480,481],{},"auto-enabled in dev"," — start ",[437,484,469],{}," and the stream URL is printed at startup:",[487,488,494],"pre",{"className":489,"code":491,"language":492,"meta":493},[490],"language-text","  [evlog] Stream available at http:\u002F\u002Flocalhost:3000\u002Fapi\u002F_evlog\u002Fstream\n","text","",[437,495,491],{"__ignoreMap":493},[427,497,498],{},"No config needed. To override the default, pick the shape that matches your intent:",[487,500,505],{"className":501,"code":502,"filename":503,"language":504,"meta":493,"style":493},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    transport: {\n      \u002F\u002F Auto-on in dev, off in production builds (current default — no config needed).\n      \u002F\u002F stream: undefined,\n\n      \u002F\u002F Boolean shorthand — force-enable in BOTH dev and prod.\n      stream: true,\n\n      \u002F\u002F Explicit off — overrides the dev-mode auto-enable.\n      \u002F\u002F stream: false,\n\n      \u002F\u002F Full configuration.\n      \u002F\u002F stream: {\n      \u002F\u002F   enabled: true,\n      \u002F\u002F   endpoint: '\u002Fapi\u002F_evlog\u002Fstream',\n      \u002F\u002F   token: process.env.EVLOG_STREAM_TOKEN,\n      \u002F\u002F   heartbeatMs: 15_000,\n      \u002F\u002F   buffer: 500,\n      \u002F\u002F },\n    },\n  },\n})\n","nuxt.config.ts","ts",[437,506,507,531,559,570,580,587,593,600,606,620,625,631,637,642,648,654,660,666,672,678,684,690,696,702],{"__ignoreMap":493},[508,509,512,516,519,523,527],"span",{"class":510,"line":511},"line",1,[508,513,515],{"class":514},"s7zQu","export",[508,517,518],{"class":514}," default",[508,520,522],{"class":521},"s2Zo4"," defineNuxtConfig",[508,524,526],{"class":525},"sTEyZ","(",[508,528,530],{"class":529},"sMK4o","{\n",[508,532,534,538,541,544,547,551,553,556],{"class":510,"line":533},2,[508,535,537],{"class":536},"swJcz","  modules",[508,539,540],{"class":529},":",[508,542,543],{"class":525}," [",[508,545,546],{"class":529},"'",[508,548,550],{"class":549},"sfazB","evlog\u002Fnuxt",[508,552,546],{"class":529},[508,554,555],{"class":525},"]",[508,557,558],{"class":529},",\n",[508,560,562,565,567],{"class":510,"line":561},3,[508,563,564],{"class":536},"  evlog",[508,566,540],{"class":529},[508,568,569],{"class":529}," {\n",[508,571,573,576,578],{"class":510,"line":572},4,[508,574,575],{"class":536},"    transport",[508,577,540],{"class":529},[508,579,569],{"class":529},[508,581,583],{"class":510,"line":582},5,[508,584,586],{"class":585},"sHwdD","      \u002F\u002F Auto-on in dev, off in production builds (current default — no config needed).\n",[508,588,590],{"class":510,"line":589},6,[508,591,592],{"class":585},"      \u002F\u002F stream: undefined,\n",[508,594,596],{"class":510,"line":595},7,[508,597,599],{"emptyLinePlaceholder":598},true,"\n",[508,601,603],{"class":510,"line":602},8,[508,604,605],{"class":585},"      \u002F\u002F Boolean shorthand — force-enable in BOTH dev and prod.\n",[508,607,609,612,614,618],{"class":510,"line":608},9,[508,610,611],{"class":536},"      stream",[508,613,540],{"class":529},[508,615,617],{"class":616},"sfNiH"," true",[508,619,558],{"class":529},[508,621,623],{"class":510,"line":622},10,[508,624,599],{"emptyLinePlaceholder":598},[508,626,628],{"class":510,"line":627},11,[508,629,630],{"class":585},"      \u002F\u002F Explicit off — overrides the dev-mode auto-enable.\n",[508,632,634],{"class":510,"line":633},12,[508,635,636],{"class":585},"      \u002F\u002F stream: false,\n",[508,638,640],{"class":510,"line":639},13,[508,641,599],{"emptyLinePlaceholder":598},[508,643,645],{"class":510,"line":644},14,[508,646,647],{"class":585},"      \u002F\u002F Full configuration.\n",[508,649,651],{"class":510,"line":650},15,[508,652,653],{"class":585},"      \u002F\u002F stream: {\n",[508,655,657],{"class":510,"line":656},16,[508,658,659],{"class":585},"      \u002F\u002F   enabled: true,\n",[508,661,663],{"class":510,"line":662},17,[508,664,665],{"class":585},"      \u002F\u002F   endpoint: '\u002Fapi\u002F_evlog\u002Fstream',\n",[508,667,669],{"class":510,"line":668},18,[508,670,671],{"class":585},"      \u002F\u002F   token: process.env.EVLOG_STREAM_TOKEN,\n",[508,673,675],{"class":510,"line":674},19,[508,676,677],{"class":585},"      \u002F\u002F   heartbeatMs: 15_000,\n",[508,679,681],{"class":510,"line":680},20,[508,682,683],{"class":585},"      \u002F\u002F   buffer: 500,\n",[508,685,687],{"class":510,"line":686},21,[508,688,689],{"class":585},"      \u002F\u002F },\n",[508,691,693],{"class":510,"line":692},22,[508,694,695],{"class":529},"    },\n",[508,697,699],{"class":510,"line":698},23,[508,700,701],{"class":529},"  },\n",[508,703,705,708],{"class":510,"line":704},24,[508,706,707],{"class":529},"}",[508,709,710],{"class":525},")\n",[427,712,713],{},"The four accepted shapes:",[715,716,717,733],"table",{},[718,719,720],"thead",{},[721,722,723,727,730],"tr",{},[724,725,726],"th",{},"Value",[724,728,729],{},"Dev",[724,731,732],{},"Production",[734,735,736,751,762,773],"tbody",{},[721,737,738,745,748],{},[739,740,741,744],"td",{},[437,742,743],{},"undefined"," (default)",[739,746,747],{},"enabled",[739,749,750],{},"disabled",[721,752,753,758,760],{},[739,754,755],{},[437,756,757],{},"true",[739,759,747],{},[739,761,747],{},[721,763,764,769,771],{},[739,765,766],{},[437,767,768],{},"false",[739,770,750],{},[739,772,750],{},[721,774,775,780,783],{},[739,776,777],{},[437,778,779],{},"{ enabled: true, ... }",[739,781,782],{},"enabled (with config)",[739,784,782],{},[427,786,787,788,791],{},"The Nitro plugin auto-hooks the default in-process stream into ",[437,789,790],{},"evlog:drain",", so every wide event also flows into any subscriber connected to the SSE route.",[472,793,795],{"id":794},"try-it-in-the-playground","Try it in the playground",[427,797,798,801],{},[437,799,800],{},"apps\u002Fplayground"," ships a live demo. Run:",[487,803,807],{"className":804,"code":805,"language":806,"meta":493,"style":493},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm dev\n# open http:\u002F\u002Flocalhost:3000\u002Fstream\n","bash",[437,808,809,818],{"__ignoreMap":493},[508,810,811,815],{"class":510,"line":511},[508,812,814],{"class":813},"sBMFI","pnpm",[508,816,817],{"class":549}," dev\n",[508,819,820],{"class":510,"line":533},[508,821,822],{"class":585},"# open http:\u002F\u002Flocalhost:3000\u002Fstream\n",[427,824,825,826,829,830,833],{},"You get a live event table with filters, a JSON inspector for each event, and buttons to fire demo requests. Useful to read the page source (",[437,827,828],{},"apps\u002Fplayground\u002Fapp\u002Fpages\u002Fstream.vue",") — it's ~25 lines of ",[437,831,832],{},"EventSource"," glue.",[472,835,837],{"id":836},"endpoint","Endpoint",[427,839,840],{},[437,841,842],{},"GET \u002Fapi\u002F_evlog\u002Fstream",[715,844,845,855],{},[718,846,847],{},[721,848,849,852],{},[724,850,851],{},"Header",[724,853,854],{},"Note",[734,856,857,871],{},[721,858,859,864],{},[739,860,861],{},[437,862,863],{},"Authorization: Bearer \u003Ctoken>",[739,865,866,867,870],{},"Required when ",[437,868,869],{},"token"," is configured",[721,872,873,878],{},[739,874,875],{},[437,876,877],{},"Accept: text\u002Fevent-stream",[739,879,880,881],{},"Set automatically by the browser ",[437,882,832],{},[427,884,885],{},"Query parameters:",[887,888,889],"ul",{},[890,891,892,895,896,899],"li",{},[437,893,894],{},"?since=\u003Ciso>"," — replay buffered events with ",[437,897,898],{},"event.timestamp >= since"," before switching to live mode",[427,901,902],{},"Response:",[887,904,905,910],{},[890,906,907],{},[437,908,909],{},"Content-Type: text\u002Fevent-stream; charset=utf-8",[890,911,912],{},[437,913,914],{},"X-Evlog-Version: \u003Cpackage version>",[472,916,918],{"id":917},"wire-format","Wire format",[427,920,921,922,925],{},"Every SSE ",[437,923,924],{},"data:"," line is a versioned JSON envelope:",[487,927,930],{"className":928,"code":929,"language":492,"meta":493},[490],"data: {\"evlog\":\"1\",\"type\":\"hello\",\"data\":{\"evlogVersion\":\"2.16.0\",\"bufferSize\":500,\"heartbeatMs\":15000}}\n\ndata: {\"evlog\":\"1\",\"type\":\"replay\",\"data\":{...wide event...}}\n\ndata: {\"evlog\":\"1\",\"type\":\"event\",\"data\":{...wide event...}}\n\nevent: ping\ndata: {\"evlog\":\"1\",\"type\":\"ping\",\"data\":{\"t\":1730000000000}}\n",[437,931,929],{"__ignoreMap":493},[715,933,934,944],{},[718,935,936],{},[721,937,938,941],{},[724,939,940],{},"Type",[724,942,943],{},"When",[734,945,946,956,969,979],{},[721,947,948,953],{},[739,949,950],{},[437,951,952],{},"hello",[739,954,955],{},"First frame — server version + stream config",[721,957,958,963],{},[739,959,960],{},[437,961,962],{},"replay",[739,964,965,966],{},"Each buffered event flushed when the client passed ",[437,967,968],{},"?since=",[721,970,971,976],{},[739,972,973],{},[437,974,975],{},"event",[739,977,978],{},"Each new event drained after the connection opened",[721,980,981,986],{},[739,982,983],{},[437,984,985],{},"ping",[739,987,988,989,992,993],{},"Heartbeat every ",[437,990,991],{},"heartbeatMs"," (default 15s), sent with ",[437,994,995],{},"event: ping",[427,997,998,999,1002],{},"The ",[437,1000,1001],{},"evlog: \"1\""," discriminant is the protocol version; future incompatible changes will bump it.",[472,1004,1006],{"id":1005},"security","Security",[715,1008,1009,1019],{},[718,1010,1011],{},[721,1012,1013,1016],{},[724,1014,1015],{},"Mode",[724,1017,1018],{},"Behavior",[734,1020,1021,1033,1046],{},[721,1022,1023,1028],{},[739,1024,1025,1027],{},[437,1026,869],{}," set",[739,1029,1030,1032],{},[437,1031,863],{}," is required",[721,1034,1035,1043],{},[739,1036,1037,1039,1040],{},[437,1038,869],{}," unset, host is ",[437,1041,1042],{},"localhost",[739,1044,1045],{},"Connection allowed (dev convenience)",[721,1047,1048,1055],{},[739,1049,1050,1052,1053],{},[437,1051,869],{}," unset, host is non-",[437,1054,1042],{},[739,1056,1057,1060,1061,1064],{},[437,1058,1059],{},"Origin"," must match ",[437,1062,1063],{},"Host"," (mirrors the ingest endpoint policy)",[427,1066,1067,1068,1071],{},"The endpoint always returns ",[437,1069,1070],{},"404"," when the stream is disabled (production builds without an explicit override) so it's a no-op in environments where you don't want it.",[472,1073,1075],{"id":1074},"minimal-browser-consumer","Minimal browser consumer",[487,1077,1079],{"className":501,"code":1078,"language":504,"meta":493,"style":493},"const es = new EventSource('\u002Fapi\u002F_evlog\u002Fstream')\n\nes.onmessage = (e) => {\n  const envelope = JSON.parse(e.data)\n  if (envelope.evlog !== '1') return\n  if (envelope.type === 'event' || envelope.type === 'replay') {\n    handle(envelope.data)\n  }\n}\n\nes.addEventListener('ping', () => {\n  \u002F\u002F heartbeat — connection alive\n})\n",[437,1080,1081,1110,1114,1143,1172,1204,1247,1262,1267,1272,1276,1303,1308],{"__ignoreMap":493},[508,1082,1083,1087,1090,1093,1096,1099,1101,1103,1106,1108],{"class":510,"line":511},[508,1084,1086],{"class":1085},"spNyl","const",[508,1088,1089],{"class":525}," es ",[508,1091,1092],{"class":529},"=",[508,1094,1095],{"class":529}," new",[508,1097,1098],{"class":521}," EventSource",[508,1100,526],{"class":525},[508,1102,546],{"class":529},[508,1104,1105],{"class":549},"\u002Fapi\u002F_evlog\u002Fstream",[508,1107,546],{"class":529},[508,1109,710],{"class":525},[508,1111,1112],{"class":510,"line":533},[508,1113,599],{"emptyLinePlaceholder":598},[508,1115,1116,1119,1122,1125,1128,1131,1135,1138,1141],{"class":510,"line":561},[508,1117,1118],{"class":525},"es",[508,1120,1121],{"class":529},".",[508,1123,1124],{"class":521},"onmessage",[508,1126,1127],{"class":529}," =",[508,1129,1130],{"class":529}," (",[508,1132,1134],{"class":1133},"sHdIc","e",[508,1136,1137],{"class":529},")",[508,1139,1140],{"class":1085}," =>",[508,1142,569],{"class":529},[508,1144,1145,1148,1151,1153,1156,1158,1161,1163,1165,1167,1170],{"class":510,"line":572},[508,1146,1147],{"class":1085},"  const",[508,1149,1150],{"class":525}," envelope",[508,1152,1127],{"class":529},[508,1154,1155],{"class":525}," JSON",[508,1157,1121],{"class":529},[508,1159,1160],{"class":521},"parse",[508,1162,526],{"class":536},[508,1164,1134],{"class":525},[508,1166,1121],{"class":529},[508,1168,1169],{"class":525},"data",[508,1171,710],{"class":536},[508,1173,1174,1177,1179,1182,1184,1187,1190,1193,1196,1198,1201],{"class":510,"line":582},[508,1175,1176],{"class":514},"  if",[508,1178,1130],{"class":536},[508,1180,1181],{"class":525},"envelope",[508,1183,1121],{"class":529},[508,1185,1186],{"class":525},"evlog",[508,1188,1189],{"class":529}," !==",[508,1191,1192],{"class":529}," '",[508,1194,1195],{"class":549},"1",[508,1197,546],{"class":529},[508,1199,1200],{"class":536},") ",[508,1202,1203],{"class":514},"return\n",[508,1205,1206,1208,1210,1212,1214,1217,1220,1222,1224,1226,1229,1231,1233,1235,1237,1239,1241,1243,1245],{"class":510,"line":589},[508,1207,1176],{"class":514},[508,1209,1130],{"class":536},[508,1211,1181],{"class":525},[508,1213,1121],{"class":529},[508,1215,1216],{"class":525},"type",[508,1218,1219],{"class":529}," ===",[508,1221,1192],{"class":529},[508,1223,975],{"class":549},[508,1225,546],{"class":529},[508,1227,1228],{"class":529}," ||",[508,1230,1150],{"class":525},[508,1232,1121],{"class":529},[508,1234,1216],{"class":525},[508,1236,1219],{"class":529},[508,1238,1192],{"class":529},[508,1240,962],{"class":549},[508,1242,546],{"class":529},[508,1244,1200],{"class":536},[508,1246,530],{"class":529},[508,1248,1249,1252,1254,1256,1258,1260],{"class":510,"line":595},[508,1250,1251],{"class":521},"    handle",[508,1253,526],{"class":536},[508,1255,1181],{"class":525},[508,1257,1121],{"class":529},[508,1259,1169],{"class":525},[508,1261,710],{"class":536},[508,1263,1264],{"class":510,"line":602},[508,1265,1266],{"class":529},"  }\n",[508,1268,1269],{"class":510,"line":608},[508,1270,1271],{"class":529},"}\n",[508,1273,1274],{"class":510,"line":622},[508,1275,599],{"emptyLinePlaceholder":598},[508,1277,1278,1280,1282,1285,1287,1289,1291,1293,1296,1299,1301],{"class":510,"line":627},[508,1279,1118],{"class":525},[508,1281,1121],{"class":529},[508,1283,1284],{"class":521},"addEventListener",[508,1286,526],{"class":525},[508,1288,546],{"class":529},[508,1290,985],{"class":549},[508,1292,546],{"class":529},[508,1294,1295],{"class":529},",",[508,1297,1298],{"class":529}," ()",[508,1300,1140],{"class":1085},[508,1302,569],{"class":529},[508,1304,1305],{"class":510,"line":633},[508,1306,1307],{"class":585},"  \u002F\u002F heartbeat — connection alive\n",[508,1309,1310,1312],{"class":510,"line":639},[508,1311,707],{"class":529},[508,1313,710],{"class":525},[427,1315,1316,1317,1319,1320,1322],{},"That's it — no SDK needed, the browser ships ",[437,1318,832],{},". For Node \u002F Bun consumers, use ",[437,1321,439],{}," with streaming response and parse the same envelope.",[472,1324,1326],{"id":1325},"going-further","Going further",[887,1328,1329,1336],{},[890,1330,1331,1333,1334,1121],{},[449,1332,156],{}," — concrete patterns: build your own devtool, curl + jq inspection, replay-then-live, consumer-side analytics. See ",[431,1335,156],{"href":315},[890,1337,1338,1341,1342,1344,1345,1347,1348,1350,1351,1121],{},[449,1339,1340],{},"Playground demo"," — ",[437,1343,828],{}," is a ~30-line ",[437,1346,832],{}," consumer with a live table, JSON inspector, and code samples per runtime. Run ",[437,1349,469],{}," and visit ",[437,1352,1353],{},"\u002Fstream",[1355,1356,1357],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":493,"searchDepth":533,"depth":533,"links":1359},[1360,1361,1362,1363,1364,1365,1366],{"id":474,"depth":533,"text":475},{"id":794,"depth":533,"text":795},{"id":836,"depth":533,"text":837},{"id":917,"depth":533,"text":918},{"id":1005,"depth":533,"text":1006},{"id":1074,"depth":533,"text":1075},{"id":1325,"depth":533,"text":1326},"Expose the in-process evlog stream over Server-Sent Events for local devtools, dashboards, and any browser tab. Local development and self-hosted only.","md",null,{},{"title":305,"icon":308},{"title":305,"description":1367},"8Vw73USa9rUtXBdRH5PlveABX_GYrLQOQ1e6DDbOHYo",[1375,1377],{"title":300,"path":301,"stem":302,"description":1376,"icon":303,"children":-1},"Subscribe to wide events flowing through evlog, in-process, with createStreamDrain — sync listeners, async iterators, and a ring buffer.",{"title":310,"path":311,"stem":312,"description":1378,"icon":313,"children":-1},"Replay and tail the local NDJSON drain with readFsLogs and tailFsLogs — works in-process or from any external Node tool.",1778333327137]