Skip to content

TimMikeladze/buntrace

Repository files navigation

buntrace

Zero-configuration OpenTelemetry tracing for Bun. buntrace instruments every function, method, and arrow in your application automatically — without decorators, manual spans, or refactoring.

Overview

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.

Installation

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.

Controlling Instrumentation

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.

Exporters

buntrace supports three export targets:

  • OTLP — any OpenTelemetry-compatible collector (Honeycomb, Jaeger, Grafana Tempo, and others) via endpoint and headers.
  • SQLite — local export through bun:sqlite by setting sqlite: "./traces.db". Suitable for development, CI, and offline analysis.
  • Both — configuring both targets simultaneously fans spans out to each.

Configuration

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.

Limitations

  • Generators, getters, setters, and constructors are not instrumented.
  • Minified source is unsupported; directive scanning operates on source lines.
  • Instrumentation targets application code only. node_modules is skipped.

About

Zero-configuration OpenTelemetry tracing for Bun. buntrace instruments every function, method, and arrow in your application automatically — without decorators, manual spans, or refactoring.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors