Self-hosted error capture engine — Rust + SvelteKit 5. Sentry SDK compatible (drop-in DSN swap).
Lightweight alternative to Sentry. Capture errors from any Sentry SDK, view them in a real-time dashboard, get webhook alerts. Single binary, SQLite or Postgres, 6MB Docker image.
- Sentry-compatible ingest — Drop-in DSN swap, works with any Sentry SDK (Rust, Python, JS, Flutter, etc.)
- Multi-project support — Web, mobile, API — each with its own DSN and isolated errors
- Project management — Archive, unarchive, rename, rotate DSN, permanent delete
- Real-time dashboard — SvelteKit 5 + Tailwind v4 + shadcn-svelte
- Issue search + filters — Search by title/culprit, filter by status and level, pagination
- WebSocket updates — Live issue feed, no refresh needed
- Blake3 fingerprinting — Automatic error grouping and deduplication
- Alert rules — Per-project condition-based webhooks with cooldown
- Full-text search — LIKE + sqlite_trigram substring search
- OpenAPI docs — Swagger UI at
/api/docs - MCP server — 12 AI agent tools via stdio JSON-RPC
- Tiny Docker image — 5.75MB (scratch + MUSL static binary + rustls)
- Multi-backend database — SQLite (default, zero-config) or Postgres (built-in, no extra flags needed)
- One-command deploy — Docker Compose with persistent volume
docker pull ghcr.io/codecoradev/trapfall:latest
docker run -p 3000:3000 -v trapfall-data:/data ghcr.io/codecoradev/trapfall:latestOr with Docker Compose:
# Clone and run
git clone https://github.com/codecoradev/trapfall.git
cd trapfall
docker compose up -d
# Open http://localhost:3000 → Setup wizardDownload from GitHub Releases:
# Linux (x86_64)
tar xzf trapfall-x86_64-unknown-linux-gnu-v0.0.5.tar.gz
./trapfall --db trapfall.db serve --listen 0.0.0.0:3000# Build frontend
cd web && npm ci && npm run build && cd ..
# Build + run
cargo run --release -p trapfalld -- --db trapfall.db serve --listen 0.0.0.0:3000- Open
http://localhost:3000→ First run shows setup wizard - Create admin account (email, name, password)
- Default project created automatically with DSN
- Copy DSN → integrate with your app
Create separate projects for each app/service:
- Dashboard → Projects → "+ Add Project"
- Name it (e.g., "Web App", "Mobile App", "Backend API")
- Each project gets a unique DSN
- Point each SDK to its own DSN — errors are isolated per project
- Rename: Click ⋮ menu → Rename
- Rotate DSN: Click ⋮ menu → Rotate DSN (old key revoked immediately)
- Archive: Click ⋮ menu → Archive (hides from main view, preserves data)
- Delete: Archive first, then Delete permanently from Archived tab
- Unarchive: Restore archived projects from the Archived tab
Works with any Sentry SDK — just swap the DSN to point to your TrapFall server:
sentry::init(("https://<key>@your-server:3000/<project_id>", sentry::ClientOptions::default()));import sentry_sdk
sentry_sdk.init(dsn="https://<key>@your-server:3000/<project_id>")Sentry.init({ dsn: "https://<key>@your-server:3000/<project_id>" });await SentryFlutter.init((options) => {
options.dsn = "https://<key>@your-server:3000/<project_id>",
});trapfall serve # Start HTTP server (default)
trapfall project add "My App" # Create project (CLI)
trapfall project add "Mobile" mobile # Create project with custom slug
trapfall project list # List projects
trapfall project rotate-dsn app # Rotate DSN key
trapfall healthcheck # Docker healthcheck
trapfall mcp # Start MCP server (stdio)| Env | Default | Description |
|---|---|---|
TRAPFALL_DATABASE_URL |
sqlite:trapfall.db |
Database URL (sqlite: or postgres://, falls back to --db) |
TRAPFALL_LISTEN |
0.0.0.0:9090 |
HTTP listen address (Docker uses 3000) |
TRAPFALL_SECURE_COOKIE |
true |
Set false for HTTP local dev |
TRAPFALL_CORS_ORIGINS |
(empty = allow all) | Comma-separated origins for production |
RUST_LOG |
info |
Log level (debug for verbose) |
See .env.example for full reference.
POST /api/{project_id}/envelope/— Sentry SDK envelope
POST /api/0/setup— First-run setup wizardPOST /api/0/auth/login— LoginPOST /api/0/auth/logout— LogoutGET /api/0/auth/me— Current userPOST /api/0/auth/change-password— Change passwordGET /api/0/projects— List projectsPOST /api/0/projects— Create projectGET /api/0/projects/{slug}— Get projectPATCH /api/0/projects/{slug}— Rename projectDELETE /api/0/projects/{slug}— Delete project (archived only)POST /api/0/projects/{slug}/archive— Archive projectDELETE /api/0/projects/{slug}/archive— Unarchive projectPOST /api/0/projects/{slug}/rotate-dsn— Rotate DSN keyGET /api/0/projects/{slug}/issues— List issues (with filters + pagination)GET /api/0/projects/{slug}/search?q=...— Search issuesGET /api/0/issues/{id}— Get issue detailPOST /api/0/issues/{id}/status— Set issue status (resolved/unresolved/ignored)GET /api/0/issues/{id}/events— List eventsGET /api/0/ws— WebSocket real-time updatesGET /api/0/projects/{slug}/rules— Alert rulesPOST /api/0/projects/{slug}/rules— Create alert ruleDELETE /api/0/rules/{id}— Delete alert rulePOST /api/0/rules/{id}/toggle— Enable/disable ruleGET /api/docs— Swagger UIGET /api/docs/openapi.yaml— OpenAPI spec
GET /health— Health checkGET /metrics— Prometheus metrics
12 tools for AI agents via stdio JSON-RPC 2.0:
list_issues, get_issue, get_event, set_status, search_issues, list_projects, get_project, get_project_stats, list_alert_rules, list_events, rotate_dsn, healthcheck
| Layer | Tech |
|---|---|
| Backend | Rust, Axum 0.8, SQLite + Postgres (sqlx), tokio |
| Frontend | SvelteKit 5, Tailwind v4, shadcn-svelte |
| TLS | rustls (pure Rust, no OpenSSL) |
| Fingerprinting | blake3 |
| Build | Cargo workspace, npm, Docker multi-stage (scratch + MUSL) |
| CI | GitHub Actions (10 checks including Cora Review, Trivy, Cargo Audit) |
HTTP → mpsc(256) → digest(batch=16) → broadcast(64) + webhook(64)
↓
SQLite (WAL, single-writer)
Single binary with embedded SPA via rust-embed. Single-writer SQLite in WAL mode with synchronous=NORMAL. Docker image built on scratch with statically-linked MUSL binary — no OS layer, minimal attack surface.
Full documentation at docs/ (VitePress):
- Getting Started
- Docker Deployment
- Multi-Project Management
- SDK Integration
- Search & Filters
- Alert Rules
- API Reference
- Configuration
- Security
- MCP Server
Apache-2.0