Zero-configuration OpenTelemetry tracing for Bun. buntrace instruments every function, method, and arrow in your application automatically — without decorators, manual spans, or refactoring.
Instrumenting an existing codebase typically requires wrapping hot paths by hand, debating which code paths to trace, and accepting blind spots across the rest of the application. buntrace eliminates that process by rewriting source at load time, so every function is instrumented before it executes.
Because instrumentation is applied through an AST transform rather than a Proxy or monkey-patch, traced code runs at native speed.
bun add buntrace// preload.ts
import { autoTrace } from "buntrace";
autoTrace({
serviceName: "my-app",
endpoint: "http://localhost:4318/v1/traces",
});# bunfig.toml
preload = ["./preload.ts"]Start your application. Every call emits a span.
By default, buntrace traces every function. To exclude a specific function, add a directive comment:
// @no-trace
function hotPath() { /* skipped */ }To invert the default, set mode: "opt-in". In this mode, only functions annotated with // @trace are instrumented. Directives also apply at the file level when placed on the first line.
For bulk exclusions, pass exclude (file paths) or excludeFunctions (name patterns such as "get*") to autoTrace.
buntrace supports three export targets:
- OTLP — any OpenTelemetry-compatible collector (Honeycomb, Jaeger, Grafana Tempo, and others) via
endpointandheaders. - SQLite — local export through
bun:sqliteby settingsqlite: "./traces.db". Suitable for development, CI, and offline analysis. - Both — configuring both targets simultaneously fans spans out to each.
autoTrace({
serviceName: "my-app",
endpoint: "http://localhost:4318/v1/traces",
headers: { "x-honeycomb-team": process.env.HONEYCOMB_KEY! },
sampleRatio: 0.1,
sqlite: "./traces.db",
mode: "auto", // or "opt-in"
exclude: ["/generated/"],
excludeFunctions: ["toString", "get*"],
});Environment variables OTEL_SERVICE_NAME and OTEL_EXPORTER_OTLP_ENDPOINT are honored as fallbacks.
- Generators, getters, setters, and constructors are not instrumented.
- Minified source is unsupported; directive scanning operates on source lines.
- Instrumentation targets application code only.
node_modulesis skipped.