beads v0.49.4
Pre-compiled binaries for Linux, macOS (Intel & Apple Silicon), Windows (AMD64 & ARM64), Android/Termux (ARM64), and FreeBSD.
Installation
Homebrew (macOS/Linux):
brew install beadsQuick Install (macOS/Linux/FreeBSD):
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bashWindows (PowerShell):
irm https://raw.githubusercontent.com/steveyegge/beads/main/install.ps1 | iexManual Install:
Download the appropriate binary for your platform below, extract it, and place it in your PATH.
Changelog
Features
- ebead13 feat(bd): add wisp_type field support for TTL-based compaction (gt-7mqd.2)
- e8158ae feat(cli): add --metadata flag to bd update (bd-0vud2)
- feae3bc feat(config): support .beads/config.local.yaml for local overrides
- 30e8c99 feat(doctor): add Dolt migration validation checks (gt-nibe)
- 22e21c6 feat(dolt): add BD_SKIP_ACCESS_LOCK env var for lock testing
- 8b24c12 feat(make): check repo is up-to-date before install
- 909085b feat(migrate): add agent-managed Dolt upgrade path
- c2ae767 feat(migrate): add orphan branch support for sync-branch mode
- 7e21aef feat(migrate): make orphan branch default for bd migrate sync (#1148)
- e5c8c1d feat(schema): add wisp_type column for TTL-based compaction (gt-7mqd.1)
- 51dc5ff feat: add 'beads' alias for bd command during installation
- 46b6b7a feat: add --label-pattern and --label-regex flags to bd list
- fa1218d feat: add Dolt schema migration runner (bd-ijw)
- f3874ed feat: add simple query language for complex filtering
- cf185ce feat: add spec_id field for linking issues to specification documents (#1372)
- a1c447e feat: add spec_id support
- dc038c9 feat: allow UpdateIssue metadata updates via json.RawMessage/[]byte (#1417)
Bug Fixes
- 7451ddc Merge PR #1279: fix: add JSONL file locking to prevent race conditions
- 0b92eae Merge PR #1281: fix: add WAL checkpoint robustness with retry logic
- f220cb4 fix(autoflush): use unique temp file names for concurrent writes
- e48e94e fix(compact): restore safety logic accidentally removed in cb1e355
- b5ae6e8 fix(daemon): add initial JSONL import on startup with hash update
- 22bbbc4 fix(daemon): update hash after auto-import to prevent export validation failure
- 4d9fced fix(daemon_lock): update race test to document transient PID state
- 4564736 fix(dep): use factory.NewFromConfig for cross-rig dependency resolution
- 1ee9fbe fix(doctor): use read-only mode to avoid creating database
- 6ec1943 fix(dolt): add retry logic for server mode transient connection errors
- 1c2166e fix(dolt): add spec_id column migration for existing databases
- 9f2326b fix(dolt): add timeout to embedded Dolt close to prevent indefinite hang
- eaa4e79 fix(dolt): fix driver bad connection errors from nested queries in server mode
- 623c36b fix(dolt): remove FK constraint on depends_on_id for external references
- 054e92d fix(dolt): use correct variable in initSchemaOnDB
- ead2428 fix(dolt): work around merge join panic in ready_issues view
- bc70460 fix(lint): address unparam warnings in gitlab_sync.go
- bde38fd fix(lint): handle rows.Close() errors explicitly (G104)
- 70bc384 fix(lint): suppress G304 false positive for @file.json syntax
- 76e7aa2 fix(lint): use secure file permissions for lock file (G302)
- f3317a3 fix(migrate): use --stdin for cross-platform empty tree creation
- 1797e33 fix(nix): allow Go toolchain auto-download for version compatibility
- 4af28d5 fix(nix): use Go 1.25.6 overlay for dolthub/driver compatibility
- 24097e0 fix(nix): use buildGoModule.override for go-modules derivation
- 7032113 fix(path): exclude routes.jsonl from FindJSONLInDir fallback
- 5f8cb4c fix(routing): respect BEADS_DIR over prefix routing in show/close/update
- aa5e92f fix(show): display relates-to deps correctly and deduplicate RELATED section
- 69bf2c9 fix(sync): disable JSONL auto-flush in dolt-native mode (bd-zlih1)
- 1c02b4e fix(sync): disable JSONL imports in dolt-native mode, keep local writes as safety net
- cd9768d fix(sync): disable JSONL sync exports in dolt-native mode (bd-zlih1)
- 2726e6b fix(sync): use GetGitCommonDir for worktree creation in bare repo setups
- c5953db fix(sync): use content-based merge for daemon pulls (GH#1358)
- 665863e fix(test): create database before use in migrations_test.go
- 6f89e65 fix(test): use atomic counter in TestFetchIssues_ContextCancellation
- f5b7025 fix(test): use atomic counter to fix data race in gitlab test
- 047174e fix(update): add config.yaml fallback for custom types in daemon mode
- 001a6ae fix: accept simple string vars in TOML [vars] section
- 26bed83 fix: add JSONL file locking to prevent race conditions
- 7165f31 fix: add JSONL locking to performIncrementalExport
- 9e397bc fix: add WAL checkpoint robustness with retry logic
- c96e62e fix: add atomic compare-and-swap semantics to bd claim (#1474)
- 690adbb fix: add missing placeholder for spec_id in Dolt INSERT
- 8457d9e fix: add missing spec_id to SQL queries using scanIssues
- 6b46f3a fix: add process-level semaphore to limit concurrent dolt access (G5)
- bb18dad fix: add routes.jsonl to FindJSONLInDir skip list to prevent corruption
- 823efe6 fix: add toml tags for snake_case fields in formula structs
- 7dcfb1c fix: add transaction safety and daemon lock improvements
- 5619c50 fix: add wisp_type to Dolt GetIssuesByIDs and insertIssueTx queries
- 1269368 fix: advisory flock to prevent zombie bd processes from dolt lock contention
- 9acaa85 fix: align resolve_conflicts tie-breaking with merge driver (#1481)
- 2aff2db fix: bd cleanup --hard always prunes tombstones immediately (bd-4q8)
- 4b80094 fix: bd ready now excludes in_progress issues to show only claimable work
- 92d1e59 fix: deduplicate children in bd list --tree
- 49cf54e fix: enable govet linter and resolve all IPv6 address format issues
- dfeac38 fix: merge driver silently drops issue fields (#1480)
- f013db9 fix: merge driver silently drops issue fields (#1480) (#1482)
- ed71a9a fix: remove unused source return value from getGitLabConfigValue (unparam)
- 60978cf fix: replace daemonLogger with *slog.Logger for proper structured logging
- 62c9f9b fix: resolve all CI failures (lint, tests, nix) (#1464)
- 87a22e0 fix: resolve connection pool deadlock in dolt dependency resolution (G10)
- c2f3d46 fix: resolve errcheck violations in cmd/bd/gitlab.go and gitlab_sync.go
- 309bab4 fix: resolve failing tests in daemon autostart, gitlab, and syncbranch
- 3db3d2c fix: resolve gosec G104 unhandled rows.Close() error in doctor/perf_dolt.go
- b169dc1 fix: resolve gosec G104 unhandled rows.Close() errors in dependencies.go
- a7f9e86 fix: resolve remaining errcheck violations in gitlab files
- 789ffe7 fix: resolve unused ctx lint warning in filterByLabelRegex
- 78b657c fix: scope Dolt migration helpers to current database (bd-0gfm6)
- 74920a8 fix: skip CREATE DATABASE for read-only commands in dolt store
- 0bca2f5 fix: use types.Dependency end-to-end, add JSONL round-trip tests (#1481)
Others
- 1a6bedd Document ICU build deps and hint in installer (bd-1409)
- c761bc3 Document Windows Dolt limitation (main-3vt)
- fae6b4d Enable Dolt build on Windows via pure-go regex (main-3vt)
- b169256 Fix Windows build by excluding Dolt on Windows (main-3tg)
- 02f29ea Fix auto-pull: check JSONL changes AFTER pulling
- ae5d13d Fix daemon auto-import before export on mutation events
- 888e3e6 Fix other instances of dolt db lock due to hanging process
- d8798a2 Merge main into feature/bd-0vud2-cli-metadata
- cca086c Merge main into refactor/merge-embed-types-issue-b2
- cca0dc9 Revert "thinking about issue namespaces, GH#759"
- b7e0fc3 Use prebuilt Windows releases in installer (bd-1493)
- beb8058 bd daemon sync: 2026-01-13 05:02:39
- c5cfe58 chore(deps): bump github.com/anthropics/anthropic-sdk-go from 1.19.0 to 1.20.0
- 1278d43 chore(deps): bump github.com/cenkalti/backoff/v4 from 4.2.1 to 4.3.0 (#1452)
- 3cbe2bd ci: allow Nix Flake test to fail temporarily
- 72b8632 refactor(release): transform release.sh into molecule gateway
- 426fb96 refactor: merge driver embeds types.Issue to prevent field drift (#1481)
- 3032c62 release: v0.49.4
- 8442a83 revert: remove Go overlay, use continue-on-error instead
- 3bab433 thinking about issue namespaces, GH#759