1.3.0 — Open-core boundary + Desktop preview
The natural follow-up to 1.2.0. Brings the open-core boundary, the Desktop preview, and everything that was sitting in Unreleased onto a stable 1.x release.
Highlights
- Backlog Desktop (backlog.so/desktop,
packages/desktop/) is now the recommended way to run the kanban for non-terminal users. Electron shell around the same@backlog/server+@backlog/board-uithe CLI already runs — one engine, one feature surface. The macOS DMG (Apple Silicon + Intel) is in Apple notarisation; Windows + Linux follow via the sameelectron-builderconfig. Free, Apache-2.0, full feature parity withbacklog serve. - Open-core boundary made explicit. CLI + Desktop + SDK are free forever under Apache-2.0. Backlog Cloud (private development, waitlist) only adds features that genuinely need infrastructure we run: SMTP for invites and digests, hosted auth & SSO (SAML/OIDC, SCIM), multi-tenant collaboration with real-time sync, hosted run executors (managed agents, ephemeral sandboxes), retention beyond local disk, audit log export. The boundary maps to infrastructure we run, not features we artificially gate.
- Marketing surface refreshed at backlog.so: dedicated
/cli,/desktop,/sdk,/cloudpages, an anonymous waitlist for Desktop and Cloud, and a flesh-out/docscovering quickstart, concepts, full CLI reference, workspace layout, configuration, the orchestrator, claims & the pre-commit hook, agents, connectors, the API, self-hosting, and troubleshooting. - Embedded server port fix (
packages/server/src/index.ts).startServer({ port: 0 })now returns the actually-bound port (read fromserver.address()) instead of echoing the requested0. Required for Electron's random-port boot; the CLI gets the fix for free, sobacklog serve --port 0no longer reports the wrong URL. backlog hooks pause/backlog hooks resumeare now first-class subcommands (previously only documented as escape-hatches). Pausing covers a 30-minute window so you can do a sequence of commits without the per-commitBACKLOG_SKIP_HOOK=1dance; resume re-enables on the spot.
Workspace & projects
backlog initinitializes a workspace in the current directory;backlog init --user-levelplaces it at~/.backlog/<slug>/for multi-repo projects without a single natural project root. Project name uniqueness is enforced across user-level entries.config.tomlcarriesproject_location(in_repo|user_level), mirrored in the user registry's per-entrylocation. The cross-platform registry path is~/.backlog/projects.json; legacy registries under~/Library/Application Support/Backlog/(macOS) or~/.config/Backlog/(Linux) are auto-migrated on first read.backlog project migrate <id> --to user-level(or--to in-repo --into <repo-id>) moves an existing workspace between layouts, copying state, rewritingconfig.toml, updating the registry, force-reinstalling hooks, and renaming the old dir to.backlog.migrated-YYYY-MM-DD/for rollback.- Projects — first-class entity grouping one or many repos. Each work item can carry a
project_id. CLI:backlog project add|list|show|update|archive|remove. Storage:.backlog/projects.yaml.
Kanban board (backlog serve)
backlog serve— local Hono server + Svelte 5 kanban board on127.0.0.1:7878, single binary. Cards drag between À faire / En cours / In Review / Done; live updates via SSE on every state mutation. Project dropdown + ⚙ Projects modal, 📁 Repos modal, 🔒 Permissions modal, ✂ splitter,+ Ticketand+ Claimmodals.- Persistent orchestrator — start/pause/stop a background loop that re-builds the execution plan and dispatches runs every
tick_interval_ms(default 5s). Pause is soft (active runs keep going), stop drains. Hydrates only whenlast_tick_at < 60sto avoid surprise auto-launches. CLI:backlog orchestrator start|pause|stop|status|config. UI: ▶ ⏸ ⏹ trio in the topbar. - Live time estimates and progress — every task gets
estimated_duration_seconds(manual override or median of archived runs filtered by repo+lane, fallback 30 min) plus a derivedprogress_percent. Work-item progress is duration-weighted. The/boardpayload exposesprogress_percent,eta,elapsed_seconds,total_estimated_seconds,total_remaining_seconds. UI shows a 4 px progress bar per task, ETA badge ticking every second, plus a global ETA pill. - Drag-to-reorder inside columns — rewrites a sparse
priority_score(work items userank). Cross-column drag still triggers status change. - Repo management UI + API —
/api/v1/repos(GET/POST/PATCH/DELETE) wraps@backlog/core's repo-service. List, add, rename, enable/disable, force-delete repos from the kanban. - GitHub / GitLab / Bitbucket / arbitrary Git URL clone — repos can be added by URL.
RepoConfiggainsgit_urlandprovider.cloneAndAddRepo()clones into<workspace>/repos/<id>by default. CLI:backlog repos add --url .... - Permissions screen — toggle workspace autonomy mode (observe / assist / delegate / autopilot), edit per-claim TTL and
enforce_on_commit, configure each agent (enable, sandbox mode, success mode, concurrence, allowed risks, allowed repos). - Mechanical splitter + AI splitter — ✂ button on work items without tasks. AI tab calls Claude (
claude-opus-4-7by default, overridable viaBACKLOG_AI_MODEL) with adaptive thinking and JSON-schema constrained output. RequiresANTHROPIC_API_KEY; degrades gracefully without.
CLI commands
backlog init,backlog doctor,backlog status,backlog servebacklog project {add|list|show|update|archive|remove|migrate|migrate-rollback|export|import}backlog repos {list|show|add|update|remove}(supports--urlfor cloning)backlog work {add|list|show|move|update|remove|plan|split|import|assign-project|estimate}backlog task {add|list|show|move|update|remove|block|unblock|plan|estimate|progress}backlog claim {start|check|finish|list|gc}(claims gainexpected_finish_at,expected_duration_seconds,agent_id;--durationand--agentflags onclaim start)backlog schedule {simulate|explain|run}backlog runs {list|show|gc|interrupt|resume|approve|request-changes|complete|fail|handoff}backlog agents {list|show|enable|disable|update|validate|health}backlog sources {add|list|enable|disable|update|remove|validate|sync|push|conflicts|resolve}backlog orchestrator {start|pause|stop|status|config}backlog hooks {status|install|uninstall|pause|resume}(pre-commit hook exportsBACKLOG_PROJECT_DIRsoclaim checkfinds the workspace whetherin_repooruser_level)backlog release snapshotbacklog worktree {list|gc}
Architecture
- TypeScript + ESM, Node ≥ 20.
- pnpm monorepo:
cli,core,claims,connectors,config,git,hooks,schemas,server,board-ui.schemasis the source of truth (Zod) for cross-boundary types. tsup bundles everything into the published tarball. - Apache-2.0 (CLI).
@backlog/board-uiis Apache-2.0;@backlog/serveris BUSL-1.1 (commercial license for hosted use).
Notes for users coming from 1.2.0
- npm
latestnow points to1.3.0. Reinstall withnpm i -g backlog@latest. - No data migration is required; the workspace format hasn't changed since 1.2.0.