2.7.0 (2026-09-06)
⚠ BREAKING CHANGES
- atoms:
rootAtomis renamedrootRoute,createRootAtomto
rootRouteAtom,redirectAtomtoredirectRouteAtom,queryParamAtomto
queryParamRouteAtom, andvalidateAtomtovalidateRouteAtom. Their
options types follow:RootOptionsbecomesRootRouteOptionsand
QueryParamOptionsbecomesQueryParamRouteOptions.locationAtom,
queryAtom,notAtom,navigationGuardAtomand every name already ending in
RouteAtomare unchanged.
Ticket: 789
- atoms:
resolvedAtomis removed.resolvedAtom(route, load)becomes
asyncRouteAtom(route, name, load).data, wherenameis what the loaded object
binds to if the route is ever used for gating.followResolvedRedirectsis
renamedfollowAsyncRedirectsand takes.dataatoms.preloadRoutesis
renamedpreloadAsyncRoutes, matchinghydrateAsyncRoutes/followAsyncRoutes.
TheResolverandRouteLookuptypes are replaced by oneRouteLoader, and
AsyncRouteAtom.lookupis renameddata.hydrateAsyncRoutes,
followAsyncRoutesandAsyncRouteSnapshotare unchanged.
Ticket: 675
- jarl-atoms:
notAtomtakes a single route atom rather than a spread of
them. Combine several withunionRouteAtom([...])first.
Ticket: 420
- changelog: suppression' mid-paragraph, no colon, not a real footer,
and the parser swept it (plus the trailing Co-Authored-By line) into the
release notes as a fabricated BREAKING CHANGES entry.
What it described was also stale even if it had been real: the very next
commit (2db21b1) abandoned that reset-to-2.0.1 plan and continued from
2.5.0 instead, once it turned out npm's dependent-check and dist-tags
made the rollback impossible. Nothing about jarl's public API actually
broke in 2.6.0 - every other entry in the release is an internal
release-process change. Safe to hand-edit: @semantic-release/changelog
only ever prepends new releases, it never rewrites past entries.
Features
- atoms: add validateAtom for constraints spanning several segments (794f8c0)
- atoms: one asyncRouteAtom API for async route data (d67c00c)
- docs: 678 — routing demo that switches on a page route atom (b5a0aec)
- docs: 907 — host an llms.txt for coding agents installing jarl (daff689)
- docs: demo page for cancelling navigation on dirty edits (5870133)
- docs: demo page for custom path atoms (yyyy-mm-dd, name.ext) (f89999e)
- docs: link jarl-atoms/jarl-react identifiers in code blocks to their API reference (045b894), closes #slug
- docs: link local relative imports in demo source to GitHub (2cc8dfb)
- jarl-atoms: 420 — notAtom takes one route and an options object (de0e997)
- jarl-atoms: 420 — unionRouteAtom combines several routes into one (a2af36c)
- jarl-atoms: 778 — veto any navigation with navigationGuardAtom (9ac8b10)
- jarl-atoms: 927 — enumRouteAtom binds a path segment from a fixed set of values (5b43305)
- jarl-react: 435 — forward NavOptions through useNavigate (5311c85)
- jarl-react: 778 — useNavigationGuard binding (4b934d2)
Bug Fixes
- docs: bundle the production SSR server self-contained (82c9772)
- docs: stop exporting non-component values from Fast Refresh boundaries (abfccd6)
- e2e: 823 — update registry-smoke to the exports 675/789 renamed (3befb44)
- infra: JARL1183 — reach the SSR instance directly, dropping the load balancer (48ede6c)
- infra: JARL1188 — detach the /ssr/* behaviour so the VPC origin can be updated (3e1b2e9)
- infra: JARL1188 — restore the /ssr/* behaviour on the repointed VPC origin (3292e96)
- infra: JARL1337 — pin the SSR AMI so deploys stop replacing the instance (6771c3e)
Documentation
- changelog: remove the bogus 2.6.0 BREAKING CHANGES section (59f9c94)
Code Refactoring
- atoms: 789 — name every route atom
*RouteAtom, and only route atoms (cf4d08e)