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 uploadand 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 gets429withRetry-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
- 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.
| OpenFault | Sentry self-hosted | Bugsink | |
|---|---|---|---|
| Containers to run | 1 | 10+ | 1 |
| RAM | Under 100 MB (target) | 16 GB + 16 GB swap minimum, 32 GB recommended | — |
| Runtime | Rust + SQLite | Python, Kafka, ClickHouse, Postgres, Redis | Python |
| Sentry SDK compatible | Yes | Yes | Yes |
| Source maps | Yes, via sentry-cli | Yes | Yes, via sentry-cli |
| Live updates and TV mode | Yes, SSE | — | — |
| MCP server | Built in, approval-gated | Separate server | — |
| iOS app | Widgets, push, QR pairing (TestFlight soon) | — | — |
| License | MIT | FSL-1.1-Apache-2.0 | PolyForm 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 releasesanddeployssucceed 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.
-
Start the container.
docker run -d -p 8080:8080 -v openfault:/data ghcr.io/openfault/openfault Open
http://localhost:8080. The setup wizard creates your admin account and first project.Swap the project’s DSN into your Sentry SDK config. Deploy. Read the install guide →