Self-hosted Sentry alternative

Drop-in Sentry replacement.

Keep your SDKs. Change one line: the DSN. Your errors land in one small container you own.

01 · One line

Swap the DSN. Ship.

The official Sentry SDKs post to OpenFault as they are. No fork, no plugin, no wrapper.

  • Rails
  • Next.js
  • Node
  • Python

sentry.client.config.ts

Sentry.init({
-  dsn: "https://[email protected]/56",
+  dsn: "https://[email protected]/1",
   tracesSampleRate: 0,
});

02 · Ingest

Speaks Sentry on the wire.

Same endpoints. Same tools. Your CI scripts keep working.

Envelopes
/envelope/ and /store/, DSN-authenticated. gzip, deflate, br and zstd bodies.
Source maps
sentry-cli sourcemaps upload and the Sentry bundler plugins, including @sentry/nextjs. Debug-ID bundles resolve minified frames to file, line and function.
Scrubbing
Passwords, tokens, cookies, keys and card numbers become [Filtered] before anything is written. IPs are dropped unless you opt in.
Rate limits
Responses carry X-Sentry-Rate-Limits, so SDKs stop sending tracing, replay and session data on their own. Over quota gets 429 with Retry-After, and SDKs back off.
Grouping
Keyed on stack shape, never line numbers. Custom fingerprints and {{ default }} work as in Sentry.

03 · What you get

Less to run. More to use.

A Rust binary and SQLite. No Redis, no Kafka, no Postgres, no ClickHouse.

Containers
1
Database
SQLite
RAM
< 100 MB target
Backup
/data
Daily to S3 or R2.
  • MCP server
  • Live updates
  • TV mode
  • iOS app
  • Teams and roles
  • S3 and R2 backups
  • Email
  • Slack
  • Discord
  • Webhooks

04 · Compare

How it stacks up.

OpenFault numbers are design targets until the first release. A dash means we haven’t checked.

OpenFaultSentry self-hostedBugsink
Containers to run110+1
RAMUnder 100 MB (target)16 GB + 16 GB swap minimum, 32 GB recommended—
RuntimeRust + SQLitePython, Kafka, ClickHouse, Postgres, RedisPython
Sentry SDK compatibleYesYesYes
Source mapsYes, via sentry-cliYesYes, via sentry-cli
Live updates and TV modeYes, SSE——
MCP serverBuilt in, approval-gatedSeparate server—
iOS appWidgets, push, QR pairing (TestFlight soon)——
LicenseMITFSL-1.1-Apache-2.0PolyForm Shield 1.0.0

05 · Not there yet

What it doesn’t do.

Honest list. These are gaps, not choices.

Not doing Tracing, session replay, profiling. On purpose. OpenFault tracks errors. That is the whole job.

Older uploads
Legacy release-name source maps and iOS dSYMs aren’t supported. Debug-ID bundles only.
Releases from CI
sentry-cli releases and deploys succeed but record nothing. Releases come from events.
History
No import. Keep Sentry read-only until you stop needing old issues.
Production
In active development. Run it next to Sentry before you switch Sentry off.

06 · Get started

Running in a minute.

One command, no config. Then paste the new DSN.

  1. Start the container.

    docker run -d -p 8080:8080 -v openfault:/data ghcr.io/openfault/openfault
  2. Open http://localhost:8080. The setup wizard creates your admin account and first project.

  3. Swap the project’s DSN into your Sentry SDK config. Deploy. Read the install guide →

Keyboard shortcuts

c
Copy the install command
t
Toggle theme
g d
Open the docs
?
Show this list