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, OpenRouter, or local models. Zero-instrumentation proxy mode captures all calls automatically by changing your base URL. Also supports SDK auto-instrumentation for TypeScript/Python. Server-side cost calculation from 2,500+ model pricing with prompt A/B testing.

📱

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 (Apache 2.0) 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 (proxy mode, SDK auto-instrumentation, A/B testing, scoring, search) 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.

Quick LLM Setup (Proxy Mode)

The fastest way to trace LLM calls is using the proxy. Just change your base URL:

bash
# Point your app at bloop instead of OpenAI
export OPENAI_BASE_URL=http://localhost:5332/v1/proxy/openai

# That's it! All calls are now automatically traced
# with tokens, cost, and latency captured server-side.

Or install an SDK for error capture and manual LLM tracing:

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

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

# React Native
npm install @dthink/bloop-react-native

# Python
pip install bloop-sdk

# Ruby
gem install bloop-sdk

# 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("io.github.jaikoo:bloop-client:0.3.0")