-
OpenTelemetry tracing. A storefront that sets
OTEL_EXPORTER_OTLP_ENDPOINTat build time exports traces of its server-side work through the standardOTEL_*configuration; without it nothing is installed. Queries, links and component resolvers each become spans nested under the Nitro request span, and an upstream API call made while a resolver runs nests under that resolver — so a trace attributes upstream time to the work that caused it.What spans carry. Attributes are counts and names a backend can group by: how many entities a resolver asked for, a token name, the app a handler comes from. Entity-id lists, link payloads and handler metadata stay in the local dev tree that feeds devtools, because a span over a backend's payload ceiling is dropped whole — which would lose the slowest requests first.
-
Query, link and entity-component caches now key on the market, and query and link caches also key on the pagination limit. Two markets that share a language and a currency no longer read each other's cached results, and a request for 24 items no longer receives the slice a different page size cached.
The key format changed, so existing cache entries become unreachable on upgrade and expire on their own TTL. Expect one cold period after the deploy.
-
Add the consent-aware analytics system.
useAnalytics()returns{ track, register, unregister };track(Token, payload)emits a typed event whose token carries its own payload schema.@laioutr-core/core-types/analyticsprovides the token factories and the platform's ownweb/*events,@laioutr-core/canonical-types/analyticstheecommerce/*commerce vocabulary.Breaking: the specialized tracking composables are removed.
-
Markets can be set to
draft, and a project can name its default market.A draft market still serves its own host so it can be checked before launch, but it is excluded from hreflang alternates,
og:locale:alternate,x-default, and market switchers, and its pages
- Stop the reflect endpoint from serving a previous deployment's section and block catalog. Its cached reflection is now keyed by build id, so a redeploy is a cache miss instead of inheriting whatever the last build left behind, and two frontends sharing one Redis no longer overwrite each other's entry. Cached entries expire
- Add
aiDisclosuretoMedia, recording whether an asset was fully AI-generated ('generated') or altered by generative AI ('modified'). Available on images, videos and audio; a video'sposterand an audio'scovercarry their own value independently of the parent.
-
Fill hreflang alternates,
og:locale:alternate,x-defaultand the locale switcher with each locale's own route params instead of the current locale's.On a page whose slug is translated per locale, the alternate URLs and the locale-switch target previously reused the current locale's params — pointing at URLs that do not exist in the target locale. Where the page type's
pageIndexregistration implementslocateand reports a complete per-locale map, each locale now gets its own slug, and locales the page does not exist in are omitted from the alternates rather than guessed at.
- Add a configurable trailing-slash policy via
RcProject.config.trailingSlash(defaultfalse). Routes, canonical/hreflang links, switch-locale/market URLs, and theuseMarketPathhelper are generated in the configured shape, and a Nitro server middleware issues a 301 normalizing the opposite shape. The policy is also applied to Nuxt's<NuxtLink>default so client-side navigation hrefs match, and the active value is readable at runtime viaruntimeConfig.public.laioutr.trailingSlash. Domain path prefixes are normalized, so single- and multi-segment prefixes (/fr,/en/us) — including ones written with a stray trailing slash — compose correctly. Fixes homepage alternate/canonical links carrying a trailing slash on path-prefixed domains (/fr/→/fr). The root path/is unaffected.
On path-prefixed domains the homepage now resolves correctly instead of falling through to the 404 page (the core/404 catch-all is no longer market-prefixed, so
- Add a configurable trailing-slash policy via
RcProject.config.trailingSlash(defaultfalse). Routes, canonical/hreflang links, switch-locale/market URLs, and theuseMarketPathhelper are generated in the configured shape, and a Nitro server middleware issues a 301 normalizing the opposite shape. The policy is also applied to Nuxt's<NuxtLink>default so client-side navigation hrefs match, and the active value is readable at runtime viaruntimeConfig.public.laioutr.trailingSlash. Domain path prefixes are normalized, so single- and multi-segment prefixes (/fr,/en/us) — including ones written with a stray trailing slash — compose correctly. Fixes homepage alternate/canonical links carrying a trailing slash on path-prefixed domains (/fr/→/fr). The root path/is unaffected.
On path-prefixed domains the homepage now resolves correctly instead of falling through to the 404 page (the core/404 catch-all is no longer market-prefixed, so