Bloop mascot

Self-hosted error tracking
that won't break the bank

A single Rust binary with SQLite storage. Deploy in seconds, ingest millions of errors, stay in control.

Why Bloop?

📦

Single Binary, Zero Dependencies

One Rust binary. SQLite for storage. No Postgres, no Redis, no Kafka. Deploy a docker run and you're done.

Sub-millisecond Ingestion

Buffered MPSC channel with backpressure. Bloop ACKs instantly and never returns 429s to your clients, even under load.

🧠

Smart Fingerprinting

Normalizes UUIDs, IPs, and numbers before hashing with xxhash3. Groups "Error at 10.0.0.1:5000" and "Error at 192.168.1.2:3000" into one issue.

🔐

Passkey Auth

WebAuthn-based authentication. No passwords to leak, no tokens to rotate. Just your fingerprint or hardware key.

How It Works

Your App
Client SDK
Auth
HMAC-SHA256
Buffer
MPSC Channel
Process
Fingerprint
Write
Batch Writer
Store
SQLite WAL

How Bloop Compares

Bloop Sentry (self-hosted) GlitchTip Self-built
Deploy complexity docker run 23+ containers 3-5 containers You decide
Dependencies None (SQLite) Postgres, Redis, Kafka, Zookeeper, ClickHouse Postgres, Redis Varies
Idle memory ~20 MB 4+ GB ~500 MB Varies
Binary size ~15 MB N/A (multi-service) N/A (Python) Varies
Ingestion auth HMAC-SHA256 DSN tokens DSN tokens Custom
Dashboard auth WebAuthn passkeys Email/password Email/password Custom
Cost Free (MIT) Free (BSL) Free (MIT) Your time

Get Started

One command. That's it.

bash
docker run -d --name bloop \
  -p 5332:5332 \
  -v bloop_data:/data \
  -e BLOOP__AUTH__HMAC_SECRET=your-secret-here \
  ghcr.io/jaikoo/bloop:latest

Then open http://localhost:5332 and register your passkey.