Repository navigation
Releases: git-bug/git-bug
Release list
0.11.0
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 fromgo installstill works, butgit bug webuiwill tell you it has no web UI and how to get one. Download an official release, or build withmake 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 architectureCtrl-CandSIGTERMare 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
v0.10.1
To view the full set of changes, including internal developer-centric changes,
run the following command:
git log --oneline v0.10.0..v0.10.1
Bug fixes
- cli: ignore missing sections when removing configuration by @sudoforge in #1455
v0.10.0
To view the full set of changes, including internal developer-centric changes,
run the following command:
git log --oneline v0.9.0..v0.10.0
Documentation
- bridge: correct command used to create a new bridge by @mxt-mischa in #1422
Features
v0.9.0
This release contains minor improvements and bug fixes.
The full changelog can be seen by running the following command:
git log --oneline v0.8.1..v0.9.0
🚀 Features
- tui: improve readability of the help bar (23be684)
🐝 Bug Fixes
- remove errata from string literal (aa102c9)
📝 Documentation
- dev-infra: define stricter commit message guidelines (f680ef7)
- correct mispelled words (89ff47a)
- clarify testing activation of the dev shell (d753637)
🔧 Miscellaneous
- dev-infra: improve //:.editorconfig alignment with formatters (b4ad532)
- dev-infra: add gopls to the development shell (29b59f2)
- use pkgs.runCommand for the pinact check drv (65f8ec9)
- remove workflow: lifecycle (f3bb756)
- automatically mirror HEAD to trunk (2257472)
- mark TestCache as flaky (3e5f4ee)
- add support for Helper() (1ec304e)
- implement support for Failed() and FailedNow() (1766f85)
- add an internal lib for running flaky tests (f6e7fb5)
- simplify github-related variables (dac71e7)
v0.8.1
Features
- detect os.Stdin/os.Stdout mode #994 (Steve Moyer)
- use isatty to detect a Termios instead #994 (Steve Moyer)
- add concurrency limits to all pipelines #1189 (sudoforge)
- update action library versions #1189 (sudoforge)
- add initial nix development shell #1190 (sudoforge)
- add a commit message template #1190 (sudoforge)
- add a common file for git-blame ignored revisions #1190 (sudoforge)
- add initial editorconfig configuration file #1190 (sudoforge)
- add workflow for triaging stale issues and prs #1192 (sudoforge)
- increase operations per run for workflow: cron (sudoforge)
- allow for manual execution of workflow: cron (sudoforge)
- refactor pipelines into reusable workflows #1203 (sudoforge)
- bump node versions to 16.x, 18.x, and 20.x #1205 (sudoforge)
- improved lifecycle management with stale-bot #1224 (sudoforge)
- merge go directive and toolchain specification (sudoforge)
- ci: support a merge queue #1235 (sudoforge)
- add package to dev shell: delve (#1240) #1240 (sudoforge)
- update references to the git-bug organization (#1249) #1249 (sudoforge)
- support new exclusion label: lifecycle/pinned (#1375) #1375 (sudoforge)
- remove lifecycle/frozen (#1377) #1377 (sudoforge)
- add action: auto-label (#1380) #1380 (sudoforge)
- bump to go v1.24.2 (#1389) #1389 (sudoforge)
Bug Fixes
- 972: use prerelease of GoKart with repaired panic #974 (Steve Moyer)
- resolve Go vulnerabilities #976 (Steve Moyer)
- TestCache: eliminate hanging Windows tests #978 (Steve Moyer)
- commands: run tests in ./commands/... without ANSI color #984 (Steve Moyer)
- commands: create env.Env once for all Cobra commands #998 (Steve Moyer)
- commands: replace missing import #998 (Steve Moyer)
- correct typo: acceps => accepts #1189 (sudoforge)
- bump to go v1.22.5 #1189 (sudoforge)
- add missing
withproperty to //.github/workflows:cron.yml (sudoforge) - add write for prs: stale/issue-and-pr (sudoforge)
- move codeql into an independent workflow #1206 (sudoforge)
- run the presubmit pipeline for PRs #1208 (sudoforge)
- correct path for reusable workflow: lifecycle #1229 (sudoforge)
- set GitLastTag to an empty string when git-describe errors (#1355) #1355 (sudoforge)
- refactor how gitlab title changes are detected (#1370) #1370 (sudoforge)
- use correct url for gitlab PATs (#1384) #1384 (sudoforge)
- use -0700 when formatting time (#1388) #1388 (sudoforge)
- checkout repo before setting up go environment (#1390) #1390 (sudoforge)
- resolve the remote URI using url.*.insteadOf (#1394) #1394 (sudoforge)
Documentation
- commands: try to make cleaned argument use more obvious #1001 (Steve Moyer)
- update install, contrib, and usage documentation (#1222) #1222 (sudoforge)
Styles
- TestCache: remove empty trailing line from function #976 (Steve Moyer)
- clean up linter complaints #1001 (Steve Moyer)
- resolve PR comments #1001 (Steve Moyer)
Code Refactoring
- TestCache: guarantee test caches are closed when tests finish #979 (Steve Moyer)
- rename github test repository: test-github-bridge (#1256) #1256 (sudoforge)
- Directly swap two variables to optimize code (#1272) #1272 (荆长逯)
- rename //:git-bug.go to //:main.go (#1373) #1373 (sudoforge)
- remove depdendency on pnpm for auto-label action (#1383) #1383 (sudoforge)
Tests
- cache: close se...
0.8.0
More than 800 commits and a long long time after, git-bug v0.8.0 is now available.
Once again, this release represent a push towards making git-bug generally useful and correct. The two main improvements are a new Entity framework and write-capable WebUI.
Introduced in this version, the code handling the data model and conflict resolution has been improved to support fully p2p sharing model, and generalized into an easily reusable framework Documentation 1, Documentation 2. This is a huge step forward as it means writing new entities (configuration, pull-request, board ...) becomes nearly as simple as for a CRUD application.
This entity framework makes it easy to extend git-bug, but also to use it as a library to create brand new applications using the same techniques as git-bug.
Additionally, the underlying data model has been improved and fix earlier shortcoming. Notably, operations can now be represented in a DAG with concurrent editions across machines while still supporting proper merge conflict, instead of the enforced linear structure as before. Before, things were working OK with a star topology of git remotes (that is, a central repository) but would break down with anything more complicated. No more! The new data model also becomes fully immutable (aka append-only), which is much more conductive with cryptographic signatures and encryption.
Breaking changes
- changes in the data model makes it a requirement to use the migration tool to to update any previous repo.
- remove the legacy identities that were directly embedded in bugs
Core
- introduce a reusable
entitypackage capable of handling all the complex operations of anEntity(bug, board, config ...): operations, DAG manipulation, conflict merge, signature, integrity ... to greatly simplify writing and maintaining an entity. Documentation 1, Documentation 2 - introduce
CombinedId, a new kind of identifier for an item within anEntity(for example a comment in a bug), that hold two partial identifiers interleaved for fast addressing. Documentation - introduce the concept of resolvers, so that entities can link to another
- use
go-gitto manipulate the git repository, instead of executing the localgitbinary - add support for signing the git commit with the author's signature, and verifying
- add support for git config includes by @mindriot101
- rework of the
Repositorylayer for modularity, simplicity and testing, allowing more easily to plug an alternative storage - support for full text search in bug comments
- support application namespace in the repository so that other app can use the entity package as a framework by @smoyer64
Commands
- auto-completion of bug identifier, bridge names, credentials, labels, remote, identity and flags 🎉 by @krobelus
- complete refactoring to avoid global variables and be more conductive to testing
- new command
comment editto edit a bug's comment - new command
rmto remove a bug by @vincetiu8 lsandshowlearned different output format with--format=<format>, with format being one ofdefault,plain,json,compactandorg-modeby @vincetiu8 and @karlicoss- allow
user createwithout interactive prompt by @cvhariharan
Query language
- support filtering on bugs having no labels
- support filtering on metadata by @vmiklos
Bug
- complete rework using the new
entityframework
Cache
- introduce a LRU to have a limit of entities loaded in memory and effectively cap the memory usage of long running processes by @vincetiu8
- proper locking for concurrent access by @vincetiu8
Bridges
- core: support for remote bug tracker rate limiting by @rng-dynamics
- core: support to indicate that the configuration wizard is executed non-interactively and should have all the required parameters set by @GlancingMind
- Github: revamped client and iterator with proper rate limiting handling by @rng-dynamics
- Github: revamped credentials creation following Github removing the previous API by @rng-dynamics
- Github: support new token format by @ellsclytn
- Github: extended tests by @rng-dynamics
- Github: fix push then pull creating duplicates by @rng-dynamics
- Gitlab: revamped client to use the much better
eventAPI to replace thenoteAPI that was hard to use and caused a lot of problems and headaches by @5nord - Gitlab: fix access token settings by @remram44
- Gitlab: cleanup titles on import by @vincetiu8
- Gitlab: support new token format by @gaelj
- Jira: fix incorrect client creation reusing the same credential
API
- new HTTP handler to access files stored in git
- new HTTP handler to upload a file to git
GraphQL
- strong typing for identifiers
- prepare for external authentication
- introduce
addCommentAndCloseandaddCommentAndReopenmutations, to comment and change a bug state in a single atomic operation by @GlancingMind - introduce
editCommentmutation to edit comments
TermUI
- fix a crash when trying to open a bug when there are none by @vojta001
- properly trim spaces in titles by @wavexx
- make the help visually easier to parse
- denser bug list view by @wavexx
- fixed readability on bright terminal by @zdenek-crha
WebUI
- now report GraphQL errors in the console when
--log-errorsis used - large refactoring to bring good practice and simplify future work by @sandhose
- add support for read-only mode by @lukegb and @claudioantonio
- support for creating bugs by @claudioantonio
- support for closing and reopening bugs by @claudioantonio
- allow to specify the host address when launching with
--host=<host>for easier hosting, in particular in container by @GlancingMind - allow specifying the initial query with
--queryby @vmiklos - dark mode by @GlancingMind
- show count of comment on each bug in the list by @GlancingMind
- improved navigation by @GlancingMind
- comment edition and show edit history by @GlancingMind
- bug list filtering by @GlancingMind
- add user profile by @GlancingMind
- show placeholder for empty comment preview by @GlancingMind
🚀 ☀️
New Contributors
- @mindriot101 made their first contribution in #371
- @vojta001 made their first contribution in #378
- @ogirginc made their first contribution in #380
- @westurner made their first contribution in #382
- @lcook made their first contribution in #388
- @tbm made their first contribution in #404
- @vincetiu8 made their first contribution in #403
- @lukegb made their first contribution in #407
- @karlicoss made their first contribution in #425
- @wavexx made their first contribution in #427
- @zdenek-crha made their first contribution in #457
- @6543 made their first contribution in #471
- @xloem made their first contribution in #490
- @rng-dynamics made their first contribution in #496
- @kenrestivo made their first contribution in #502
- @claudioantonio made their first contribution in #538
- @5nord made their first contribution in #556
- @vmiklos made their first contribution in #568
- @GlancingMind made their first contribution in #588
- @ellsclytn made their first contribution in #636
- @cvhariharan made their first contribution in #650
- @sitiom made their first contribution in #716
- @remram44 made their first contribution in #715
- @gaelj made their first contribution in #773
- @krobelus made their first contribution in #531
- @smoyer64 made their first contribution in #808
Full Changelog: 0.7.1...v0.8.0
0.7.2
This release fix a security issue where arbitrary malicious code could be executed if someone commit a git executable inside the repository.
More details at: security advisory
Users are advised to upgrade as soon as possible.
0.7.1
This is a bug squashing release.
Core
- cache: fix missing login in LegacyAuthorExcerpt causing panic
- query langage: introduce a proper Lexer/Parser/AST to fix the brittle parsing and unlock more possibilities in the future
Bridges
- all: fix matching between remote and local bug potentially too lax
- gitlab: fix the importer due to URL scheme change
- gitlab: fix the iterator missing labels
- gitlab: avoid trailing API call in the iterator
- jira/gitlab: fix a bad login handling in the configurator
- launchpad: fix a nil value access
🐛 🚀
0.7.0
This release mainly feature the bidirectional Jira bridge, a dramatic webUI improvement and extensive bridges internal rework.
@cheshirekow faced the Jira monster and wrote a complete bidirectional bridge. At the same time, work has been done to refactor the supporting internals, generalize and strengthen it. The next bridge will be much easier to write!
The webUI saw dramatic improvements with @sandhose and @ludovicm67 teaming up. Even though not everything is here yet, it already look and feel like a much more mature tool. The days of a fully featured webUI and even one open to user without git access are on the horizon.
Breaking changes
- bridges configuration format changed. If you had a configured bridge, you will need to remove the section in the repo git config (.git/config) and the credentials in the global git config (~/.gitconfig) and configure it again
Core
- metadata system for the bridge's credentials
- credentials identifiers are now salted to avoid a direct relationship between the identifier and the secret
- added support for login only and login/password kind of credentials
- reusable generic prompt
- fix config reader not able to read values with spaces (@cheshirekow)
- migration to go modules
Bridges
- new fully-featured Jira importer and exporter, courtesy of @cheshirekow
- all bridges got their configurator deeply reworked to be more robust and consistent
- all bridges changed how they match identity and credentials to deal with hopefully all the cornercases
- gitlab: fix exporter not pushing properly with a custom base URL
- gitlab: fix automatic token generation with a custom base URL
- github: warning with the edited comment is missing instead of a failure
GraphQL
- smart resolving to use cached data in priority to get super fast browsing in the webUI
- merge of
DefaultRepositoryandRepository
WebUI
- ability to write new comment
- UI refresh
- bug filtering and sorting
- conversion to typescript for a more robust codebase
- fully working GraphQL fragment matcher
🚀 ☀️
0.6.0
This release mainly feature the Github exporter, the bidirectional Gitlab bridge, extensive bridge improvements and better text support in the TermUI.
Thanks to the work of @a-hilaly during and after the Google Summer of Code, numerous improvements have been made on the bridges. The Github workflow is now complete, a full Gitlab bridge has been added, support for cancellation and resume make them fast and robust.
An important work leading to the creation of https://github.com/MichaelMure/go-term-text has been done to provide a better text rendering in the CLI and the termUI, especially for languages with wide characters like Japanese or Chinese.
Breaking changes
- bridges configuration format changed. If you had a configured bridge, you will need to remove the section in the git config (in
.git/config) and configure it again
Core
- Labels now have colors and are displayed in each UI and exposed in GraphQL, thanks to @ludovicm67
- text formatting for the terminal (CLI and TermUI) as been extracted into its own reusable package: https://github.com/MichaelMure/go-term-text
- a new infrastructure for storing bridge's tokens and credentials has been added by @a-hilaly. This allow in particular to reuse the same credential from multiple git repository.
- hash collision are now checked before storing a new operation
CLI
- new command
git-bug bridge pushto push updates to a remote bugtracker git bug webuilearned the--openand--no-openflags to control if the UI should be automatically opened in the default browser, as well as thegit-bug.webui.opengit config to control the default behavior- new command
git-bug bridge authto list known credentials - new command
git-bug bridge auth add-tokento store a new token - new command
git-bug bridge auth rmto remove a credential - new command
git-bug bridge auth showto display a credential's detail - the command
git-bug termuilearned thegit bug tuialias - PowerShell completion is now available
Bridges
All of the following changes have been implemented by @a-hilaly , awesome work and a lot of thanks ! ❤️
- new fully-featured Github exporter
- new fully-featured Gitlab importer
- new fully-featured Gitlab exporter
- the Github configurator learned to detect candidate projects from the git remotes
- all bridges now support cancellation for import and export
- all bridges now return a stream of events so that UIs can report them appropriately
- all bridges now tag bugs with their origin and exporter only export their own bugs to avoid unexpected situations. A way to control what is imported and exported will be added later
- all bridges can now read a token from stdin during the configuration to avoid logging it in the shell history
- Github and Gitlab bridges now support resume for a much faster import after the first import
- Github and Gitlab bridges now have automated test suites
GraphQL
- mutations now conform to the Relay specification
repository.ValidLabelsis now a connection
WebUI:
- @sandhose worked at improving the code architecture to prepare for more features
- messages are now properly renderd in Markdown, thanks to @sandhose
🚀 ☀️



