Skip to content

Releases: bgub/fig

fig-tanstack@0.1.2

Choose a tag to compare

@github-actions github-actions released this 18 Aug 20:22
64846f2
  • @bgub/fig-tanstack-router@0.1.2
  • @bgub/fig-tanstack-start@0.1.2

Fix consecutive TanStack Router view transitions (732f01c)

TanStack Router history loads now retain their promises inside Fig's transition
scope, so preloaded, cached, back, and forward routes continue to animate shared
elements across consecutive client-side navigations.

fig@0.1.2

Choose a tag to compare

@github-actions github-actions released this 17 Aug 19:59
9186f80
  • @bgub/fig@0.1.2
  • @bgub/fig-dom@0.1.2
  • @bgub/fig-reconciler@0.1.2
  • @bgub/fig-server@0.1.2

Ignore temporary view transition styles during hydration (55cf6d2)

Hydration diagnostics no longer report inline view transition declarations
that match a streamed surface's data-fig-vt-* annotations, including the
otherwise capture-only style attribute. Unrelated authored server styles on
the same element continue to produce the normal diagnostic.

fig@0.1.1

Choose a tag to compare

@github-actions github-actions released this 12 Aug 01:38
02fb6a1
  • @bgub/fig@0.1.1
  • @bgub/fig-dom@0.1.1
  • @bgub/fig-reconciler@0.1.1
  • @bgub/fig-server@0.1.1

Document every JSR entrypoint and exported symbol (e32242a)

All Fig packages now publish module documentation for every JSR entrypoint and
API documentation for their exported symbols. This makes the generated JSR
reference complete and improves package discovery and quality scores.

fig@0.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 00:55
  • @bgub/fig@0.1.0
  • @bgub/fig-reconciler@0.1.0
  • @bgub/fig-dom@0.1.0
  • @bgub/fig-server@0.1.0

Publish stable pre-1.0 releases (6488c45)

Fig's runtime, tooling, and TanStack adapter packages now publish without an
alpha prerelease suffix. Patch releases preserve compatibility within their
current 0.x minor line; minor releases may make breaking changes before 1.0.

Asset descriptors use native names and preserve native ordering (9bccb4d)

Client-inserted and host-rendered stylesheets now form precedence buckets in
the order each distinct precedence value is first discovered. A stylesheet
discovered later for an existing bucket is inserted before the following
bucket, keeping lazy and payload-delivered CSS in its intended cascade order.

Raw <script> elements now enter the asset registry only when explicitly
marked async. Non-async scripts retain their native document position and
execution semantics; explicit script() descriptors continue to support all
asset-delivery modes.

Asset descriptor options and serialized payload asset rows now use native HTML
attribute names: crossorigin, fetchpriority, and http-equiv. The previous
React-style crossOrigin, fetchPriority, and httpEquiv spellings are
removed.

Host resource resolution now receives the actual host parent and fixes
out-of-band placement once per fiber. SVG and MathML titles consequently stay
in their native namespace, while HTML titles carrying itemprop stay in-tree;
ordinary document titles continue to use the shared head registry.

Preload eligible host images during server rendering (234ae92)

HTML and Payload rendering now derive image preload assets from eager <img>
hosts. The hints share Fig's existing asset registry, dedupe against explicit
preloads, preserve responsive srcset and sizes selection, and arrive before
the content that depends on them.

The first ten distinct images receive early shell delivery without being
forced to high browser priority. Lazy, explicitly low-priority, data-URL,
<picture>, and <noscript> images remain untouched.

Drop the clientReferenceAssets helper from the main entry (282c94d)

The runtime helper clientReferenceAssets(reference) (read a client
reference's declared assets, resolving thunks) had two homes; it is now
exported only from @bgub/fig/internal, where its consumers — the payload
serializer and framework manifest plumbing — already import it. Apps
declare assets with clientReference({ assets }) and never call the
helper. The ClientReferenceAssets type stays on the main entry because
it appears in the public ClientReferenceOptions.assets signature.

Pull request & contributors

Stable client-reference identity across decodes (b3e2057)

@bgub/fig/payload exposes createPayloadClientReferenceResolver(resolve):
a caller-owned stateful resolver passed as the resolveClientReference
decode option. With one, every resolvable client reference decodes to one
resolver-owned wrapper per reference id across all decodes sharing the
resolver — gated, ungated, or asynchronously resolved — so re-decoding a
payload updates islands in place instead of remounting them. Reveal gates
ride the decoded element instances rather than the wrapper: each decode
gates exactly its own content, so a newer decode's pending assets never
re-suspend an island already on screen, while its new island instances
still wait for the stylesheets they declared. The caller owns the
resolver's lifetime; under fast refresh no manual invalidation is needed
(hot edits remap the latched resolution through component families, and
unaccepted updates full-reload), while delete/clear cover manifest
swaps without a reload. With a plain resolve function, gated and async
references keep their per-decode wrapper identity, now with the same
per-element gating.

@bgub/fig-dom's payloadDataLoader accepts the stateful resolver through
its existing resolveClientReference option.

Framework adapters can retain one resolver across refreshes and navigations,
preventing asset-gated islands from remounting on every re-decode.

Publish metadata only with its visible owner (842943c)

Title and meta resources now travel through Payload as owner-bound
declarations and update the document only when their decoded tree commits.
Pending or superseded refreshes keep the previous metadata visible.

Streaming HTML now treats Suspense fallbacks as metadata owners and reconciles
the completed visible metadata snapshot in the boundary reveal operation.
Partial segments and failed or abandoned primary work cannot mutate the head.

The obsolete onAssetError option and its asset-diagnostic types are removed:
late metadata is delivered with its owner instead of being dropped.

Identify why data-loader signals abort (e9df253)

Data-resource loader signals now expose whether their generation was
superseded, evicted, or disposed. Rejected generations and values invalidated
through an attributed error receive the originating error as their abort
reason; reasonless rejections receive the platform's default AbortError.

Supersession abort waits for the successor's value (77bde26)

Refreshing a fulfilled data-resource entry no longer aborts the previous
generation's signal when the new load starts. Authority transfers when the
successor's value publishes: the visible stale value keeps streaming through
the refresh window (payload holes keep filling), subscribers re-render onto
the new tree in the same pass the old generation retires in, and a failed
refresh leaves the previous generation fully alive — stale value usable,
live holes included. Value-less pending loads still abort immediately when
superseded, and hydrate-over/eviction/disposal still end every generation.

This closes the gap where refreshing a serialized-component resource while
its holes were still streaming surfaced "Payload decode aborted." through
the nearest ErrorBoundary — cancellation now stays retirement, never a user
error, for plain consumers too.

DevTools show per-fiber data-resource dependencies (6de24b1)

@bgub/fig data stores expose inspectDataDependencyCanonicalKeys(owner),
a dev-only inspection read of the canonical keys an owner's committed
readData subscriptions point at (returns an empty array in prod builds).

@bgub/fig-reconciler devtools snapshots record those keys on every fiber
as FigDevtoolsFiberSnapshot.dataResourceCanonicalKeys. The field is
required, so external snapshot producers must supply it (empty array when
unknown).

The @bgub/fig-devtools panel filters the Data section by the selected
fiber's dependencies instead of always listing the entire store, and tree
rows show a green badge with the fiber's data-resource read count next to
the blue hook-count badge. Selecting
the root still lists every entry, including those with no committed
subscriber (unclaimed preloads, hydrated-but-unread rows). Refreshing
entries no longer render a redundant Pending row.

ensureData: the awaitable read for code outside render (4225445)

ensureData(resource, ...args) resolves the value a key would render with:
the cached value when the entry has one (kicking the same background
revalidation a stale readData does), or the in-flight load's settlement on
a cache miss. It rejects with the error readData would throw, follows
superseding loads and server hydrations to the authoritative value, and never
subscribes — pair it with readData in the component, which claims the
settled entry within the preload retention window. An awaiting caller retains
the entry, so the unclaimed-preload eviction cannot abort a load out from
under an ensure.

Available as a free function (ambient store) and on the explicit handle
(readDataStore(), root.data). This is the delegation verb for external
routers: a route loader awaits ensureData, the component reads with
readData, and the data store stays the single cache.

Serialized components move to the data-resource model (0601f9c)

Serialized trees are now ordinary data resources: servers return plain
Payload streams, and clients consume them through keyed dataResource
instances with payloadDataLoader. Refresh is refreshData, navigation can
select a new key, and back/forward navigations reuse cached entries. Commits
wait for the incoming Payload, island modules, and stylesheet gates.

Supporting API additions: payloadDataLoader accepts a prepareAssets
override (defaults to insertAssetResources), and decodePayloadStream
accepts an onClientReference observer for reference metadata.

Compose host behavior with mixins (3696ce1)

Core now exports createMixin() and resolves render-time host behavior through
the mix prop. Mixins may contribute host props or nested mixins while keeping
the host type and subtree fixed. Explicit host props form...

Read more

fig-tooling@0.1.1

Choose a tag to compare

@github-actions github-actions released this 12 Aug 01:38
02fb6a1
  • @bgub/fig-refresh@0.1.1
  • @bgub/fig-vite@0.1.1

Document every JSR entrypoint and exported symbol (e32242a)

All Fig packages now publish module documentation for every JSR entrypoint and
API documentation for their exported symbols. This makes the generated JSR
reference complete and improves package discovery and quality scores.

fig-tooling@0.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 00:55
  • @bgub/fig-refresh@0.1.0
  • @bgub/fig-vite@0.1.0

Let tooling and adapters follow independent release trains (ac49e13)

Fast Refresh and Vite now accept compatible runtime releases instead of
requiring the same exact Fig version. The TanStack Router and Start adapters do
the same while remaining pinned to matching versions within each adapter pair.

Publish stable pre-1.0 releases (6488c45)

Fig's runtime, tooling, and TanStack adapter packages now publish without an
alpha prerelease suffix. Patch releases preserve compatibility within their
current 0.x minor line; minor releases may make breaking changes before 1.0.

Renderers now install their reconciler implementation (7b623c8)

Fig DOM and Fast Refresh now depend on their exact reconciler version directly.
Applications no longer need to install @bgub/fig-reconciler alongside Fig DOM;
the reconciler remains a direct dependency only for custom-renderer authors.

Fast Refresh connects to Fig DOM through a renderer-owned adapter, ensuring its
family resolver and scheduled updates always reach the same reconciler instance
even when development tooling resolves through a separate package graph.

Refresh resolves the app's renderer runtime (eb95343)

figRefresh now imports @bgub/fig-dom/refresh through its bare specifier
rather than a resolved /@fs/ path, so app-level aliases, dedupe, and
prebundling apply and the refresh scheduler cannot be instantiated twice.

TanStack Start's client graph is prebundled (eb95343)

The TanStack Start adapter now prebundles @tanstack/start-client-core in
development while leaving its application-bound router and Start imports as
external Vite modules. This reduces the module-request waterfall without
freezing generated app entries or the linked Fig adapter packages. Production
continues to use Vite's normal application bundling.

Avoid redundant Vite transforms (e9df253)

Production builds now rely on Vite's scope-aware __FIG_DEV__ replacement
instead of running an additional Babel pass. Development loads the refresh
transformer only when a matching application module needs it.

Use one data-resource API in every environment (a48ce81)

dataResource now covers shared, browser, and server-only loaders without a
second API. Server-only loaders belong behind the framework's server module
boundary; browser code uses an explicit key-only resource when it needs the
same hydrated value.

The pass-through serverDataResource API, @bgub/fig/server entry point,
figData Vite transform, and generated browser resource stubs are removed.

TanStack Start gains state-preserving Fast Refresh (5fecb33)

The TanStack Start Vite adapter now installs Fig Fast Refresh automatically.
Component edits update in place and preserve hook state in accepted modules.

@bgub/fig-vite is now a public package containing the reusable Fast Refresh
and server data-resource transforms.

Let Fig's Vite integration own runtime configuration (7b623c8)

The new fig() Vite integration defines Fig's development gate and installs
Fast Refresh. TanStack Start composes it automatically, so applications no
longer need to configure Fig's compile-time mode or SSR package bundling
themselves.

@bgub/fig-vite now uses the application's Fig DOM renderer as a peer instead
of installing a private renderer copy.

The development gate follows Vite's command rather than its mode: serving
enables development behavior, while builds—including --mode development—strip
it from production output.

Published npm packages now expose development artifacts through a Fig-owned
condition, allowing the Vite integration to enable diagnostics and Fast Refresh
for ordinary installs while explicit static overrides remain authoritative and
default production imports retain their previous dead-code elimination. A
static false override also disables Fast Refresh instrumentation.

fig-tanstack@0.1.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 00:55
  • @bgub/fig-tanstack-router@0.1.0
  • @bgub/fig-tanstack-start@0.1.0

Let tooling and adapters follow independent release trains (ac49e13)

Fast Refresh and Vite now accept compatible runtime releases instead of
requiring the same exact Fig version. The TanStack Router and Start adapters do
the same while remaining pinned to matching versions within each adapter pair.

Publish stable pre-1.0 releases (6488c45)

Fig's runtime, tooling, and TanStack adapter packages now publish without an
alpha prerelease suffix. Patch releases preserve compatibility within their
current 0.x minor line; minor releases may make breaking changes before 1.0.

Support the latest TanStack Router and Start releases (70444a1)

Update the TanStack adapters to Router Core's current store and render
acknowledgement contracts. Async act() now also flushes renderer work that
its callback is waiting for, so navigations can settle inside tests.

Add the TanStack Router adapter for Fig (e8761ca)

@bgub/fig-tanstack-router now supplies code-route creation, a Fig router
provider and outlet, router hooks, native anchor links, route preloading, and a
private reactive-store bridge for @tanstack/router-core 1.171.15.

Reduce server-render and TanStack Start overhead (e9df253)

Server rendering now avoids redundant child normalization, component-stack,
and asset-classification work. Route assets are normalized lazily, payload
markers are injected without decoding and re-encoding HTML bytes, and
successful stream cancellation propagates directly through the existing Web
stream chain.

Preserve router provider hydration paths (e99b0ad)

Server rendering now preserves the provider child slot occupied by the client
transition lifecycle. Route descendants therefore derive the same useId
paths on the server and during hydration.

Prioritize render-blocking document assets (58b584c)

Full-document rendering now emits parser- and security-sensitive metadata,
connection hints, critical font and image preloads, and stylesheets before
ordinary metadata and lower-priority JavaScript hints. TanStack Router matches
also register authored links and manifest stylesheets before their generated
module preloads, so render-blocking CSS begins loading earlier without changing
stylesheet order.

Reduce server link allocations (70425b3)

Server-rendered router links now mark their client navigation behavior directly
instead of resolving a synthetic click mixin. Links without state props, binds,
or mixins also avoid creating empty state objects and composition wrappers.
Payload rendering continues to reject links whose client navigation behavior
would otherwise be lost.

Remove useLoaderData; enforce void loaders for data-backed routers (b390db6)

The adapter no longer exposes useLoaderData (standalone, route-bound, or via
getRouteApi): the Fig data store is the single route-data cache, so loader
values are read with readData against the same resource the loader ensured.
useLoaderDeps remains — deps are loader orchestration, not a cache.

In dev builds, a match that commits with loaderData set while
router.context.data is configured now throws a diagnostic naming the route.
Derive navigation-scoped values from useLoaderDeps, search params, or
beforeLoad-returned route context. Routers created without context.data
keep Router Core's native loader semantics untouched.

Reduce server link rendering overhead (6722ac2)

Links rendered on the server now skip browser-only lifecycle, subscription,
preload, and event setup. Server and client links retain matching component
trees for stable hydration, while Payload rendering continues to reject links
whose navigation behavior cannot be serialized.

Reuse server route asset plans (63d1f4e)

Server rendering now builds each route match's asset plan once and reuses it
for match content, head tags, and body scripts. TanStack's inline-CSS manifest
is snapshotted once per render so its generated wrappers do not defeat the
cache.

Simplify the TanStack Router adapter (2d914fa)

The adapter now centralizes route-head translation, constructs shared link
props once, stabilizes match-value selectors, and isolates client navigation
lifecycle handling behind one internal module. Public routing, SSR, hydration,
asset, and navigation behavior are unchanged.

Skip protocol parsing for generated internal links (e9df253)

Router-generated internal links are safe by construction and no longer pass
through WHATWG URL parsing during render. Absolute targets, explicit href
values, and locations marked external still receive the same dangerous-protocol
validation.

This removes repeated URL construction from link-heavy SSR pages while
preserving link output and navigation behavior.

Build generated TanStack Start file routes with Fig (9f4dab9)

@bgub/fig-tanstack-router now implements generated file routes, lazy route
records, lazy components, and lazy loader functions. TanStack Start builds and
reloads those routes in development through its existing generator and code
splitter.

@bgub/fig-tanstack-start now exposes Start configuration and middleware
factories. Its demo covers request-isolated middleware context, server and
client redirects, generated error and not-found routes, split chunks, SSR,
hydration, and server-function mutations.

Preserve TanStack Start inline CSS during hydration (5ef0441)

Adopt the server-rendered contents of TanStack Start's inline CSS placeholder
so full-document hydration no longer replaces the application styles with an
empty style element.

Add canonical bound route APIs (e90e3ea)

Fig routes and getRouteApi now provide bound match, params, search,
loader-deps, loader-data, context, navigation, link, and not-found helpers. The
adapter also adds active-match selection, reactive route matching,
MatchRoute, and declarative Navigate APIs.

Expand TanStack Router hook and link parity (2024b8c)

Router selectors now honor structural sharing, including the router-wide
default, and support selected locations plus loose or optional match reads.
Links gain composable active and inactive props and render-function children
with active and transitioning state. linkOptions and createRouteMask add
zero-wrapper helpers for reusable, type-checked navigation options. A
published compatibility matrix now distinguishes the guaranteed Start surface
from compatibility, deferred, and deliberately omitted APIs.

Complete Fig-native data and navigation patterns (4bad213)

TanStack Start routes can now preload Payload data and return immediately,
letting Fig Suspense stream the result and its asset resources without copying
values into Router loader data. Initial Payload responses registered after the
document shell starts are embedded before hydration, preventing a duplicate
client request.

The Router adapter adds modern object-only useBlocker and reactive
useCanGoBack hooks, makes the concrete Router and RouteApi constructors
internal, and rejects unsupported proximity preloading in LinkProps.
Fig's structural ViewTransition remains the sole document-transition owner,
even when a TanStack navigation carries its viewTransition option.

Make data resources the router's default external cache (34e3495)

Put root.data in router context, return ensureRouteData from loaders, and
read the same resource with readData in components. Data-backed routers now
default defaultPreloadStaleTime to 0, the loader helper resolves to void
so the value is not duplicated in loaderData, and route reset invalidates
attributed Fig data errors before re-running the router. The adapter also
renders Router Core's global not-found state through the root outlet.

Complete route match rendering semantics (947d30b)

Route matches now honor pending delay and minimum duration, route and default
remount dependencies, explicit Suspense wrapping, client-only and data-only SSR
policies, redirects, and router-level error reporting. Scroll restoration is
installed idempotently and emits its Start SSR bootstrap once.

Keep outgoing route hooks valid through unmount (d280aa1)

Route-scoped hooks now retain their mounted match while navigation replaces the
active match list. Outgoing routes can subscri...

Read more

fig@0.1.0-alpha.7

fig@0.1.0-alpha.7 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 31 Jul 06:56
14ca83a
  • @bgub/fig@0.1.0-alpha.7
  • @bgub/fig-dom@0.1.0-alpha.7
  • @bgub/fig-reconciler@0.1.0-alpha.7
  • @bgub/fig-refresh@0.1.0-alpha.7
  • @bgub/fig-server@0.1.0-alpha.7
  • @bgub/fig-tanstack-start@0.1.0-alpha.7
  • @bgub/fig-tanstack-router@0.1.0-alpha.7
  • @bgub/fig-vite@0.1.0-alpha.7

Allow interactive transitions to interrupt native animations (24b54bb)

transition() and the function returned by useTransition() now accept
viewTransition: "interrupt". When another native View Transition is already
animating, Fig skips it, waits for its cleanup to settle, and immediately
commits the latest rendered state, starting a new transition when that commit
has participating boundaries. The default remains serialized so navigations
and streamed reveals retain uninterrupted motion. Interruptible DOM
transitions also drop the implicit full-page snapshot so controls outside
explicit transition surfaces stay live and can express the next intent by
pointer before the current animation finishes.

Reduce asset serialization allocations (e99b0ad)

Asset resources now build their canonical host props directly. Server rendering
fills its owned props object in place instead of creating attribute tuples,
filtering them, converting them with Object.fromEntries, and cloning again to
append a nonce. Client insertion uses the same canonical props without changing
the generated elements or server HTML.

Reduce render-path allocations (a3cbcb3)

Child reconciliation now reuses arrays that are already normalized. Server
rendering defers useId path formatting on branches that do not request an
ID. This avoids unnecessary allocations in common client-update and sparse-ID
server trees without changing rendered output.

Reduce server link allocations (70425b3)

Server-rendered router links now mark their client navigation behavior directly
instead of resolving a synthetic click mixin. Links without state props, binds,
or mixins also avoid creating empty state objects and composition wrappers.
Payload rendering continues to reject links whose client navigation behavior
would otherwise be lost.

Simplify Payload rendering and decoding (c8f5711)

Payload now keeps client-reference identity and delivery state together,
encapsulates server asset deduplication and wire lowering, and removes
redundant request, graph, and chunk bookkeeping. The public API, wire values,
streaming, asset gating, cancellation, and error behavior are unchanged.

Attach beforetoggle listeners directly (843457b)

beforetoggle does not bubble, so on("beforetoggle", ...) was attached as a
delegated root listener and never fired for a popover or a dialog. It now
attaches to its element like the other non-bubbling events, toggle included.

Preserve stopped propagation on read-only DOM events (1c43e73)

Logical propagation stops now call the restored native stopPropagation()
method instead of assigning cancelBubble, which can be read-only in DOM
implementations.

Further simplify HTML server rendering (9fd490d)

HTML server rendering now removes unreachable child cases, normalizes host
names once, centralizes request cleanup and document-head asset ordering, and
avoids document-result forwarding closures. Rendered output and streaming,
Suspense, abort, backpressure, asset, and hydration behavior are unchanged.

Serialize preload headers on demand (84d8473)

Server rendering now retains a lightweight value snapshot of shell preload
resources and serializes their HTTP Link values only when
getPreloadHeader() is used.

Reduce server flush garbage collection (a673408)

Server streaming now accumulates each flush pass in one string instead of an
array that must be flattened before encoding. This shortens the lifetime of
serialized response data and substantially reduces garbage-collection pauses
without changing stream chunk boundaries or rendered HTML.

Reduce server HTML escaping work (3f683ca)

Server rendering now skips replacement work for text and attribute values that
do not contain HTML-special characters and reuses replacement callbacks for
values that require escaping. Rendered markup and escaping behavior are
unchanged.

Release server-rendered chunks after flushing (d9903ed)

Server rendering now releases a segment's serialized fragments as soon as
they are flushed, reducing retained memory for large responses.

Simplify server rendering internals (387b563)

Payload rendering now serializes child arrays and asset resources directly
into their destination buffers, while shared server paths avoid transient
metadata, callback, and dispatcher allocations. Public rendering behavior and
wire formats are unchanged.

Simplify server rendering state (ffa44eb)

Server rendering now avoids duplicate completion and task-ownership state,
reuses static callbacks and protocol source, and emits assets without several
temporary arrays and wrapper objects. Rendered HTML, payload rows, streaming,
Suspense, abort, and backpressure behavior are unchanged.

Simplify HTML server-rendering state (707a0ed)

HTML server rendering now resumes suspended tasks from their existing render
frames and derives pending work and scheduling from its task collections. This
removes duplicated state and allocation while preserving streamed HTML,
Suspense, abort, backpressure, asset, and hydration behavior.

Simplify the TanStack Start adapter (d2298f5)

The adapter now uses its renderer directly in the default request path,
centralizes data-store transport validation, simplifies Payload document
injection, and avoids parsing asset-free modules during stylesheet analysis.
Public request, hydration, Payload, and compiler behavior is unchanged.

Reduce the TanStack Start production SSR graph (b6fa19a)

The private default server entry now composes TanStack's handler with a shared
Fig renderer module. This keeps Payload response rendering and its compiled
application-reference manifest out of the production SSR service without
adding another public package entrypoint.

Hydrate render-discovered Fig data (02ad429)

TanStack Start now snapshots Fig data after the document render is ready, so
values first loaded by route components hydrate without duplicate client loads.

Preserve router provider hydration paths (e99b0ad)

Server rendering now preserves the provider child slot occupied by the client
transition lifecycle. Route descendants therefore derive the same useId
paths on the server and during hydration.

Reduce server link rendering overhead (6722ac2)

Links rendered on the server now skip browser-only lifecycle, subscription,
preload, and event setup. Server and client links retain matching component
trees for stable hydration, while Payload rendering continues to reject links
whose navigation behavior cannot be serialized.

Reuse server route asset plans (63d1f4e)

Server rendering now builds each route match's asset plan once and reuses it
for match content, head tags, and body scripts. TanStack's inline-CSS manifest
is snapshotted once per render so its generated wrappers do not defeat the
cache.

Simplify the TanStack Router adapter (2d914fa)

The adapter now centralizes route-head translation, constructs shared link
props once, stabilizes match-value selectors, and isolates client navigation
lifecycle handling behind one internal module. Public routing, SSR, hydration,
asset, and navigation behavior are unchanged.

fig@0.1.0-alpha.6

fig@0.1.0-alpha.6 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Jul 19:13
de03fbb
  • @bgub/fig@0.1.0-alpha.6
  • @bgub/fig-dom@0.1.0-alpha.6
  • @bgub/fig-reconciler@0.1.0-alpha.6
  • @bgub/fig-refresh@0.1.0-alpha.6
  • @bgub/fig-server@0.1.0-alpha.6
  • @bgub/fig-tanstack-router@0.1.0-alpha.6
  • @bgub/fig-tanstack-start@0.1.0-alpha.6
  • @bgub/fig-vite@0.1.0-alpha.6

Identify why data-loader signals abort (e9df253)

Data-resource loader signals now expose whether their generation was
superseded, evicted, or disposed. Rejected generations and values invalidated
through an attributed error receive the originating error as their abort
reason; reasonless rejections receive the platform's default AbortError.

Reduce server-render and TanStack Start overhead (e9df253)

Server rendering now avoids redundant child normalization, component-stack,
and asset-classification work. Route assets are normalized lazily, payload
markers are injected without decoding and re-encoding HTML bytes, and
successful stream cancellation propagates directly through the existing Web
stream chain.

Skip protocol parsing for generated internal links (e9df253)

Router-generated internal links are safe by construction and no longer pass
through WHATWG URL parsing during render. Absolute targets, explicit href
values, and locations marked external still receive the same dangerous-protocol
validation.

This removes repeated URL construction from link-heavy SSR pages while
preserving link output and navigation behavior.

Avoid redundant Vite transforms (e9df253)

Production builds now rely on Vite's scope-aware __FIG_DEV__ replacement
instead of running an additional Babel pass. Development loads the refresh
transformer only when a matching application module needs it.

fig@0.1.0-alpha.5

fig@0.1.0-alpha.5 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Jul 23:02
26c9c22
  • @bgub/fig@0.1.0-alpha.5
  • @bgub/fig-dom@0.1.0-alpha.5
  • @bgub/fig-reconciler@0.1.0-alpha.5
  • @bgub/fig-refresh@0.1.0-alpha.5
  • @bgub/fig-server@0.1.0-alpha.5
  • @bgub/fig-tanstack-router@0.1.0-alpha.5
  • @bgub/fig-tanstack-start@0.1.0-alpha.5
  • @bgub/fig-vite@0.1.0-alpha.5

Avoid false selected-option hydration warnings (57d353c)

Hydrating a select now recognizes the selected attributes synthesized by
server rendering from the select's value. Genuine mismatched selected options
still produce a development warning, and uncontrolled selects continue to
preserve user changes made before hydration.