Plumb is pre-1.0. The core — concurrency-safe, atomic, transactional writes; the crash-resilient daemon; the tree-sitter topology index; and per-project memory — is in daily use. The road to 1.0 is about proving it beyond the validated core and smoothing distribution, not rewriting it.
Rather than jump from 0.9 straight to 1.0, Plumb ships a series of focused minor releases — 0.10 through 0.19 — each with one coherent theme. 0.19.x is the last 0.x release. 1.0 follows it as a deliberate stability commitment, not a feature milestone.
Why the runway: a 1.0 makes implicit promises about behaviour stability and language breadth. We want to earn those in the open — validating the experimental language adapters against real binaries, hardening the daemon, and smoothing install and distribution — before we make them. Native Windows support is intentionally not a 1.0 gate; it lands in 1.1.
| Version | Theme | Focus |
|---|---|---|
| 0.10 | Distribution + honest claims | brew install plumbkit/plumb/plumb)plumbkit/homebrew-plumb tap); docs/configuration.md); docs/roadmap.md); in-repo claims trued-up (publishDiagnostics client capability is advertised), verify + real-binary integration jobs run on ubuntu-latest in CI)). |
| 0.11 | Validate experimental adapters | Retest publishDiagnostics client capability is advertised; the pull-diagnostics hypothesis was wrong) and |
| 0.12 | Swift on Xcode | buildServer.json via xcode-build-server) for bare .xcodeproj/.xcworkspace roots |
| 0.13 | Daemon robustness (✓ delivered) | tools/list snapshots under the lock, then filters and marshals outside it, so ping/daemon_info stay responsive under write contention); restartSwift — is evicted and retried rather than reused behind a structural fallback), and |
| 0.14 | Agent ergonomics (✓ delivered) | Client-aware tool profiles (shipped); --allow-dir/PLUMB_ALLOWED_DIRS grant extra read-write roots per connection, transported through the resilient-proxy handshake); plumb enable-lsp <language> flips the running daemon's effective language set live and its server attaches lazily on the next matching file; the last open 0.14 item). Plus a wave of shipped tool-surface work: LSP cold-start warm-up signalling, high-confidence parameter auto-correction, recoverable-error self-heal, get_definition-by-name topology fallback, unified-diff output for find_replace/rename_symbol, the file_status dirty/last-writer probe, undo_edit (safe single-level write revert), anchor-bounded edit_file, optional session purpose tags, post-write cross-file diagnostics (flags an edit that breaks another file), session-state persistence across a daemon restart, the run_task/agent_config tools for stored build/test commands and opt-in agent-writable config, move_symbol (relocate a whole declaration between files in a package), the symbol-edit steering that routes whole-declaration changes to the coordinate-free replace_symbol_body/insert_before_symbol/insert_after_symbol/safe_delete_symbol family, configurable [ui.keys] TUI shortcuts, the negotiated pull-diagnostics mode (opt-in [lsp.<lang>] diagnostics = "pull", push remains the default, hybrid-aware), and minimal_diff_review (a deterministic, advisory overbuild review of the working diff, paired with the plumb-minimal-change skill). |
| 0.15 | Honesty + config surface | buildSettingItems emits a row per config field with one-line help, centralised in the internal/config/fields.go registry). |
| 0.16 | Stabilisation + cross-platform proving | Bug cleanup (#4, ui.theme key, no env/default baking), -race)); clientsmoke handshake tier now runs green on Linux, not just macOS); community Linux testing across distros and desktops (#9). |
| 0.17 | Distribution + discoverability | release.yml stamps server.json and publishes via GitHub OIDC) and GitHub MCP Registry listings; curated-list submissions; a public-exposure polish pass (TestServerJSONVersionMatchesVERSION pins server.json to VERSION), TestDocToolCountMatchesRegistry)). |
| 0.18 | Proof + docs | Measured tool-comparison use cases; demo assets (runnable two-agents and crash-resilience demos + the rendered respawn GIF shipped in 0.13.0); a documentation accuracy pass. |
| 0.19 | Soak + feedback — last 0.x | Fixes and real-world soak rather than a formal tagged release candidate: Plumb ships rolling 0.x patches, so this is a feedback window across several patch releases — not an RC gate — before committing to 1.0. |
| 1.0 | General availability | The stability commitment and the validated-core promise — concurrency-safe writes, the resilient daemon, topology, and memory. |
Themes are buckets, not a strict release order — an item ships when it's ready.
Several 0.13–0.15 theme items (the daemon-robustness hardening, the live
enable-lsp, move_symbol, and the symbol-edit steering) landed in 0.12.x
patches ahead of their nominal minor, which is why rows can read as delivered
early. 0.13.0 was tagged 2026-07-24, closing the daemon-robustness theme,
and 0.14.0 on 2026-07-25, formalising the agent-ergonomics theme with
minimal_diff_review as its headline addition.
Two capabilities landed as standalone surfaces rather than under a themed minor:
plumb web— a daemon-hosted, loopback-only web UI (Svelte 5 + ECharts/uPlot) with full TUI parity (Dashboard, Sessions, Memory, Logs, scope-aware Settings). Seedocs/web.mdand the[web]config section.[collab]cross-agent sharing (shipped in 0.10) — three config-gated, advisory tiers for agents that share one daemon on a machine: peer awareness (daemon-observed writes), intents + a mailbox (share_intent/leave_note), and on-demand knowledge handoff (share_findings). Everything beyond tier-1 awareness is opt-in, all of it is advisory (never blocks a write) and strictly per-workspace. See the[collab]config section.
Neither fits a 0.1x theme above because neither was planned as part of the road to 1.0 — they're called out here so a reader scanning this roadmap knows they exist.
- 1.1 — Native Windows support. Port the daemon's Unix-socket transport to named pipes or loopback TCP — preserving the resilient reconnecting proxy and per-connection isolation — and add a Windows CI matrix (#8).
- Tree-sitter cleanup. Retire the WASM tree-sitter fallback paths once the canonical-grammar extractors (Swift implicitly-unwrapped optionals, TypeScript typed-arrow TSX) have soaked in the field.
The later minors (roughly 0.16–0.19) are deliberately lighter — stabilisation, real-world proving, and soak — rather than padded feature dumps. 0.19.x in particular is a soak window: bug-fix patches while we gather field feedback, so that 1.0's stability guarantees are something we've already demonstrated by the time we make them.
Issues and ideas are welcome — see CONTRIBUTING.md.