Any language with an OpenTelemetry SDK can send server telemetry — point its OTLP/HTTP exporter at the ingester and add the key as a header.
React / SPA / static sites
Static / serverless: same-origin relay (no backend needed)
Direct browser ingest (https://otlp.autter.dev/v1/browser with autter_rtc_…) is cross-origin and ad-blockers silently drop it. You avoid that loss on static sites by deploying the same-origin relay and keeping the tracker on /api/autter-runtime.
- Cloudflare: deploy
examples/runtime-relay(wrangler deploy), then route/api/autter-runtime*to it. - Vercel: copy
examples/runtime-relay/vercel-edge-route.tstoapp/api/autter-runtime/route.ts. - Init (all relay modes):
POST-only, 64KB cap, Origin forwarded, Cookie stripped, 202 on accept. Set the AUTTER_RUNTIME_KEY secret to forward with your server key.
Without a relay (lossy fallback for pure-static only, publishable client key, origin-restricted):
<AutterErrorBoundary> (from @autter/runtime-next, works in any React app). Vue/Svelte/Angular: call captureException(err) from the framework’s error hook (app.config.errorHandler, handleError, ErrorHandler).
Node.js (Express, Fastify, Koa, NestJS)
Next.js
instrumentation.ts, a relay route, and a client init + boundary. See the package README.
Go
Rust
Python, Java, .NET, or anything else
Standard OpenTelemetry environment variables work with every SDK:exception events (every SDK’s record_exception / RecordError does this) or ERROR status. The ingester parses each language’s native stack format (Go, Rust, Java, .NET, Python, JavaScript), so errors group by function and file, not by message alone — the same defect stays one issue and unrelated errors that share a message stay apart.
Warnings (any language): add an autter.severity attribute to the exception event — "fatal" | "error" | "warning" | "info" (default error; the Node SDK’s crash marker autter.unhandled: true implies fatal). Warnings share the errors table with a severity column, so they group and aggregate identically:
Sampling guidance (all stacks)
Errors are always worth sending; keep successful-trace sampling at ~1% (OTEL_TRACES_SAMPLER_ARG=0.01). Request/usage metrics are derived server-side from spans and the http.server.duration histogram — no extra setup.
No @autter/* package for your language?
Send telemetry with just an OpenTelemetry SDK, a Collector, or a hand-rolled HTTP request.

