Bloop mascot

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

A single Rust binary with SQLite storage. Multi-project support, trend charts, source maps, DuckDB-powered analytics, LLM call tracing, and SDKs for every platform.

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.

📊

Trend Charts & Sparklines

Hourly event timeseries with SVG area charts. Sparklines on every error row show 24-hour trends at a glance.

📂

Multi-Project

Isolate errors per project with scoped API keys. Each project gets its own key, alerts, and source maps.

🗺

Source Maps

Upload source maps and see deobfuscated stack traces. Toggle between original and minified views in the dashboard.

🔑

Scoped API Tokens

Create bearer tokens with granular scopes for CI pipelines, AI agents, and scripts. Project-scoped, SHA-256 hashed, revocable from the dashboard.

🔍

Analytics Engine

Optional DuckDB-powered Insights tab: spike detection via z-scores, top movers, error correlations, release impact scoring, and environment percentile breakdowns. Zero data migration — DuckDB reads SQLite directly.

🤖

LLM Tracing

Works with any LLM provider — OpenAI, Anthropic, Google, Mistral, Cohere, or local models. Track token usage, costs, latency, and errors. Quality scoring, prompt tracking, and LLM-specific alerting.

📱

SDKs for Every Platform

First-party SDKs for Rust, TypeScript, Swift, Kotlin, React Native, Python, and Ruby. Automatic error capture with zero config.

How It Works

Your App
Client SDK
→
Auth
Project Key
→
Buffer
MPSC Channel
→
Process
Fingerprint
→
Enrich
Source Maps
→
Store
SQLite WAL
→
Analyze
DuckDB

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
Multi-project Built-in Built-in Built-in Custom
Source maps Built-in Built-in Limited Custom
Official SDKs 7 platforms 30+ platforms Sentry-compatible None
API tokens Scoped bearer tokens API keys DSN tokens Custom
Analytics Spikes, movers, correlations, releases, envs Built-in (advanced) Basic Custom
LLM tracing Built-in (tokens, cost, latency, scoring, search, prompts) Via integration No Custom
Alert channels Slack, Webhook, Email Slack, Email, PagerDuty, ... Slack, Email, Webhook Custom

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. The Insights and LLM panels appear automatically when their features are enabled.

Install an SDK to start capturing errors automatically:

bash
# Rust (Cargo) — add to Cargo.toml:
# bloop-client = "0.1"

# TypeScript / Node.js
npm install @bloop/sdk

# React Native
npm install @bloop/react-native

# Python
pip install bloop-sdk

# Ruby
gem install bloop

# Swift (SPM) — add to Package.swift dependencies:
# .package(url: "https://github.com/jaikoo/bloop-swift.git", from: "0.3.0")

# Kotlin (Gradle) — add to build.gradle.kts:
# implementation("com.jaikoo.bloop:bloop-client:0.3.0")