The mental model. Read this once. Refer back when something behaves in a way that surprises you.
CodeRadar has exactly one org: Goodventures. Inside the org are projects; one per shipping product. Each project has its own DSN, quota, alert rules, and member list. Adding a member to the Goodventures Clerk org gets them sign-in, but they only see projects they've been added to. There's no way to create a second org. That's deliberate.
An event is one captured datapoint. Errors, warnings, info, debug, fatal. Events have a level, a message or exception, an environment, a release, optional user and tags, and (almost always) a fingerprint. The wire format is OTLP-compatible and documented in the API reference.
The dedup key. CodeRadar computes a fingerprint per event from (exception.type, exception.value, top-of-stack file + line + function). Events with the same fingerprint group together — that group is what the dashboard calls an issue. When you see "17 events / 3 users" on a row, that's one fingerprint.
You can override the fingerprint by setting fingerprint: ["...", "..."] on the event. Useful when error messages contain dynamic content (e.g., a UUID) that you don't want to bust the group.
A release is a tag for a specific deployment. The convention is project@semver ([email protected]) or project@sha (truecom@a8c2f11). When the SDK is initialized with a release, every event captured during that deploy gets stamped with it. Releases enable:
Free-form. Convention: development, staging, production, preview-*. Alert rules can scope to environment (env:production). The dashboard's environment filter is just a where environment = ? on ClickHouse.
A small datapoint captured before an event. Up to 100 per event. Categories: navigation, http, console, ui.click, ui.input, render, or any custom category you set. The buffer is a ring; oldest crumb is dropped when full. Breadcrumbs are always attached to the captured event — there's no separate query for them.
A trace is a group of spans sharing a trace_id. A span has a name, start, end, optional parent_id, and free-form attributes. CodeRadar uses W3C tracecontext for propagation across services, so a request that crosses 3 services produces 3 spans in 1 trace.
If an event has a trace_id field, the dashboard links it to the trace tree. You can pivot from any error to the full timing waterfall of the request that produced it.
One user per event. Set with setUser({ id, email_hash, segment }) or via the request middleware. Email is hashed (SHA-256) by default; raw emails are scrubbed by the default beforeSend hook. You can override.
A free-form key/value attached to events. Indexed on the ClickHouse side, queryable in the search box (tag.tenant:acme). Use tags for cross-cutting attributes (region, customer, feature flag).
Two knobs: sampleRate (errors; default 1.0) and tracesSampleRate (default 0.0). The error sample rate is almost always 1.0 — losing errors is bad. The trace rate is typically 0.1 to 0.5; full tracing is expensive in event volume.
Adaptive sampling: when the project is over its quota, the server returns an X-CodeRadar-Sample-Rate response header and the SDK temporarily lowers its rate. The SDK still keeps errors at 100% — only traces are sampled down.
A query, a threshold, a list of channels, optional cooldown. Two kinds:
An alert destination. Slack, email, generic webhook, PagerDuty (roadmap), Microsoft Teams (roadmap), SMS (roadmap). Each channel has a type and a target. Channels are project-scoped — the same Slack workspace can have one channel per project.
See the incident workflow on the homepage for the eight-state lifecycle (captured, ingested, alerted, acknowledged, triaged, fix-in-flight, resolved, regressed). All transitions are optional; the system records what happened.
For browser stack traces. Upload at release time via the CLI or the SDK's release hook. The dashboard fetches the right map based on the event's release tag and resolves the stack to original source. Maps are kept for the configured retention window (default 30 days), then deleted.
Format: https://[email protected]/PROJECT_ID. Public keys are write-only, scoped to one project, rate-limited per origin, safe in browser bundles. Rotate from app.coderadar.app/settings/keys.