Skip to main content
bryel is OpenTelemetry-native. If your app already emits OpenInference spans — via an instrumentor or your own instrumentation — add the bryel processor and you’re done. No framework lock-in.
npm i @bryel/sdk-core @opentelemetry/sdk-trace-base

Add the processor

bryelSpanProcessor batches and ships spans to bryel without any mapping:
import { registerOTel } from "@vercel/otel";
import { bryelSpanProcessor } from "@bryel/sdk-core";

registerOTel({
  serviceName: "my-app",
  spanProcessors: [bryelSpanProcessor({ apiKey: process.env.BRYEL_KEY })],
});
That’s it — spans batch and POST to the bryel ingest with Authorization: Bearer <key>.

Custom mapping

If your spans aren’t OpenInference yet, supply a SpanMapper (this is exactly what @bryel/vercel does for the AI SDK):
import { buildSpanProcessor, type SpanMapper } from "@bryel/sdk-core";

const myMapper: SpanMapper = {
  name: "my-framework",
  shouldMap: (span) => span.name.startsWith("my."),
  map: (span) => ({ /* OpenInference attributes to merge */ }),
};

const processor = buildSpanProcessor(myMapper, { apiKey: process.env.BRYEL_KEY });
See @bryel/semconv for the convention constants.