A web UI for the beads issue tracker.
Beads is a lightweight memory upgrade and issue tracking system for coding agents. Beady is an interface into beads for humans when they're not in the CLI, providing a graphical interface for browsing and visualizing bead issues, dependencies, and work status.
I've long been enamoured of Fossil-SCM and it's github-in-a-box nature, featuring a first class CLI and a strong web ui with commit timeline and issue tracker all wrapped up in a single executable (plus the db). It strikes me that Beads is excellently poised to do the same thing. Beady is an experiment to see what that might entail. Feedback welcome.
The PR which started it: steveyegge/beads#77
--> Also see mantoni/beads-ui from @mantoni. bdui has a higher development velocity than beady and a bigger feature set. You might like that one better. I'm going to keep poking away at beady anyway as I want to pursue the everything in one file idea.
- Issue list with real-time filtering (search, status, priority)
- Issue detail pages with dependencies and activity
- Dependency graphs visualized with Graphviz
- Ready work view (unblocked issues)
- Blocked issues view with blocker details
- Statistics dashboard showing open/closed/in-progress counts
- Theme customization with light/dark/auto modes and persistent preferences
- Graceful shutdown via UI button (no need for task manager or kill commands)
Beady now supports creating and modifying issues through the web UI:
- Create new issues with full form (title, type, priority, description, design, acceptance, labels)
- Update status via inline dropdown (open, in progress, closed)
- Change priority via inline dropdown (P0-P4)
- Close issues with optional reason
- Add comments with username attribution
- Edit notes with collapsible form
- Manage labels - add/remove labels inline
- Manage dependencies - add/remove blockers and dependencies
All write operations are performed by executing the bd CLI, ensuring guaranteed compatibility with the CLI and inheriting all validation logic. For bulk operations, use the bd CLI directly.
- bd CLI in PATH (required for write operations) - install from github.com/steveyegge/beads
- A beads database file (will be auto-discovered from
.beads/directory)
Run this one-liner to automatically download and install the latest beady binary for your platform:
curl -fsSL https://raw.githubusercontent.com/maphew/beady/main/install.sh | bashThis script will:
- Detect your OS and architecture
- Download the appropriate binary from GitHub Releases
- Install it to
~/bin/beady(or/usr/local/binif available) - Make it executable and ready to use
If you prefer manual installation, download the latest release for your platform from GitHub Releases:
- Windows:
beady_VERSION_Windows_x86_64.zip(ori386for 32-bit) - macOS:
beady_VERSION_Darwin_x86_64.tar.gz(orarm64for Apple Silicon) - Linux:
beady_VERSION_Linux_x86_64.tar.gz(orarm64,i386)
Extract the binary and add it to your PATH.
Install the latest release:
go install github.com/maphew/beady/cmd/beady@latestOr install a specific version:
go install github.com/maphew/beady/cmd/[email protected]This will install the beady binary to your $GOPATH/bin (usually ~/go/bin).
- Clone this repository:
git clone https://github.com/maphew/beady.git
cd beady- Build the web UI:
go run build.go
# executable will be in ./bin/If you're developing both beads-ui and beads together:
- Clone both repositories side by side
- Uncomment the
replacedirective ingo.mod - Run
go mod tidy
Run the web UI with an optional path to a beads database:
beady [path/to/.beads/name.db] [port]For example, to use autodiscovery:
beady 8080Or specify a path:
beady .beads/name.db 8080The web UI will start on http://127.0.0.1:8080 (or the specified port).
Beady supports three theme modes for comfortable viewing in different environments:
- Auto (default): Automatically follows your system's dark/light preference
- Light: Forces light theme regardless of system setting
- Dark: Forces dark theme regardless of system setting
You can switch themes using the dropdown in the header. Your preference is automatically saved and will persist across browser sessions.
If no database path is provided, the application will automatically search for a beads database in the current directory and standard locations (e.g., .beads/name.db).
If no database is found, it will fall back to creating a new empty database.
To stop the Beady server, you have two options:
-
Via the UI: Click the "Shutdown" button in the header of any page. You'll be prompted to confirm before the server shuts down gracefully.
-
Via keyboard: Press
Ctrl+Cin the terminal where Beady is running.
The UI shutdown button is particularly useful when running Beady in the background or when you don't have easy access to the terminal. It performs a graceful shutdown without needing to use task manager or system kill commands.
To run the web UI in development mode:
# from binary with live-reload (e.g. for template work)
beady --dev
# or run from code without binary
go run cmd/beady/main.go /path/to/.beads/name.dbTo create a test database with sample issues:
cd cmd
go run create_test_db_main.go /path/to/test.dbBeady provides the following HTTP endpoints:
GET /- Main issue list with filtering (search, status, priority)GET /ready- Ready work view (unblocked issues)GET /blocked- Blocked issues viewGET /issue/{id}- Issue detail page with dependencies and eventsGET /graph/{id}- Dependency graph visualization
Read Endpoints:
GET /api/issues- List all issues (supports?search=,?status=,?priority=filters)GET /api/issue/{id}- Get single issue detailsGET /api/stats- Get statistics (total, open, in-progress, closed counts)POST /api/shutdown- Gracefully shutdown the server
Write Endpoints (require bd CLI in PATH):
POST /api/issues/create- Create new issuePOST /api/issue/status/{id}- Update issue statusPOST /api/issue/priority/{id}- Update issue priorityPOST /api/issue/close/{id}- Close issue with reasonPOST /api/issue/comments/{id}- Add commentPOST /api/issue/notes/{id}- Update notesPOST /api/issue/labels/{id}- Add labelsDELETE /api/issue/labels/{id}/{label}- Remove labelPOST /api/issue/dependencies/{id}- Add dependencyDELETE /api/issue/dependencies/{id}/{depSpec}- Remove dependency
All write endpoints accept JSON request bodies with a username field for attribution. See CLAUDE.md for detailed API documentation.
GET /static/*- CSS, JavaScript, and other static files
GET /ws- WebSocket endpoint for live-reload (only in--devmode)
This project uses GoReleaser with GitHub Actions for automated releases. To create a new release:
- Ensure all changes are committed and pushed to
mainbranch - Create and push a version tag following semantic versioning:
git tag v1.0.0 git push origin v1.0.0
- GitHub Actions will automatically:
- Build binaries for all platforms (Linux, Windows, macOS)
- Generate checksums
- Create a GitHub release with all artifacts
- Make the version available via
go install ...@latest
The release will include:
- Multi-platform binaries (amd64, arm64, 386)
- Archives (
.tar.gzfor Unix,.zipfor Windows) - Checksums for verification
- Automated changelog from commits
Testing a release: To test the release process without creating an official release, push a tag with a -test suffix (e.g., v0.0.1-test).
The web UI depends on the beads library for database access and issue management. It uses:
- beads - an issue tracker for LLM agents
- htmx for dynamic UI updates
- picocss for styling and widgets
- Graphviz for dependency graph visualization (server-side)
This project is licensed under the MIT License - see the LICENSE file for details.