1.15.0 — 2026-06-29
Version 1.15.0 graduates the final thirteen modules to Stable. With this release every bQuery module is Stable and bound by the no-breaking-changes-between-minor-releases contract. Every graduation is additive — 1.14.x and earlier APIs continue to work unchanged, and there are no breaking changes.
TIP
Use the per-module guides linked from each section for full reference. This page summarises what changed; the guides cover how to use it. The canonical maturity record (with per-module status history) lives in STABILITY.md, enforced by bun run check:stability.
Headlines
- Thirteen modules graduate to Stable —
view,forms,i18n,a11y,dnd,media,plugin,devtools,testing,storybook,concurrency,ssr, andserver. The Beta and Experimental tiers are now empty. @bquery/bquery/view→ declarative enter/leave/move transitions plus an optional, build-tool-agnostic expression compiler that removes the'unsafe-eval'requirement.@bquery/bquery/forms→ progressive-enhancement form actions (formAction,useFormStatus) and anoptimistic()update primitive.@bquery/bquery/i18n→ ICU MessageFormat support plus optional, dependency-free message-extraction tooling and abquery-i18nCLI.@bquery/bquery/router+@bquery/bquery/server→ an opt-in, bundler-agnostic file-route convention with typedload/action.@bquery/bquery/devtools→ a stable, versioned bridge protocol and a reference Manifest V3 browser extension.
Stable graduations
All thirteen graduate with frozen public surfaces, documented exit criteria, and dedicated *-stable test suites. Each module guide carries its exit-criteria checklist and (where relevant) per-runtime or per-directive support matrix.
| Module | From | Notes |
|---|---|---|
view | Beta | Directive set + expression grammar frozen; transitions + optional compiler shipped. |
forms | Beta | Batteries-included surface frozen; progressive-enhancement actions + optimistic updates. |
i18n | Beta | Formatting/locale surface frozen; ICU MessageFormat documented; extraction tooling added. |
a11y | Beta | Surface frozen; audit maps every finding to a WCAG 2.1 criterion (auditRules, wcag). |
dnd | Beta | Keyboard model hardened; accessibility statement published. |
media | Beta | Composable surface frozen; SSR-safe defaults documented and verified. |
plugin | Beta | Hook-bus / DI / lifecycle frozen; install/uninstall symmetry proven; definePlugin() added. |
devtools | Beta | Versioned bridge protocol + reference browser extension. |
testing | Beta | Testing-Library-parity surface frozen; runner integration (Vitest / Jest) documented. |
storybook | Beta | Helper surface frozen; unsafeHtml security contract pinned. |
concurrency | Experimental | CSP-safe module workers (no mandatory 'unsafe-eval'); client UI-scheduling primitives. |
ssr | Experimental | Directive parity, resumability, and production hydration resolved; surface frozen. |
server | Experimental | First-party sessions, CSRF, guards, and auth; ctx / app contract frozen. |
New, additive APIs
View — transitions + optional compiler
Declarative enter/leave/move animations via bq-transition, bq-in, bq-out, bq-transition-duration, and bq-transition-easing on bq-if / bq-show, and bq-animate="flip" for FLIP move animations when bq-for items reorder. They delegate to the existing motion engine, skip the initial paint, defer removal until the leave finishes, and honour prefers-reduced-motion.
The optional @bquery/bquery/view/compiler (compileViews, compileToModule, compileExpression, emitModule, and the bquery-view-compile CLI) pre-parses bq-* expressions into with-free update functions, so the runtime can skip the new Function() evaluator and run under a strict CSP without 'unsafe-eval'. Un-compilable expressions transparently fall back to the runtime evaluator. See the View guide.
Forms — actions + optimistic updates
formAction(target, options) binds a form to a server action: it POSTs natively without JS and progressively enhances to a fetch-based submit with reactive pending / error / result state when JS is present. useFormStatus(action) exposes read-only status signals, and optimistic(base, reducer) folds pending drafts over a base value and reverts automatically (add / run / clear). Composes with the validation pipeline and the server module's csrf(). See the Forms guide.
i18n — ICU MessageFormat + extraction
Typed arguments ({count, plural, …}, {n, selectordinal, …}, {gender, select, …}) route through a locale-aware formatter backed by Intl.PluralRules, with offset:, exact =N selectors, nested arguments, the # token, and apostrophe escaping. New defineMessages() / formatMessage() helpers, plus the optional, dependency-free @bquery/bquery/i18n/extract toolkit and bquery-i18n CLI that scans source and merges catalogs without overwriting translations. See the i18n guide.
Router + Server — file-based routing
createFileRoutes(manifest, options?) turns a bundler glob (such as import.meta.glob) or a hand-written map into the same RouteDefinitions createRouter() already consumes — routes/users/[id]/+page.ts → /users/:id, [...rest] → *, (group) dropped — with specificity sorting and typed load / action exports. Loaders run on the server before render and on client navigation (createRouteData / useRouteData); the server module's mountFileRoutes() / createFileRouteServerRoutes() wire a route's action to a <form> POST, composing with csrf(). Programmatic routing stays fully supported and unchanged; no bundler is shipped. See the new File-based Routing guide.
Devtools — bridge protocol + reference extension
A stable, versioned bridge protocol (connectDevtoolsBridge, the transport-agnostic createBridgeServer, serializeComponentTree, BRIDGE_PROTOCOL_VERSION / BRIDGE_SOURCE / BRIDGE_CAPABILITIES) and a reference Manifest V3 browser extension (component tree, signal/store inspection, live timeline) in extension/. See the Devtools guide.
Smaller additions
- a11y — every
AuditFindingnow carries its WCAG 2.1 criterion (wcag), and the full rule catalog is exported asauditRules. - forms —
createFieldArray()gains an optionalgetKeyfor keyed reconciliation, pluskeys()/keyAt(index). - plugin —
definePlugin()infers a plugin's install-options type for third-party authors.
Migration notes
There are no breaking changes in 1.15.0. All 1.14.x and earlier APIs continue to work unchanged.
The thirteen graduations are status changes, not API changes — code already using these modules needs no edits. Going forward, the now-Stable modules are covered by the no-breaking-changes-between-minor-releases contract.
Engines
Publish and local validation target Node.js ≥ 24.0.0 and Bun ≥ 1.3.13. See Supported Runtimes.