# Capabilities by runtime

> What each runtime can send to Belvador: automatic, you call it, or not possible — and which ones a test proves.

What each runtime can send to Belvador, generated from the same list the SDK tests check. **Automatic** needs no code beyond setup; **You call it** needs a function call in your code; **Not possible** cannot work on that runtime. **Tested** means a test in Belvador's repository runs it; **seen in production** adds the date it was confirmed on a real customer app; **untested** means it follows the same protocol but nobody has run it here yet.

## Errors and connection

| Runtime | Uncaught errors | Errors you send | Connection check | Dropped-data counts |
|---|---|---|---|---|
| Browser (`@belvador/browser`) | Automatic · tested | You call it · tested | You call it · tested | Automatic · tested |
| React (`@belvador/react`) | Automatic · tested | You call it · tested | — | — |
| TanStack Start — browser | Automatic · tested | — | — | — |
| TanStack Start — server | Automatic · tested | You call it · tested | You call it · seen in production 2026-10-19 | — |
| Cloudflare Workers | Automatic · tested | You call it · tested | You call it · tested | — |
| Node.js (`@sentry/node`) | Automatic · tested on a real node 2026-10-27 | You call it · tested | — | — |
| Bun (`@sentry/bun`) | Automatic · tested on a real node 2026-10-27 | You call it · tested on a real node 2026-10-27 | — | — |
| Supabase Edge Functions (`@sentry/deno`) | You call it · tested on a real node 2026-10-27 | You call it · tested on a real node 2026-10-27 | — | — |
| Python (`sentry-sdk`) | Automatic · tested on a real node 2026-10-27 | You call it · tested | — | — |
| Other Sentry SDKs (Go, PHP, Ruby, Java, .NET) | — | You call it · untested, experimental | — | — |

## Background work, traces, source maps

| Runtime | Monitor check-ins | Trace headers | Source maps |
|---|---|---|---|
| Browser (`@belvador/browser`) | Not possible | You call it · tested, experimental | You call it · tested |
| React (`@belvador/react`) | Not possible | — | — |
| TanStack Start — browser | — | You call it · tested, experimental | — |
| TanStack Start — server | You call it · tested | — | — |
| Cloudflare Workers | You call it · tested | You call it · tested | — |
| Node.js (`@sentry/node`) | You call it · tested | You call it · tested | — |
| Python (`sentry-sdk`) | You call it · tested | You call it · tested | — |
| Go (`sentry-go`) | — | You call it · tested | — |
| Java (`sentry-java`) | — | You call it · tested | — |
| HTTP (`curl`) | You call it · tested | — | — |
| Other Sentry SDKs (Go, PHP, Ruby, Java, .NET) | You call it · untested, experimental | — | — |

## Traces and logs (OpenTelemetry)

These rows come from Belvador's certification harness, which runs a real app on each runtime against a full local copy of the pipeline and reads every span and log back; the date and versions are those of the last passing run. **Linked to traces** means log records carried the request's trace id and span id. Setup for each runtime: [OpenTelemetry](https://belvador.dev/en/docs/otel/overview).

| Runtime | Traces | Logs | Tested with |
|---|---|---|---|
| [Node.js (OpenTelemetry, CJS + ESM)](https://belvador.dev/en/docs/otel/node) | Automatic · tested | Automatic · tested · linked to traces | node 22.23.4, @opentelemetry/sdk-node 0.300.0, @opentelemetry/auto-instrumentations-node 0.82.0, pino 10.4.0 (2026-10-24) |
| [Python (OpenTelemetry)](https://belvador.dev/en/docs/otel/python) | Automatic · tested | Automatic · tested · linked to traces | python 3.12.15, opentelemetry-distro 0.66b1, opentelemetry-sdk 1.45.1, flask 3.1.3 (2026-10-25) |
| [Go (OpenTelemetry)](https://belvador.dev/en/docs/otel/go) | You call it · tested | You call it · tested · linked to traces | go 1.27.3, go.opentelemetry.io/otel v1.47.0, otelhttp v0.72.0, otelslog v0.21.0 (2026-10-24) |
| [Java (OpenTelemetry Java agent)](https://belvador.dev/en/docs/otel/java) | Automatic · tested | Automatic · tested · linked to traces | java 21.0.12.1, opentelemetry-javaagent 2.32.0 (2026-10-24) |
| [Deno (built-in OpenTelemetry)](https://belvador.dev/en/docs/otel/deno) | Automatic · tested · no retry on 429/503 | Automatic · tested · linked to traces · no retry on 429/503 | deno 2.6.10 (2026-10-24) |
| [OpenTelemetry Collector](https://belvador.dev/en/docs/otel/collector) | You call it · tested | You call it · tested | otelcol-contrib 0.163.1, telemetrygen v0.163.0 (2026-10-27) |
| [Cloudflare Workers (built-in OTLP export)](https://belvador.dev/en/docs/otel/cloudflare-workers) | Automatic · untested, planned | Automatic · untested, planned | — |
| [Vercel (Trace Drains)](https://belvador.dev/en/docs/otel/nextjs-vercel) | Automatic · untested, planned | Not possible | — |
| [Supabase (OTLP log drain)](https://belvador.dev/en/docs/otel/supabase-log-drains) | Not possible | Automatic · untested, planned | — |

## Notes

- **Monitor check-ins** never come from browsers: Belvador refuses them, so a closed tab is never a failed job. Use a server, a worker or [HTTP check-ins](https://belvador.dev/en/docs/monitors/http).
- **Trace headers** in browsers are experimental: they work, but turn them on per API only after checking its CORS settings — see [Link errors across tiers](https://belvador.dev/en/docs/sdk/tracing).
- **Dropped-data counts** are the SDK's client reports: how many events it dropped and why (rate limit, offline, queue full). They feed the project's Connection tab.
- **Source maps** are uploaded from CI, not sent by the SDK — see [Source maps](https://belvador.dev/en/docs/source-maps).
- Rows marked untested are best effort. If one does not work, tell us at hello@belvador.dev.

For the data each Belvador package sends — and what it drops before anything leaves your app — see [Choose the right SDK](https://belvador.dev/en/docs/sdk/overview).
