TypeScript logging library focused on wide events and structured error handling. Bun monorepo.
bun install # install deps
bun run dev # start playground
bun run dev:prepare # generate types
bun run build:package # build the package
bun run test # run tests (vitest)
bun run lint # lint all packages
bun run typecheck # type-check all packages
bun run docs # start docs site
cd packages/evlog && bun run release # publishapps/playground/ Dev environment for testing
apps/docs/ Docus documentation site
packages/evlog/ Main package
src/nuxt/ Nuxt module
src/nitro/ Nitro plugin (v2 + v3)
src/vite/ Vite plugin (evlog/vite)
src/shared/ Toolkit — exposed as evlog/toolkit (NOT evlog/shared)
src/ai/ AI SDK integration (evlog/ai)
src/adapters/ Drain adapters (Axiom, OTLP, HyperDX, PostHog, Sentry, Better Stack, Datadog)
src/enrichers/ Built-in enrichers (UserAgent, Geo, RequestSize, TraceContext)
src/runtime/ Runtime code (client/, server/, utils/)
test/ Tests
.agents/skills/ Internal skills for creating adapters, enrichers, and framework integrations
- All code in TypeScript. Follow existing patterns in
packages/evlog/src/. - JSDoc on all public APIs.
- No HTML comments (
<!-- -->) in Vue templates. README.mdat root is a symlink topackages/evlog/README.md— edit the source directly.evlog/toolkitis the public entrypoint forsrc/shared/. Never useevlog/shared.evlog/browseris deprecated — useevlog/httpinstead.- Hono does not export
useLogger(). Logger access isc.get('log'). - New export? Update both
packages/evlog/package.jsonexports andpackages/evlog/tsdown.config.ts. - Creating a new adapter, enricher, or framework integration? Read the matching skill at
.agents/skills/before starting:.agents/skills/create-adapter/SKILL.md.agents/skills/create-enricher/SKILL.md.agents/skills/create-framework-integration/SKILL.md
Tests live in packages/evlog/test/ and use Vitest.
bun run test # full suite
bunx vitest run test/path/to/file # single test fileWrite tests for all new functionality. Run tests before considering any task done.
A task is complete when all of the following pass:
bun run lintexits 0bun run typecheckexits 0bun run testexits 0- New public APIs have JSDoc
- New exports are registered in
package.jsonandtsdown.config.ts - If adapter/enricher/integration: the corresponding SKILL.md was followed
Always do:
- Run lint, typecheck, and test before reporting done
- Follow existing code patterns — read neighboring files before writing new ones
- Use the skills at
.agents/skills/for new adapters, enrichers, or integrations
Ask first:
- Adding new dependencies
- Changing package exports or build config
- Architectural decisions that affect multiple packages
Never:
- Commit secrets,
.envfiles, or API keys - Skip tests or lint to "fix later"
- Add HTML comments in Vue
<template>blocks - Modify
node_modules/or generated files
- Docs site SSR / duplicate Vue (
vaul-vue,renderSlot/.ce) →patches/README.md(BunpatchedDependencies) - Tests fail after 3 attempts → stop, report the failing test with full output
- Missing dependency → check
package.jsonfirst, then ask - Unsure about architecture → read the relevant SKILL.md or ask
- Unclear requirements → ask a clarifying question before making large speculative changes
You are expected to submit feedback. Report DX friction, documentation gaps, or anything that made your task harder than it should be. When in doubt, report it — no feedback being submitted is itself a problem.
Submit feedback mid-work. Don't wait until the task is done or for the user to ask.
Update this file when you encounter:
- A recurring mistake or easy-to-get-wrong pattern (e.g. Bun
patchthat removes a line frompackage.jsonmust not leave a trailing comma in thedependenciesobject — strict JSON parsers used by Vite/Rollup will fail the build) - Explicit guidance from the maintainer
- A new convention that should be applied consistently