SSGOI

Browser & router support

SSGOI runs in the browsers you already support, with the router you already use.

Browser runtime

Springs are simulated up front and handed to the browser as keyframes, so the animation itself runs natively.

Your router keeps navigation

SSGOI watches the route boundary your framework already mounts and unmounts. It reads browser history entry identities to remember each visit's effect. It wraps pushState/replaceState to retain a namespaced entry marker alongside existing router state, even when native entry information arrives late. Your router still owns URLs and navigation.

Motion the browser plays natively

Spring motion is simulated up front and handed to the browser as Web Animations API keyframes. The same config runs unchanged anywhere the APIs below exist.

Runtime targets

Current Chrome, Safari, Firefox and Edge, on desktop and mobile.

ChromeChromeSafariSafariFirefoxFirefoxEdgeEdge

This repo does not ship a browserslist or a support policy, so rather than quote version numbers that nothing generates, here is what the engine actually calls. If a browser has all of it, SSGOI runs; the practical floor is the 2020 Web Animations API update.

What SSGOI callsWhat it is for
Element.animate()Plays every transition. Spring motion is simulated up front and handed over as keyframes.
Animation.ready, writable currentTimeThe startup handoff that keeps mount and layout jank off the animation timeline.
MutationObserverNoticing that a marked route element was added to or removed from the page.
queueMicrotask()Flushing an unmount outside the observer callback that reported it.
Element.scrollTo({ top, left })Restoring and resetting scroll on the container that actually scrolls.
ResizeObserver (optional)Keeps isMobile current when the scroll container resizes. Without it the first measurement stands.

The blur variants of Sheet and Zoom also use backdrop-filter, on by default from Firefox 103. Without it only the blur is lost: Sheet keeps its movement, scale and dimming, and Zoom keeps its movement and scale.

Routers and frameworks

SSGOI follows your framework's route lifecycle instead of replacing it, so navigation and SSR stay as they are.

Router integrations other than Next.js are experimental APIs.

Router helpers are grouped under their rendering framework. Qwik keeps the key and marker on the page root; Angular offers a structural directive that recreates that root when its key changes. All templates ↗

Each stack has its own setup page in the framework guides. For how this relates to the browser's own View Transition API, see why not View Transitions.