DEV.co
Open-Source Observability · openzipkin

brave

Brave is a mature Java library for distributed tracing that instruments production applications to gather timing data and correlate requests across services. It works with Zipkin backends and third-party services like AWS X-Ray, and is designed to be dependency-free and low-overhead.

Source: GitHub — github.com/openzipkin/brave
2.4k
GitHub stars
715
Forks
Java
Primary language
Apache-2.0
License (OSI-approved)

Key facts

Objective fields from the source. Values we can't verify are shown as “Unknown” rather than guessed.

FieldValue
Repositoryopenzipkin/brave
Owneropenzipkin
Primary languageJava
LicenseApache-2.0 — OSI-approved
Stars2.4k
Forks715
Open issues119
Latest release6.3.1 (2026-03-24)
Last updated2026-03-25
Sourcehttps://github.com/openzipkin/brave

What brave is

Brave provides a dependency-free tracer API (JRE 6+) that intercepts requests, propagates trace contexts via X-B3-TraceId headers, and offers pre-built instrumentation for Servlet, Spring, gRPC, Kafka, and other common components. The library uses provided-scope dependencies to avoid transitive conflicts and maintains multi-version compatibility testing for volatile libraries.

Quickstart

Get the brave source

Clone the repository and explore it locally.

terminalbash
git clone https://github.com/openzipkin/brave.gitcd brave# follow the project's README for install & configuration

Need it deployed, integrated, or customized instead? DEV.co ships production installs.

Best use cases

Microservices observability in Java ecosystems

Instrument multi-service Java applications to trace request flows end-to-end, correlate latency issues, and send data to Zipkin or alternative backends for centralized analysis.

Low-overhead production tracing

Deploy tracing with minimal footprint (< 512 KiB including reporting) in resource-constrained or legacy JRE environments (Java 1.6+), without forcing dependency version conflicts.

Spring and Servlet-based web applications

Rapidly enable tracing in existing Spring Boot or traditional servlet frameworks using pre-tested instrumentation and XML configuration, with support for log correlation via SLF4J.

Implementation considerations

  • Choose instrumentation libraries matching your stack (e.g., okhttp3, grpc, kafka-clients) and align versions using the brave-bom to avoid conflicts.
  • Decide on trace sampling strategy and reporting transport (e.g., async HTTP, Kafka) to balance overhead and data fidelity in production.
  • Plan trace ID propagation across service boundaries; validate that all inbound and outbound request handlers use X-B3-TraceId header parsing and generation.
  • Test context propagation behavior in your thread model (e.g., async frameworks, thread pools); use Brave's context libraries to integrate with SLF4J or other logging frameworks.
  • Monitor reporting pipeline health; dropped or failed trace exports can silently degrade observability if not surfaced.

When to avoid it — and what to weigh

  • Non-JVM distributed tracing requirement — Brave is Java-specific; projects needing multi-language tracing should evaluate language-agnostic alternatives (e.g., OpenTelemetry SDKs for Go, Python, Node.js).
  • No backend infrastructure planned — Brave alone does not store or visualize traces; you must operate Zipkin or configure a third-party exporter, adding operational complexity.
  • Extremely strict zero-dependency constraint — While Brave's core is dependency-free, any realistic deployment (e.g., sending traces to Zipkin) requires a reporting library; ensure your build constraints allow this.
  • Real-time alerting on trace data — Brave instruments and reports traces; it does not provide real-time anomaly detection or alerting—those require downstream analytics in Zipkin or a separate APM tool.

License & commercial use

Apache License 2.0 (Apache-2.0) is a permissive OSI-approved license allowing commercial use, modification, and distribution with attribution and no warranty.

Apache-2.0 permits commercial use without licensing fees. Redistribution requires license notice; no legal review required for typical internal or SaaS deployment. Consult legal if bundling or sublicensing.

DEV.co evaluation signals

Editorial assessment — not user reviews. Directional, with an explicit confidence level.

SignalAssessment
MaintenanceActive
DocumentationAdequate
License clarityClear
Deployment complexityModerate
DEV.co fitStrong
Assessment confidenceHigh
Security considerations

Brave instruments production requests and sends trace data (including headers, spans, tags) to a backend; ensure Zipkin or exporter is network-isolated or uses encrypted transport if tracing PII-adjacent data. No injection vulnerabilities or exploits mentioned in data, but tag sanitization depends on application code. Brave itself is dependency-free, reducing supply-chain attack surface.

Alternatives to consider

OpenTelemetry Java

Language-agnostic, vendor-neutral standard with broader ecosystem support (Jaeger, Datadog, New Relic); requires otel-javaagent or manual instrumentation; heavier than Brave but more flexible backend choices.

Jaeger Java client

Jaeger-specific tracer with similar instrumentation model; tighter integration with Jaeger backend; less suitable for multi-backend scenarios like Brave's X-Ray plugin support.

Micrometer Tracing (Spring)

Spring-native abstraction layer over Brave or OpenTelemetry; simpler if already in Spring Boot ecosystem; ties you to Spring's observability roadmap.

Software development agency

Build on brave with DEV.co software developers

Explore Brave's instrumentation libraries, review the example project, and set up a Zipkin backend to start correlating latency across your services.

Talk to DEV.co

Related open-source tools

Surfaced by semantic similarity across the DEV.co open-source index.

Related on DEV.co

Explore the category and the services that help you build with it.

brave FAQ

Does Brave require Zipkin?
No. Brave instruments tracing; Zipkin is the default backend. Plugins (e.g., zipkin-aws) enable export to Amazon X-Ray or other services.
Can I use Brave with Java 1.5 or older Android?
Brave floor is Java 1.6; you cannot use it with Java 1.5. Some Brave integrations (e.g., Servlet 2.5) may require Java 1.6+.
Will Brave introduce new dependencies to my project?
Brave core is dependency-free. Reporting libraries (e.g., zipkin-sender-urlconnection) have no transitive dependencies; integrations use provided scope, so your app's versions take precedence.
How does Brave handle async or non-blocking code?
Brave provides context libraries (e.g., brave-context-slf4j) to integrate with thread-local or async contexts; custom interceptors may be needed for non-standard async patterns.

Software development & web development with DEV.co

Need help beyond evaluating brave? DEV.co is a software development agency offering software development services and web development for teams of every size. Our software developers and web developers build custom software, web applications, APIs, and open-source observability integrations — and maintain them long-term.

Ready to trace your Java microservices?

Explore Brave's instrumentation libraries, review the example project, and set up a Zipkin backend to start correlating latency across your services.