Repository navigation
v1.12.5
Forge Framework v1.12.5 (2026-10-10T16:25:19Z)
Welcome to this new release of Forge Framework!
Changelog
New Features
- b09cea8: feat(cli): add forge db adopt to carry bun migration state to grove (@juicycleff)
- 2b40c81: feat(cli): forge dashboard new (@juicycleff)
- 96d5729: feat(cli): scaffold a Next.js dashboard with --target=next (@juicycleff)
- 69b95ac: feat(client): add generated cache and stream metadata (@juicycleff)
- 4ae9fc0: feat(client): resolve deployment endpoints and bounded runtime retries (@juicycleff)
- 6fff168: feat(client-core): a duplex binding kind the binder hands over raw (@juicycleff)
- 167bf82: feat(client-core): let a subscription speak first, and again after a reconnect (@juicycleff)
- b12e4bc: feat(client-devtools)!: make /overlay the full panel, move the lean view to /mini (@juicycleff)
- 3aa50d0: feat(client-devtools): causal trace, network view and control rail (@juicycleff)
- 602e2e0: feat(client-devtools): causal trace, network view and control rail (@juicycleff)
- dad3903: feat(client-devtools): close the gap to the panel design (@juicycleff)
- 8f084a1: feat(client-devtools): close the gap to the panel design (@juicycleff)
- 566e2b4: feat(client-devtools): finish the panel design (@juicycleff)
- 11cce0a: feat(client-gen): emit a duplex binding for a send-and-receive channel (@juicycleff)
- eaf38a4: feat(conduit): add Redis Streams and Kafka providers with broker conformance (@juicycleff)
- 48acc83: feat(conduit): add broker consumer controls and resumable backfill (@juicycleff)
- eff3491: feat(conduit): add service messaging and discovery (@juicycleff)
- dff5843: feat(conduit): add typed broker RPC and graceful request draining (@juicycleff)
- 4714fb6: feat(conduit): infer Forge identity and load service configuration (@juicycleff)
- 74a047c: feat(dashboard)!: delete the core server-rendered pages (@juicycleff)
- c04f4b4: feat(dashboard)!: remove the LegacyUI escape hatch and CoreContributor (@juicycleff)
- da20c5c: feat(dashboard): enforce local dispatch admission before caching (@juicycleff)
- 2c8353a: feat(dashboard): inject the request's principal into the shell bootstrap (@juicycleff)
- 1119f19: feat(dashboard): let extensions report version and configured state (@juicycleff)
- d01583c: feat(dashboard): serve the prebuilt shell behind a ShellSource switch (@juicycleff)
- 82e4245: feat(deploy): apply and observe approved Kubernetes plans (@juicycleff)
- 3233a7c: feat(deploy): apply reviewed Compose plans with durable infrastructure (@juicycleff)
- 4466e70: feat(deploy): embed deployment workspace with saved target profiles (@juicycleff)
- 79600a3: feat(deploy): export reviewed Kubernetes controller handoffs (@juicycleff)
- 90f6f0b: feat(deploy): inspect registered infrastructure requirements (@juicycleff)
- 7f22003: feat(deploy): persist settings and state with fenced SQL authority (@juicycleff)
- fc2f763: feat(deploy): publish approved images without changing workloads (@juicycleff)
- 871eb85: feat(deploy): render Kubernetes services and durable backend recipes (@juicycleff)
- 79359ad: feat(deploy): run authenticated local deployment workbench (@juicycleff)
- 7aa8533: feat(deploy): share authoritative settings and connections across CLI and UI (@juicycleff)
- 9d3ec64: feat(deploy): share immutable image builds and registry delivery (@juicycleff)
- 6ea1305: feat(deploy): validate Render and DigitalOcean deployment exports (@juicycleff)
- 73bfa1a: feat(deploy): wire gateways and portable hosted handoffs (@juicycleff)
- b62611c: feat(discovery): load deployment config and advertise reachable addresses (@juicycleff)
- 3020953: feat(models)!: port the nine base models to grove (@juicycleff)
Bug Fixes
- b631e1f: fix(app): stop sending unknown environments to a noop logger (@juicycleff)
- 725c407: fix(ci): reconcile release-please with the repository's real tags (@juicycleff)
- 88bb6f1: fix(cli): add PluginErrorBoundary and dashboard-runtime to dashboard scaffold (@juicycleff)
- e47a6b8: fix(cli): anchor the boundary discriminator to structure, tidy dashboard plugin docs (@juicycleff)
- 85ade4d: fix(cli): correct the Next dashboard scaffold's contractBase (@juicycleff)
- 8c46330: fix(cli): let dry-run adopt survive a missing grove migration table (@juicycleff)
- f2da883: fix(cli): load ForgeDashboard through next/dynamic in the Next scaffold (@juicycleff)
- b8d3aac: fix(cli): make forge db adopt work on real bun tables and reachable after an upgrade (@juicycleff)
- 7ec368f: fix(cli): never overwrite existing files when scaffolding a Next dashboard (@juicycleff)
- 791e7df: fix(cli): pin the generated runner's grove version and normalize DSN scheme case (@juicycleff)
- d056e41: fix(cli): port forge generate to grove (@juicycleff)
- 4d43319: fix(cli): scope adopt's applied-check by group and stop losing partial reads (@juicycleff)
- 0cd3f15: fix(cli): thread the resolved DSN into the grove runner and let db init scaffold before it needs a database (@juicycleff)
- df13a23: fix(client): only a components reference resolves by its trailing segment (@juicycleff)
- 0504ba9: fix(client): read a duplex channel's directions from the operations that speak them (@juicycleff)
- 951b9c6: fix(client): resolve component message refs before speaking a whole channel (@juicycleff)
- 995ebf4: fix(client-core): carry hello/goodbye through a repartition reopen too (@juicycleff)
- 81697e8: fix(client-core): fall through a name candidate that cannot serve as one (@juicycleff)
- 624cd1c: fix(client-core): fall through an empty channel_id to channel (@juicycleff)
- 661ac17: fix(client-core): give LiveBinding.raw the handler type StreamBinder.raw takes (@juicycleff)
- 2b7b3b1: fix(client-core): let a caller holding cache.live speak on a duplex channel (@juicycleff)
- 3dd1c01: fix(client-core): send hello once, order onReconnect after greet, guard goodbye-only (@juicycleff)
- f7f4f6f: fix(client-core): surface a literal channel from the streaming decoder (@juicycleff)
- c281bc9: fix(client-devtools): apply the panel's design, not just its structure (@juicycleff)
- e745eae: fix(client-devtools): build the chrome the design actually specifies (@juicycleff)
- 14045dc: fix(client-devtools): render duplex stream bindings in the streams tab (@juicycleff)
- fa2dc22: fix(client-devtools): stop table columns collapsing, deprecate the lean view (@juicycleff)
- 750c2d9: fix(client-react-devtools): type the props in the mount tests (@juicycleff)
- 75b115f: fix(conduit): allow periodic Redis fsync to confirm durable writes (@juicycleff)
- d5bbb15: fix(conduit): retry Kafka rejections before append during topic startup (@juicycleff)
- 4d7f71e: fix(conduit): scope backfill recovery and gate broker fault integration (@juicycleff)
- 2008152: fix(dashboard): answer 401 when an intent is refused for want of identity (@juicycleff)
- 785c364: fix(dashboard): attribute contributor status at registration instead of inferring it (@juicycleff)
- 81e035c: fix(dashboard): bind generic command replay to trusted scope (@juicycleff)
- 1c088ac: fix(dashboard): clear the graph residue tasks 6+7 review round 1 found (@juicycleff)
- 921b236: fix(dashboard): consume claims after typed output encoding fails (@juicycleff)
- 704ae9b: fix(dashboard): correct comments left describing deleted code (@juicycleff)
- 7d5b296: fix(dashboard): forget contributor status when unregistering through the recording registry (@juicycleff)
- 4ab3254: fix(dashboard): gate the shell pin behind a sentinel and verify its digest (@juicycleff)
- 217abff: fix(dashboard): match typed encoding failures by exact identity (@juicycleff)
- 1f46924: fix(dashboard): preserve contract authorization errors (@juicycleff)
- 63dd223: fix(dashboard): stop redirecting the core paths into a prefix that no longer exists (@juicycleff)
- 9d4e5bd: fix(dashboard): sweep the stale shell docs and tighten the static handler (@juicycleff)
- 3ed25d8: fix(deploy): enforce runtime identity and export boundaries (@juicycleff)
- a78177c: fix(deploy): isolate SQL settings and protect workbench edits (@juicycleff)
- 58f7a12: fix(deploy): preserve Kubernetes lifecycle safety (@juicycleff)
- 32a59e0: fix(deploy): preserve active workloads and reject stale approvals (@juicycleff)
- e0c7221: fix(deploy): preserve managed export endpoints and secret scope (@juicycleff)
- a2b2fc4: fix(deps): move the last three modules onto forge v1.11.0 (@juicycleff)
- 3d0a6e6: fix(deps): move the last three modules onto forge v1.11.0 (@juicycleff)
- e4c057c: fix(deps): replace go-utils with local path in 27 sibling modules (@juicycleff)
- 32559d4: fix(events): declare durability and preserve subscription removal (@juicycleff)
- 3e5fdf5: fix(events): recover durable delivery and drain shutdown safely (@juicycleff)
- fd078e5: fix(queue): escape AMQP credentials and keep passwords out of logs (@juicycleff)
- b3bbf6d: fix(queue): merge credential escaping and log redaction (@juicycleff)
- 192a6f0: fix(release): keep module checks portable and warm canonical Go versions (@juicycleff)
- 00d4c81: fix(scheduler): merge cancellation handling for dispatched jobs (@juicycleff)
- 3023af8: fix(scheduler): stop a cancelled job that was already dispatched (@juicycleff)
- bd5fea5: fix(streaming): keep lifecycle names out of the domain-event slot (@juicycleff)
- ce20853: fix(streaming): merge lifecycle frame follow-ups (@juicycleff)
- f301ade: fix(workbench): replace theme dropdown with an icon button (@juicycleff)
Refactoring
- a23e3ea: refactor(cli): drop the database extension connection code (@juicycleff)
- 0ae5bf5: refactor(cli): remove the last uptrace/bun dependency from database.go (@juicycleff)
- af5eb8c: refactor(dashboard): delete the graph model, slot merging and the component vocabulary (@juicycleff)
- 6925566: refactor(dashboard): delete the server-driven React shell and its 11MB embed (@juicycleff)
- 6d2f7a2: refactor(dashboard): remove the graph kind from the contract transport (@juicycleff)
- 04ab115: refactor(dashboard): trim the pilot contributor to data intents only (@juicycleff)
- cd56e91: refactor(extensions)!: remove the database extension (@juicycleff)
- b3728bd: refactor(logger): drop the zap-coupled re-exports from internal/logger (@juicycleff)
- efef3ea: refactor(streaming): drop the server-rendered dashboard (@juicycleff)
Documentation Updates
- 1654f40: docs(cli): document the grove migration commands and the breaking changes (@juicycleff)
- b93a5a5: docs(client): design SSR dehydrate/hydrate for the web client runtime (@juicycleff)
- 5e64a22: docs(client): preserve the leftover design branches as archives (@juicycleff)
- 52edc19: docs(client): spec optimistic overlays as a rebasing fold (@juicycleff)
- 4dc3270: docs(conduit): document service messaging and broker guarantees (@juicycleff)
- 968f7be: docs(dashboard): correct SLICE_I_DESIGN's rejected redirect plan (@juicycleff)
- 2919dff: docs(dashboard): point the bootstrap comment at shellBase, not basePath (@juicycleff)
- c2b9a88: docs(dashboard): repoint the slice f link at the contract package (@juicycleff)
- 92b4110: docs(dashboard): stop advertising the deleted core pages (@juicycleff)
- 4f4959a: docs(dashboard): stop the GoDoc promising a React shell that was deleted (@juicycleff)
- d972a3e: docs(deploy): document runtime inspection and deployment handoffs (@juicycleff)
- b73072f: docs(streaming): document the test-cache blind spot in mirroredTransportKinds (@juicycleff)
- 108fb1f: docs(streaming): say that a reserved event name is unbindable (@juicycleff)
- 26d34df: docs(web-client): correct what the streaming decoder adds (@juicycleff)
Build System
- ff541d5: build(clients): clear the client packages' Dependabot alerts (@juicycleff)
- 142a338: build(conduit): add module publishing and pinned library releases (@juicycleff)
- c9b5e71: build(conduit): prepare the first published module release (@juicycleff)
- d20f6cb: build(deps): catch streaming, webrtc and webtransport up with auth (@juicycleff)
- 48f1ac3: build(deps): tidy cmd/forge, discovery, auth and conduit (@juicycleff)
- b0744b5: build(docs): clear the docs Dependabot alerts and take next 16.3.8 (@juicycleff)
- 8524f73: build(vscode): clear the extension's Dependabot alerts and move packaging to vsce 4 and ovsx 1.2 (@juicycleff)
- ec6601f: build: take amqp091-go v1.15.0 and OpenTelemetry v1.45.0, and tidy the modules that follow (@juicycleff)
Other Changes
- 1e235d6: chore(client): merge main into duplex message fix (@juicycleff)
- 2cc90ae: chore(dashboard): merge streaming's templ dashboard removal into the W6 GA branch (@juicycleff)
- a01927c: chore(deps): merge main and reconcile streaming's go.mod (@juicycleff)
- 30d4bc2: chore(deps): pin go-utils v1.3.0 and drop the local replaces (@juicycleff)
- 99017af: ci(release): drop removed extensions from every release surface (@juicycleff)
- f6d9869: ci(release): embed the pinned dashboard shell artifact (@juicycleff)
- fa9a68c: ci(release): fix non-atomic dist swap, exit-code leak, and guard status handling (@juicycleff)
- 7025d26: style(conduit): keep inferred configuration lint clean (@juicycleff)
- a9ad144: test(app): make the environment test independent of go test -v (@juicycleff)
- cd94081: test(cli): exercise the generated grove runner end to end (@juicycleff)
- e93d469: test(deploy): build the runtime fixture with workspaces off (@juicycleff)
- 413c589: test(deploy): qualify Kubernetes lifecycle and retained data (@juicycleff)
- ef44f2e: test(deploy): qualify workbench lifecycle and SQL plan handoff (@juicycleff)
- 1fa683d: test(deploy): tidy the atlas-v2 fixture and add its go.sum (@juicycleff)
- 6d5a17f: test(streaming): drop the dead graph-route-count assertion (@juicycleff)
- 09c5320: test(streaming): read the client's reserved kinds from its source (@juicycleff)
- 264236b: test(streaming): remove redundant reserved-name test (@juicycleff)
- fc3b4f0: test(streaming): restore guard-pinning test for empty channel_id (@juicycleff)
Installation
Using Go Install
go install github.com/xraph/forge/cmd/forge@v1.12.5Download Binary
Download the appropriate binary for your platform from the assets below.
Using Package Managers
# Homebrew (macOS/Linux)
brew install xraph/tap/forge
# Scoop (Windows)
scoop bucket add xraph https://github.com/xraph/scoop-bucket
scoop install forgeWhat's Changed
Full changelog: v1.12.4...v1.12.5