Lobsters6 min readintermediate
Reinventing issue tracking: Local-first and Git-native
Summary
A devlog describing how Manganin’s issue tracker stores issues in a dedicated Git repo as plain files, after rejecting earlier approaches that tried to embed issue data in the code tree or Git refs. The author explains the pitfalls of using refs for issue storage, shows the low‑level Git commands needed for that approach, and then outlines the final design: a hidden sister repository where each i…
- Embedding issue data in the source tree couples issue lifecycle to code branches, causing rebasing pain.
- Storing issues in custom Git refs is possible (using `git hash-object`, `git mktree`, `git commit-tree`, `git update-ref`) but adds complexity, race‑condition handling, and requires extra tooling.
- A simpler, more ergonomic solution is a separate Git repository for issues, where each issue is a file; the filesystem guarantees unique identifiers, and standard tools (e.g., `fzf`, Neovim) can be used for browsing.
- Local‑first design avoids vendor lock‑in and works offline without installing additional software.
Shows a pragmatic path to building a lightweight, Git‑native issue tracker that aligns with developers’ existing toolchains, offering a concrete alternative to heavyweight database‑backed systems.
5/10

