Sixteen months and close to 300 commits after v0.10.1, git-bug v0.11.0 is available.

This release is about two things. The obvious one is a new web UI, rewritten from scratch and far more capable than the one it replaces. The less obvious one is a deep pass on correctness, which closes a handful of long standing bugs.

A new and more powerful web UI

The old web UI could show you issues. The new one is meant to be the way you actually work with them.

You can browse, search, filter and paginate issues, open new ones, comment, edit comments, retitle, change labels and status, and look at a user's profile and their issues. Filters live in the URL, so any view you are looking at is a link you can send to someone. There are four themes — light and dark, each in a soft and a hard variant — and if you serve several repositories, a picker to move between them.

The longer term goal is a web UI you can expose publicly: a portal where anyone hitting a problem with your project can read the issues and file one, without installing git-bug and without an account on someone else's platform. That needs external authentication, which is not here yet. What is here is an interface that is finally good enough to put in front of people, and that is the harder half.

A code browser

The web UI now doubles as a code browser for the repository it serves: a file tree, syntax-highlighted files with linkable line ranges, rendered markdown with relative links and images resolved against the repo, commit history scoped to a file or a directory, commit details with collapsible diffs, and a branch and tag selector.

This is not just a frontend feature. The backend learned to browse the repository — refs, trees, blobs, commit history, diffs — and all of it is exposed over the same GraphQL API, plus an HTTP endpoint serving raw file content. Anything the UI can show you, your own tooling can query.

This opens the ways for more powerful features like code review, as well as exposing the webui publicly to accept external contribution.

Correctness

The other half of this release is much less visible and, arguably, more important.

The cache sits between the stored entities and everything else, and it had a number of subtle problems: races when one entity resolved another, a commit path that was not atomic, stale or incomplete operation metadata, an index not updated on merge, and labels shared between two representations of the same bug. Individually they are small. Together they meant that under the right sequence of operations, git-bug could hand you data that did not match what was stored.

Two of them had user-visible consequences that had been reported and never explained:

- #1582 — pushing to GitHub and pulling back duplicated every comment. Bugs deduplicated correctly, comments did not, because the metadata written during the export was not fully visible on the next read.

- #1003 — git bug usercould not adopt an identity, because the cache demanded a user identity long before it actually needed one.

Forward compatibility

git-bug now keeps unknown operations instead of dropping them. If a newer version — or another implementation — writes an operation type this binary does not understand, the raw data is preserved and written back untouched.

Previously, reading and re-writing a bug with an older binary would quietly destroy anything it did not recognize. That made every future addition to the data model a compatibility hazard. It no longer is.

A specification

The on-disk format now has a formal specification, covering the DAG entity format, identities and the bug entity. It lives in its own repository so it can be versioned and referenced independently of this implementation.

Read it if you want to write another implementation, or a tool that reads git-bug data directly.

Installing and upgrading

Releases are now built by GoReleaser, which changes what you can download and how much you can trust it:

- native packages: deb,rpm,apkand Arch, with man pages and shell completions installed where your system will find them

- verifiable downloads: the checksum file is signed with keyless cosign, and every release carries an SBOM and a build provenance attestation, so you can check that a binary came from this repository and this workflow

- macOS on Apple Silicon is back (#1418), along with Windows on ARM and the BSDs

- existing releases/latest/download/git-bug_<os>_<arch>URLs still work

Breaking changes

- the search index format changed (bleve v1 → v2, by @sudoforge). Upgrading is automatic: git-bug notices the old index and rebuilds it. Downgrading is not — remove .git/git-bugand let the older version rebuild. The upside is real: on the git-bug repository itself, the index went from ~51 MiB to under 4 MiB.

- go installno longer gives you a web UI. The compiled interface used to be committed to the repository; it no longer is. A binary from- go installstill works, but- git bug webuiwill tell you it has no web UI and how to get one. Download an official release, or build with- make build.

- git bug commandshas been removed by @sudoforge. Use- --help, the man pages, or the online documentation.

- git bug webui --hostis now- --bind, which is what it always did.

- some platform artifacts are gone — linux/386,linux/s390xand a few others. We now build for platforms we can actually test (#1508).

Web UI

- complete rewrite, by @sandhose and @MichaelMure

- code browser: file tree, files, commit history and commit diffs, by @sandhose and @MichaelMure

- syntax highlighting with line numbers and linkable line ranges, by @sandhose

- markdown rendering in the file viewer, with a source toggle, by @nijotz

- relative markdown links and images resolved against the repository, by @sandhose

- filters and search reflected in the URL, on both the issue list and user profiles, by @sandhose

- four themes: light and dark, soft and hard

- multi-repository support, with a picker

- read-only mode works again, and says so (#1433, #1434)

- wider pages, system font by default, clearer labels, reworked issue toolbar (#1437, #1438, #1440, #1452)

- a much smaller footprint in the binary, from pre-compressed assets

- opening the browser at startup behaves better (#1536), by @sudoforge

Core

- unknown operations are preserved instead of being dropped

- entity commits are atomic, via a compare-and-swap on the ref

- fix races when an entity resolves another one

- fix incomplete and stale operation metadata (#1582)

- fix the search index not being updated on merge

- fix a stale bug being returned right after a merge

- merging no longer fills memory with entities that were not asked for

- fix labels shared between two representations of the same bug

- allow a nil user identity until it is actually needed (#1003)

CLI

- git bug --helpand- --versionnow report the version (#1535)

- new git-bug.remotegit config to set the default remote forpushandpull, by @mcepl

- git bug versionnow reports the commit it was built from, whether the tree was dirty, the compiler, the platform and the architecture

- Ctrl-Cand- SIGTERMare now propagated to the running command, so long operations stop when asked

- fix the documentation of git bug user show, by @waldyrious

Terminal UI

- fix potential crashes in the bug table

API

- GraphQL subscriptions: bugEvents,identityEventsandallEvents, to react to changes without polling

- repository browsing: refs, trees, blobs, commit history with the last commit per entry, and the repository's head

- a connection to list the repositories served by the API

- /gitfile/{repo}/{ref}/{path}to fetch raw file content by path, replacing the previous id-only endpoint

Bridges

- GitHub: fix push then pull duplicating comments (#1582)

- GitHub: fix label handling when GitHub creates them asynchronously

- GitLab: use the work_itemsURL for issues, by @sudoforge

- fix building from source against recent gitlab.com/gitlab-org/api/client-go(#1514)

Documentation

- a formal specification of the on-disk format, in its own repository (#1562, #1568), with @cfkaran2

- reorganized documentation, a rewritten README and up-to-date web UI screenshots (#551)

- fix a broken link in the spec and in the README, by @cfkaran2

- fix the sponsors link in the README pointing at an unrelated Open Collective profile (#1588)

🚀 ☀️

New Contributors

Full Changelog: v0.10.1...v0.11.0