Bugsink is an open-source, self-hosted error tracking tool designed for developers who want full control over their error data while maintaining compatibility with Sentry’s SDKs. It solves the problem of expensive hosted error tracking services by offering a drop-in replacement that runs on your own infrastructure, reducing costs at scale while preserving feature parity. Built in Python with Django and PostgreSQL, it supports Docker-based deployment and integrates seamlessly with existing Sentry-configured applications.
Bugsink’s ecosystem is centered around compatibility: it accepts events from Sentry SDKs for Python, JavaScript, Node.js, Ruby, Java, and more. It can be deployed via Docker, Kubernetes, or bare metal, and supports sourcemaps, alerting, and advanced search. Users can switch between self-hosted and hosted plans without changing their instrumentation code.
What You Get
- Sentry SDK Compatibility - Fully supports Sentry’s open-source SDKs for Python, JavaScript, Node.js, Ruby, Java, and other languages; simply update your DSN to point to your Bugsink instance.
- Stacktrace with Local Variables - Captures and displays local variable values at the time of exception, enabling deeper debugging without requiring log statements.
- Issue Grouping - Automatically groups similar errors into issues, reducing noise and helping teams prioritize fixes instead of sifting through duplicate events.
- Sourcemaps Support - Maps minified or transpiled code back to original source files, showing readable stack traces even in production builds.
- Alerting System - Notifies teams via email when new errors occur or when error rates spike, eliminating the need to wait for user reports.
- Self-Hosted Deployment - Run on your own servers with Docker, Kubernetes, or bare metal; no per-event fees, full data control, and compliance with GDPR and internal security policies.
Common Use Cases
- Replacing Sentry to cut costs - A SaaS company processing millions of errors monthly switches from Sentry to Bugsink to reduce their error tracking bill by 80% while keeping the same SDKs and workflows.
- Compliance-driven error monitoring - A financial institution requires all data to stay on-premises; Bugsink enables them to track application errors without sending sensitive logs to third parties.
- Small team with limited DevOps resources - A startup uses Docker Compose to deploy Bugsink in under 10 minutes, gaining full error tracking without hiring a dedicated infrastructure engineer.
- ARM-based infrastructure - A team running services on Raspberry Pi or AWS Graviton instances uses Bugsink because it supports ARM64 architecture, unlike some competing tools.
Under The Hood
Architecture
- Django-based monolithic structure with well-defined modules for API, event ingestion, issue tracking, and background processing, enabling clear separation of concerns
- Dependency injection via Django’s app registry and custom CLI utilities that decouple operational tasks from web server logic
- Event pipeline pattern implemented across ingest and background workers, with normalized processing and routing to storage or alerting systems
- Custom command-line tools and Docker multi-stage builds enforce production-grade deployment, including user isolation and environment-driven configuration
- Database schemas are explicitly separated between core and background systems, with plugin-like extensions for external compatibility
Tech Stack
- Python backend powered by Django and DRF, with comprehensive API documentation via drf-spectacular and modular app organization
- PostgreSQL serves as the primary database, managed through Django migrations with Docker-based health checks and connection pooling
- Docker deployment uses optimized multi-stage builds with pre-compiled native dependencies to minimize image size and improve startup time
- Gunicorn serves as the WSGI server, coordinated with monofy for automated pre-start checks and service initialization
- Build system leverages setuptools_scm for versioning and ruff for strict, file-aware linting across the codebase
Code Quality
- Extensive test coverage across unit, integration, and API layers, with custom test utilities to handle framework-specific state issues
- REST API testing follows consistent patterns with structured assertions on authentication, permissions, and response shapes
- Error handling is systematic, using Django’s validation mechanisms and explicit HTTP status codes to define clear client contracts
- Naming conventions and test organization are deliberate and descriptive, with factory patterns ensuring reliable test data generation
- Type safety and data structure integrity are enforced through models and serializers, minimizing ad-hoc validation logic
What Makes It Unique
- Direct ingestion of Sentry’s event schema without intermediary relays enables low-latency, high-fidelity error capture
- Strategic reuse of Sentry’s event.schema.json under MIT license, with version tracking and clear attribution, creates a legally sound foundation
- Schema validation is treated as a living contract, ensuring evolutionary compatibility with Sentry’s evolving ecosystem
- Explicit documentation of schema divergences demonstrates intentional architectural decisions rather than blind replication
- Transparent licensing and ethical reuse practices set a benchmark for responsible integration of open-source telemetry standards