A drop-in, self-hosted replacement for Sentry's event ingestion and browsing. Single binary, single SQLite file, no external dependencies.
I got tired of paying for Sentry on smaller projects and self-hosting the official thing is... a lot. The thing is, most of what I need is ingestion, grouping, and a way to browse errors. So I built this — point your existing Sentry SDKs at it, browse errors in the web UI, or query via the JSON API.
- Drop-in Sentry protocol — envelope and legacy store endpoints, all auth methods. Any Sentry SDK works, no code changes.
- Single binary, no dependencies — one process, one SQLite file. PostgreSQL optional.
- Issue grouping — fingerprint-based grouping with regressions and resolution tracking.
- Server-rendered web UI — browse issues, events, transactions, logs, traces, replays, monitors, and more.
- JSON API — query everything the UI shows.
- Notifications & alerts — email (Lettermint, Postmark, or SendGrid), Slack, and webhooks, with digests and threshold rules.
- Source maps — upload via
sentry-cliso minified traces resolve to original source. - Monitors — cron check-in tracking via Sentry's protocol.
- Auth your way — a shared admin token for solo use, or OAuth/OIDC SSO for teams.
- Migrate in — pull historical events, issues, and releases from an existing Sentry instance.
| Method | Command |
|---|---|
| Cargo | cargo install stackpit |
| Homebrew | brew tap franzos/tap && brew install stackpit |
| Debian/Ubuntu | Download .deb — sudo dpkg -i stackpit_*_amd64.deb |
| Fedora/RHEL | Download .rpm — sudo rpm -i stackpit-*.x86_64.rpm |
| Guix | guix install -L <panther> stackpit (Panther channel) |
Pre-built binaries for Linux (x86_64) and macOS (Apple Silicon, Intel) on GitHub Releases.
stackpit init # writes stackpit.toml with a fresh admin_token
stackpit serve # start both ingestion + admin UI
stackpit serve --ingest-only # ingestion only, no admin UI/APIstackpit init generates a random 32-byte admin token and writes it into the config, so the admin UI is usable on first boot without any extra steps.
stackpit runs two listeners:
| Port | Default | Purpose |
|---|---|---|
| Admin | 127.0.0.1:3000 |
Web UI + JSON API (localhost only) |
| Ingestion | 0.0.0.0:3001 |
Receives SDK traffic (all interfaces) |
The admin port serves the browsing UI and API. The ingestion port is where your SDKs send events — it's the address you put in your DSN. I've found that keeping these separate makes deployment quite a bit more flexible.
--ingest-only skips the admin listener entirely, useful if you want dedicated ingestion nodes.
Everything past first boot — the full stackpit.toml reference, PostgreSQL, authentication and OIDC/SSO setup, connecting SDKs, notifications, source maps, monitors, syncing from Sentry, and the CLI — lives in the Operator Guide:
- Configuration — the full config reference, filter modes, PostgreSQL
- Authentication — admin token, OAuth/SSO (OIDC), secret encryption
- Connecting SDKs — supported SDKs and DSN format
- Notifications & Alerts, Source Maps, Monitors, Web UI
- Syncing from Sentry, CLI tools
This project wouldn't be possible without Sentry and is not meant to be a replacement, but rather a lightweight drop-in with limited features. If you need the full power of Sentry — performance monitoring, session replay, profiling, and so on — use the real thing.
Requires Rust 1.88+.
cargo build --release