Migrate from Sentry to Belvador
Replace an existing Sentry SDK with the matching Belvador package without reporting errors twice.
On this page
Belvador speaks the same protocol as Sentry, so moving an app over is mostly swapping a package and a DSN. The one rule that matters: only one SDK may report errors — run both and every error arrives twice.
Pick the replacement#
| You have | Replace with | Guide |
|---|---|---|
@sentry/browser | @belvador/browser | Browser |
@sentry/react | @belvador/react | React |
@sentry/tanstackstart-react, or Sentry wired by hand in TanStack Start | @belvador/tanstack-start | TanStack Start |
@sentry/cloudflare | @belvador/cloudflare | Cloudflare Workers |
@sentry/node | keep it, change the DSN and add the scrubbing hook | Node.js |
sentry-sdk (Python) | keep it, change the DSN and add the scrubbing hook | Python |
| Another Sentry SDK | keep it and change the DSN — not verified by Belvador | — |
Steps for JavaScript apps#
Create a project in Belvador and copy its DSN.
Install the Belvador package, pinned to 0.6.1.
Replace imports. The common functions have the same names:
// Beforeimport * as Sentry from "@sentry/react";Sentry.captureException(error);// Afterimport { captureException } from "@belvador/react";captureException(error);Replace
Sentry.initwith Belvador'sinit(orwithBelvadoron Workers), using the setup from the guide. Remove the oldSentry.initcall — Belvador'sinitdoes not take over a client that is already running.Remove every
@sentry/*SDK package frompackage.json(keep@sentry/cliif CI uses it for source maps). Belvador's packages bring their own pinned engine; installing@sentry/*next to them is not needed.Update CSP: replace Sentry's ingest host with
https://ingest.belvador.devinconnect-src.Point CI at Belvador for source maps: keep
sentry-cli, changeSENTRY_URLand the token — see Source maps.Deploy and verify: run the connection check for each runtime and confirm the Connection tab says Verified. A tagged error works with any Sentry SDK, so you can check before switching packages. Then confirm a real error appears once.
Options that change#
| Sentry option | In Belvador |
|---|---|
dsn, release, environment, dist, sampleRate, ignoreErrors, beforeSend, beforeBreadcrumb, maxBreadcrumbs, debug | Same meaning |
allowUrls, denyUrls (browser) | Same meaning |
enabled | Use disabled: true |
integrations, defaultIntegrations | Not accepted; Belvador sets up what it needs. Breadcrumbs are turned on with instrument |
tracesSampleRate, tracePropagationTargets, replaysSessionSampleRate, profilesSampleRate, enableLogs | Not available — the SDKs send errors only. Send traces and logs with OpenTelemetry; link errors across tiers with tracePropagation |
sendDefaultPii | Always off |
tunnel, transport | Not available — events go only to your DSN |
maxValueLength | Fixed at 8,192 characters |
TypeScript points out options that no longer exist.
Behaviour that changes#
setUserkeeps onlyid. Emails, usernames and IP addresses are removed before sending.Automatic breadcrumbs (console, clicks, fetch, XHR, navigation) are off until you turn them on.
Attachments are dropped unless
attachments: true.Sentry.showReportDialogand the boundary'sshowDialogare not available.Request bodies, cookies and auth headers are removed by the SDK and again by your node.
Keeping an existing Sentry SDK#
Any Sentry SDK can send to a Belvador DSN, so you can also just change the DSN. You then keep that SDK's own defaults: it may send tracing data (dropped by your node and counted as Not supported yet), personal data if sendDefaultPii is on, and automatic breadcrumbs. Your node still scrubs before storing. For JavaScript apps the Belvador packages are the safer choice.
Existing issues#
Belvador starts with an empty history: issues and events already in Sentry are not imported. Keep Sentry read-only for a while if you need to look things up.
Posts on this topic
All posts- Sentry alternative for AI-built apps: what to check before you switchPicking a Sentry alternative for an app built with Lovable, Cursor or Claude Code: default data, storage location, proof of delivery and price, tested.
- Sentry SDK migration checklist: test every assumptionMoving off Sentry to a compatible backend? A checklist built from a lab run: which items the Node.js SDK sends, which get dropped, and what to check.
Spotted something wrong or missing? Tell us: hello@belvador.dev