Vibeleaderboard
Index / tool
Visit github.com
Category
Developer Tools
Rank

Previous survey · No. 821 ·

Pricing
Open Source
Type
TOOL
Use case
Productivity & Collaboration
Latest release
v0.12.0
Date

About

A bug tracker fully integrated into Git, storing issues inside the repository itself so they sync through the same git remotes used for code, work offline, and require no separate service. It avoids vendor lock-in since every clone already holds a full backup of the issue history, and it adds no extra files to the tracked project.

What it does

git-bug keeps issues as hidden git objects rather than rows in a hosted database. Each issue is a chain of commits whose payload is a list of edits (comment added, label changed, status set), and the current state is computed by replaying those edits in order. Because clocks on different laptops disagree, ordering comes from logical counters, with a deterministic tiebreak when two people edit at once. You drive it as a git subcommand, through a keyboard terminal interface, or through a local browser interface served from the same binary, and it can import from and export to GitHub, GitLab and Jira.

Why it's ranked here

The design is the reason to look. Instead of syncing a database, git-bug turns issue history into an operation log that merges like a CRDT (a data structure built to merge concurrent edits without conflicts), and the on-disk format is published as a separate specification so other tools can read it. It is GPLv3 or later, ships as one binary with signed release checksums, and is packaged for Arch, Nix, Homebrew, scoop and FreeBSD. CI runs a vulnerability scan on dependencies. The gaps are honest and documented: the web portal for outside reporters is unfinished.

What's good

Concurrent edits are handled with real care: commits whose logical clocks contradict the history graph are rejected, and ties are broken by a hash order that a participant cannot easily steer. Queries use a small, familiar filter syntax (status, author, label, title, sort by edit time) and IDs accept any unique prefix, the way git commits do. The GitHub and GitLab bridges import and export incrementally, resume from where they stopped, and have automated test suites. Releases come with a cosign-signed checksum file and documented verification commands, which is more than most developer tools offer.

Tradeoffs

The project's own feature matrix lists assignees and milestones as not implemented anywhere, and boards as partial. Comment deletion exists in the core but not in any interface. The Launchpad bridge imports only and cannot resume, and the Jira bridge has no automated test suite. No bridge carries attached media. Public key handling and identity protection are marked partial, so signed authorship is not yet enforced end to end. The web interface is labelled a work in progress, and building it needs Node.js and pnpm on top of Go. The GPLv3 license matters if you plan to embed the library.

How to use it well

A good fit for small teams or solo maintainers who already live in the terminal and want issues that travel with the code, survive a hosting outage, and work offline. It also works as a local, editable mirror of a GitHub or GitLab tracker, synced through a bridge. Use the command line or terminal interface for daily work, since the docs themselves recommend them over the web view. Look elsewhere if you need assignees, milestones, project boards, or a public intake page where outsiders can file reports without cloning the repository.

Technical notes+

main.go only wires a signal-aware context into commands.NewRootCommand, a cobra tree. Per doc/design/data-model.md, each entity is a chain of commits under refs/<namespace>/<id>; each commit's tree holds an ops blob (a JSON OperationPack) plus empty-blob entries named create-clock-N and edit-clock-N that encode Lamport clocks, so the clocks cost no extra transfer. Entity IDs are the hash of the first serialized operation. cache/bug_cache.go wraps every mutation (AddCommentRaw, ChangeLabelsRaw, SetTitleRaw) behind a mutex so one in-memory Bug exists per process. cache/filter.go compiles queries into closures over BugExcerpt: status, author, actor and participant filters are OR-combined, labels and title AND-combined. bridge/bridges.go registers GitHub, GitLab, Launchpad and Jira in init(). go.mod pins gqlgen, go-git and bleve; per CONTRIBUTING.md the web UI embed sits behind a webui build tag.

Observed

License
GPLv3 or later (logo under CC BY 4.0)
Language
Go, with a React web UI compiled into the binary
Interfaces
git subcommand CLI, terminal UI, local web UI, GraphQL API
Storage
Git objects under custom refs; no files added to the working tree
Bridges
GitHub, GitLab, Jira (import and export); Launchpad (import only)
Platforms
Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD
Packaging
Single binary; deb, rpm, apk, Arch, nixpkgs, Homebrew, scoop, FreeBSD pkg
Release verification
SHA-256 checksums signed with keyless cosign
Not implemented
Assignees, milestones, pull-request entities (per feature matrix)

Read from README.md, go.mod, main.go, doc/design/architecture.md, doc/design/data-model.md, doc/feature-matrix.md, doc/usage/workflows.md, doc/usage/query-language.md, bridge/bridges.go, cache/bug_cache.go, cache/filter.go, INSTALLATION.md, CONTRIBUTING.md.

Tags

bug-trackergitoffline-firstdistributedcli

Tech Stack

Go

Media

git-bug

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.