Skip to content

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 Stableview, forms, i18n, a11y, dnd, media, plugin, devtools, testing, storybook, concurrency, ssr, and server. 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 an optimistic() update primitive.
  • @bquery/bquery/i18n ICU MessageFormat support plus optional, dependency-free message-extraction tooling and a bquery-i18n CLI.
  • @bquery/bquery/router + @bquery/bquery/server an opt-in, bundler-agnostic file-route convention with typed load / 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.

ModuleFromNotes
viewBetaDirective set + expression grammar frozen; transitions + optional compiler shipped.
formsBetaBatteries-included surface frozen; progressive-enhancement actions + optimistic updates.
i18nBetaFormatting/locale surface frozen; ICU MessageFormat documented; extraction tooling added.
a11yBetaSurface frozen; audit maps every finding to a WCAG 2.1 criterion (auditRules, wcag).
dndBetaKeyboard model hardened; accessibility statement published.
mediaBetaComposable surface frozen; SSR-safe defaults documented and verified.
pluginBetaHook-bus / DI / lifecycle frozen; install/uninstall symmetry proven; definePlugin() added.
devtoolsBetaVersioned bridge protocol + reference browser extension.
testingBetaTesting-Library-parity surface frozen; runner integration (Vitest / Jest) documented.
storybookBetaHelper surface frozen; unsafeHtml security contract pinned.
concurrencyExperimentalCSP-safe module workers (no mandatory 'unsafe-eval'); client UI-scheduling primitives.
ssrExperimentalDirective parity, resumability, and production hydration resolved; surface frozen.
serverExperimentalFirst-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 AuditFinding now carries its WCAG 2.1 criterion (wcag), and the full rule catalog is exported as auditRules.
  • formscreateFieldArray() gains an optional getKey for keyed reconciliation, plus keys() / keyAt(index).
  • plugindefinePlugin() 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.

Released under the MIT License.