LogTide SDK plugin for Elysia — request tracing and error capture via lifecycle hooks
npm install @logtide/elysia

LogTide plugin for Elysia — automatic request tracing, error capture, and breadcrumbs via lifecycle hooks.
---
- Automatic request spans via onRequest / onAfterHandle lifecycle hooks
- Error capture via onError hook with full request context
- W3C Trace Context propagation (traceparent in/out)
- Breadcrumbs for HTTP requests
- Global plugin — traces all routes automatically
- Designed for Bun — works with Elysia's native runtime
- Full TypeScript support with strict types
``bash`
npm install @logtide/elysiaor
pnpm add @logtide/elysiaor
bun add @logtide/elysia
---
`typescript
import { Elysia } from 'elysia';
import { logtide } from '@logtide/elysia';
const app = new Elysia()
.use(logtide({
dsn: 'https://lp_your_key@your-instance.com',
// Or use apiUrl + apiKey instead of dsn:
// apiUrl: 'https://your-instance.com',
// apiKey: 'lp_your_key',
service: 'my-elysia-api',
environment: 'production',
}))
.get('/hello', () => 'Hello World')
.listen(3000);
`
---
The plugin registers global lifecycle hooks on the Elysia app:
1. onRequest — extracts incoming traceparent, creates a span, stores scope on a WeakMap keyed by the requestonAfterHandle
2. — finishes the span with ok or error, injects traceparent into response headersonError
3. — finishes the span as error, captures the error with full HTTP context
The plugin is registered with .as('global') so it applies to all routes, including those added after the plugin.
---
All ClientOptions from @logtide/core are supported:
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| dsn | string | required | DSN string: https://lp_KEY@host/PROJECT |service
| | string | required | Service name for log attribution |environment
| | string | — | Environment (e.g. production, staging) |release
| | string | — | Release / version identifier |debug
| | boolean | false | Enable debug logging |tracesSampleRate
| | number | 1.0 | Sample rate for traces (0.0 to 1.0) |
See @logtide/core README for the full list of options.
---
Errors thrown by handlers are automatically captured:
`typescript`
const app = new Elysia()
.use(logtide({ dsn: '...', service: 'my-api' }))
.get('/boom', () => {
throw new Error('Something broke');
// Automatically captured with:
// - http.url, http.method
// - Error message and stack trace
// - Span marked as 'error'
});
---
Incoming traceparent headers are extracted and used as parent context:
`bash`Client sends a traced request
curl -H "traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" \
http://localhost:3000/api/data
The span created by the plugin will use the same trace ID, enabling end-to-end distributed tracing across services.
Outgoing responses include a traceparent header with the span's context.
---
`typescript``
import { logtide } from '@logtide/elysia';
import type { LogtideElysiaOptions } from '@logtide/elysia';
---
MIT License - see LICENSE for details.