Skip to content

Adapters

autotel-adapters provides easy-to-use ergonomics (withAutotel(), useLogger(), parseError()) while keeping one trace-native stack.

| Adapter | Import | | ---------- | ----------------------------- | | Hono | autotel-adapters/hono | | TanStack | autotel-tanstack | | Next.js | autotel-adapters/next | | Nitro | autotel-adapters/nitro | | Cloudflare | autotel-adapters/cloudflare | | Custom | autotel-adapters/core |

withAutotel() — use when you have NO existing autotel middleware. Creates a span and injects a request logger:

import { withAutotel, useLogger } from 'autotel-adapters/next';
export const POST = withAutotel(async (request) => {
const log = useLogger(request);
log.set({ feature: 'checkout' });
return Response.json({ ok: true });
});

useLogger() alone — use when middleware already creates the span (avoids duplicate spans):

import { otel } from 'autotel-hono';
import { useLogger } from 'autotel-adapters/hono';
app.use('*', otel());
app.get('/orders/:id', (c) => {
const log = useLogger(c);
log.set({ route: c.req.path });
return c.json({ ok: true });
});
import { withAutotel, useLogger, parseError } from 'autotel-adapters/next';
export const POST = withAutotel(async (request: Request) => {
const log = useLogger(request);
log.set({ feature: 'checkout' });
try {
return Response.json({ ok: true });
} catch (error) {
const parsed = parseError(error);
log.set({ error_status: parsed.status, error_why: parsed.why });
throw error;
}
});
import { createUseLogger } from 'autotel-adapters/core';
const useLogger = createUseLogger<{ requestId?: string }>({
adapterName: 'custom-framework',
enrich: (ctx) => ({ request_id: ctx.requestId }),
});
  • example-nextjs — Next.js with autotel-adapters/next and parseError() for client-side error handling.
  • example-nestjs — NestJS with auto-instrumentation and manual trace() in services.
  • example-fastify — Fastify with HTTP and Fastify auto-instrumentation.