v2.6.0
Better Fullstack has always been good at the first minute of a project. 2.6.0 is about every minute after it.
Until now the CLI could scaffold a stack and then had nothing more to say. This release adds a full lifecycle around an existing project — inspect it, plan a change, apply it, undo it — and it does that transactionally, so a half-applied change is no longer something you resolve by hand.
Change a project after you've created it
Two new commands, and two existing ones rebuilt on the same contract:
status(new) — what your project is actually made of, read from its manifest rather than guessed.remove(new) — takes a stack part back out, behind a plan-then-apply gate.update— now plans a stack change, shows the diff, and applies it only against a review token from that exact plan.doctor— checks the project against the current templates and reports drift.
The transaction layer underneath them is new in this release, and every mutating path runs through it. If an apply fails partway, the project is restored rather than left in a mixed state, and bfs_recover_project_transaction can recover a run that was interrupted. Plans and applies are bound together by a token, so an apply cannot silently act on a stale plan — the thing you reviewed is the thing that runs.
The MCP server exposes the same lifecycle: bfs_plan_part_removal, bfs_apply_part_removal, and bfs_recover_project_transaction join the existing planning tools, so an agent gets the identical review-then-apply contract a human does.
One command reaches every language
The old hero command pinned --backend none --frontend none --ecosystem react-native to scaffold a mobile app. Beyond reading as a double negative, it quietly locked you out of Kotlin, Swift, and Flutter, which only existed inside the multi-ecosystem composer.
--shape fullstack|frontend|backend|mobile replaces that. You name what you're building, the CLI asks which language or platform fits, and it runs only the prompts that shape needs. Mobile routes React Native through the existing flow and Kotlin, Swift, and Flutter through stack-graph parts. .NET frontends now build through the stack graph too, instead of a special case.
New stack options
- Vite+ workspace tooling — the Vite+ toolchain as a first-class workspace option, with compatibility gates so it cannot be combined into a broken workspace.
- Bot protection — Vercel BotID and Cloudflare Turnstile, gated to the frontends and backends that can actually host them.
- Vercel Analytics — with a warning when the chosen frontend has no template for the provider, rather than generating something that does not run.
Web
The hero is now full-viewport and centres on a single copyable command, with a command bar for MCP clients beside it. The stack builder is grouped into sections with compact subsections and renders every category as option cards, which makes a 973-option surface navigable instead of a wall of pills. Returning visitors get a changelog widget. Five documentation pages that crashed are fixed, and the duplicates around them are gone.
Fixes worth calling out
Roughly a third of this release is hardening on the lifecycle work above — ownership and recovery, mutation boundaries, provenance-safe removal reviews, executable removal commands. Beyond that: paraglide-js is held at 2.23.2 because lix 0.12's native addon needs glibc 2.38+ and breaks Vercel's Amazon Linux image; the Storybook family is held at 8.x; Strapi client calls no longer pass Next fetch options they never supported; and the AdonisJS SigNoz tracing import gets the explicit extension nodenext requires.
Full commit log
🚀 Features
- Complete trusted project lifecycle - by @Marve10s (9e6a9)
- Add Vite+ workspace tooling - by @Marve10s (5299e)
- Add bot protection providers - by @Marve10s (4a451)
- Add Vercel Analytics integration - by @Marve10s (8a5b8)
- cli:
- web:
- Add X social proof to hero - by @Marve10s (04565)
- Turn the hero into one copyable command - by @Marve10s (dad02)
- Full-viewport hero, MCP client command bar, cleaner docs header - by @Marve10s (db2f1)
- Show returning visitors a changelog widget - by @Marve10s (758a4)
- Group stack builder into sections with compact subsections - by @Marve10s (22ed4)
🐞 Bug Fixes
- Address lifecycle review findings - by @Marve10s (4f801)
- Close executable docs review gaps - by @Marve10s (8f852)
- Close trusted lifecycle review gaps - by @Marve10s (fd214)
- Validate active public documentation - by @Marve10s (04f2c)
- Hash browser lifecycle operation ids - by @Marve10s (60285)
- Preserve lifecycle ownership and recovery - by @Marve10s (86de3)
- Close lifecycle mutation gaps - by @Marve10s (d7ac3)
- Exclude recovery snapshots from dependency updates - by @Marve10s (0b51b)
- Make removal reviews provenance-safe - by @Marve10s (769de)
- Close lifecycle transaction gaps - by @Marve10s (6728a)
- Close lifecycle review gaps - by @Marve10s (e7a02)
- Preserve transactional addon updates - by @Marve10s (583fd)
- Strengthen lifecycle qualification - by @Marve10s (2e050)
- Bind lifecycle removal safety - by @Marve10s (5902d)
- Emit executable removal commands - by @Marve10s (1d843)
- Close removal lifecycle gaps - by @Marve10s (1d914)
- Harden removal edge cases - by @Marve10s (107ae)
- Harden lifecycle apply boundaries - by @Marve10s (1bf2f)
- Bind reviewed dependency rewrites - by @Marve10s (c73d2)
- Complete lifecycle review safety - by @Marve10s (318b3)
- Enforce Vite+ workspace compatibility - by @Marve10s (7f060)
- Keep tooling overlays on the legacy pipeline and restore lost gates - by @Marve10s (29c14)
- Close bot protection integration gaps - by @Marve10s (2c6bb)
- Let CLI defaults apply before tooling overlays expand into addons - by @Marve10s (b6459)
- Treat absent bot protection as none in compatibility auto-adjust - by @Marve10s (a0824)
- Hide unsupported Vercel Analytics choices and detect Next in mixed stacks - by @Marve10s (bdbe7)
- Keep tooling overlays flat and use the documented Vite+ overrides - by @Marve10s (6d36e)
- Require the self-hosted Next.js backend for Vercel BotID - by @Marve10s (e3da3)
- Keep CLI overlay expansion on the graph-derived parts - by @Marve10s (feb95)
- Keep both bot protection and analytics README sections after the merge - by @Marve10s (68210)
- Validate tooling overlay ecosystems and Vite+ conflicts on the flat path - by @Marve10s (bc0d3)
- Randomize tooling profiles, keep selected test runner, init git before install - by @Marve10s (2e260)
- Allow switching off Vite+ and align the generated Vitest family - by @Marve10s (6a9ea)
- Skip the initial commit when Git is unavailable - by @Marve10s (8db4e)
- Strip owner names from MCP part specs before telemetry - by @Marve10s (7b3be)
- Mount Nuxt Vercel Analytics from the runtime entry and drop solo graph parts - by @Marve10s (7433f)
- Journal transaction writes and close the remaining review findings - by @Marve10s (fdb0c)
- Upload only registered stack selections in part telemetry - by @Marve10s (50ef2)
- Run workspace vite scripts through vp under the Vite+ toolchain - by @Marve10s (dbfc9)
- Stop shapes losing to conflicting input, restore dropped MCP clients - by @Marve10s (fe1b1)
- Hold generated projects on safe paraglide, skip native install everywhere - by @Marve10s (58bae)
- Reject unsupported stacks at validation, not mid-generation - by @Marve10s (b2da4)
- Keep standalone addons in the graph and in the reproduced command - by @Marve10s (59ba4)
- Report what the tools actually do - by @Marve10s (5a978)
- Unblock Release Guard and reject two more contradictory shapes - by @Marve10s (4cc9f)
- ci:
- cli:
- Make a shape fail loudly instead of losing quietly - by @Marve10s (9a446)
- Validate a shape before touching the filesystem - by @Marve10s (e49dc)
- Only offer shapes the generator can actually deliver - by @Marve10s (a9aef)
- Keep the shape guards honest in both directions - by @Marve10s (1b896)
- Apply the mobile and required-half guards on every path - by @Marve10s (6bb6f)
- Scope the required-half guard to the chosen ecosystem - by @Marve10s (e2a50)
- Reject mobile selectors on shapes that build no mobile app - by @Marve10s (383bd)
- Journal transaction writes before mutating bytes - by @Marve10s (f63e5)
- Stop offering capabilities that add refuses - by @Marve10s (e122d)
- Narrow the unverified journal window and guard the .NET half - by @Marve10s (c6037)
- deps:
- signoz:
- strapi:
- templates:
- test:
- web:
- Warn when the analytics provider lacks a template for the chosen frontend - by @Marve10s (9183c)
- Restore five crashed docs pages and cut duplicate docs - by @Marve10s in #393 (b024c)
- Make the changelog modal scroll and drop the card icon - by @Marve10s (5e4ef)
- Render every builder category as option cards, drop pill rows - by @Marve10s (402d9)