Show HN: Beaver Backlog, an issue tracker that lives in your repo Beaver Backlog, a local-first issue tracker that stores issues as Markdown files inside a project's repository, has been released as an open-source tool by developer Stefan (builtbystef). The tool requires Go 1.26 or later and can be installed via `go install github.com/builtbystef/beaver-backlog/cmd/beaver@latest`. It provides a CLI and a web UI for managing issues without an external service, account, or database, and is designed to be agent-friendly for coding agents. A local-first issue tracker that stores issues as Markdown files inside your project. Humans and coding agents coordinate work through the files themselves. No external service, account, or database needed. Install installation · Quick start quick-start · Web UI the-web-ui · Screenshots screenshots · Commands commands · Agents for-scripts-and-agents · Docs documentation bash $ beaver create "Login form rejects valid passwords" --label bug --priority high Created ix2guj Login form rejects valid passwords .beaver/issues/ix2guj-login-form-rejects-valid-passwords.md Most issue trackers live outside the codebase, behind a web app and an API. Beaver Backlog keeps project work in the repository, as plain files that travel with your code: Markdown-first : every issue is a human-readable .md file with a small YAML header. Read it, edit it, diff it, and review it like any other file. Local by default : issues live on your disk, in your project. Version-control-friendly : plain text that Git diffs and merges cleanly. Agent-friendly : coding agents read, create, and update issues through the same files as you. Nothing hidden : the files are the only source of truth. The CLI and the web UI are thin clients over them; hand-editing an issue file is a first-class operation. With Go 1.26 or later: go install github.com/builtbystef/beaver-backlog/cmd/beaver@latest Or build from a clone: git clone https://github.com/builtbystef/beaver-backlog.git cd beaver-backlog go build ./cmd/beaver bash $ beaver init Initialized empty Beaver Backlog store in /home/you/project/.beaver $ beaver create "Login form rejects valid passwords" --label bug --priority high Created ix2guj Login form rejects valid passwords .beaver/issues/ix2guj-login-form-rejects-valid-passwords.md $ beaver list ID PRIORITY STATE ASSIGNEE LABELS TITLE ix2guj high todo - bug Login form rejects valid passwords $ beaver start ix2guj Started ix2guj claimed for stefan $ beaver note ix2guj "root cause: form strips before hashing" Added note to ix2guj as stefan $ beaver update ix2guj --priority urgent --label regression Updated ix2guj $ beaver done ix2guj Marked ix2guj done State changes are verbs of their own start , done , cancel , reopen ; every other field — title, description, assignee, priority, labels, relationships — changes through beaver update . beaver serve starts a local web UI on loopback over the same files. It uses port 2328 by default and scans forward if that port is occupied override it with --port . No daemon and no build step; stop it with Ctrl-C. Board — issues as cards in state columns; drag a card to move it. List — the same issues as a table, sharing one filter bar with the board label, priority, assignee, text search . Graph — the dependency graph as a server-rendered picture: layered layout, parent clusters, dependency arrows; pan, zoom, and filter it. Issue pages — rendered Markdown descriptions and notes, every field editable, plus creating new issues in the browser. Doctor — store health as a page, with the same safe repair as doctor --fix . Open pages notice when the store changes underneath them — a pull, a hand edit, another actor — and redraw themselves. Every control is a plain HTML form first, so the UI keeps working with JavaScript disabled; scripts only add polish on top. The UI follows your system's light or dark theme, and writes are attributed just like CLI writes beaver serve --as