Bugsink 2.0: an API and minor breaking changes


Today’s release introduces a first version of the Bugsink API and cleans up some long-standing rough edges. It’s also the moment where a few old compatibility promises are dropped, so the version number goes to 2.
API
Bugsink now has an API that lets you list issues, events and do some housekeeping from scripts or other tools. The design came out of two discussions:
- people wanting to wire Bugsink into their CI/CD or other workflows.
- first steps towards better LLM and AI integration, including error triage and other forms of automation.
#146 describes the approach: keep it small, prefer clarity over
Sentry-compatibility, lean on Django REST Framework so it fits the rest of the codebase. Endpoints return plain JSON,
with pagination where needed. The layout is flat (/api/canonical/0/*
) to stay stable even if relationships change.
It’s early on purpose; the surface will grow once we see how people use it.
Why 2.0
The main reason for the major version bump is the fact that we introduce breaking changes:
Python 3.9 support has been removed; Bugsink now requires Python 3.10 or newer (upstream support for 3.9 will end in October). This isn’t really expected to be a problem for most users, as Python 3.10 has been out for considerably longer than Bugsink itself. Still, bumping to 2.0 seemed appropriate.
In similar vein, the the requirements for database backends have been raised to match what Django 5.2 supports: SQLite 3.31, MySQL 8.0.11, PostgreSQL 14, MariaDB 10.5.
Finally, the Docker image no longer runs as root. This improves security, but may require changes to your setup if you
mount /data
. (in that case: check that the directory is owned by UID 14237).
Other improvements
A number of smaller changes are also part of this release:
- Better Slack alerts, now also working with Mattermost
- internationalization support and a Chinese translation
vacuum_ingest_dir
management command- Sample
docker-compose
files updated (Alpine Postgres, pinned version tags) - Support for hosting at a subpath
- Stacktrace frame-selection fixed so selecting text no longer toggles the frame
- Dark-mode border default updated
- Dependency bumps: Django 5.2, Tailwind 4, new sourcemap parser
Check the changelog for details relevant to your setup.
Upgrading
Make sure Python is ≥ 3.10 and your database meets the new minimum. With Docker, ensure mounted volumes are writable by UID 14237. If you set a custom ingestion path, Bugsink must own it.
Then upgrade as usual.