Skip to content

franzos/stackpit

Repository files navigation

stackpit

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.

Features

  • 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-cli so 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.

Install

Method Command
Cargo cargo install stackpit
Homebrew brew tap franzos/tap && brew install stackpit
Debian/Ubuntu Download .debsudo dpkg -i stackpit_*_amd64.deb
Fedora/RHEL Download .rpmsudo 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.

Running

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/API

stackpit 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.

Ports

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.

Documentation

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:

Acknowledgements

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.

Building

Requires Rust 1.88+.

cargo build --release

About

A drop-in, self-hosted replacement for Sentry's event ingestion and browsing. Single binary, single SQLite file, no external dependencies.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors