The Wire · Showcase
REACT FIZZ UNLOCKS NESTED ANIMATIONS FOR STREAMING SERVERS
By RepoJournal · Filed · About Meta
React's server renderer now supports nested View Transition animations during Suspense reveals, closing a gap that forced SSR apps to choose between progressive enhancement and smooth animations.
The Fizz streaming renderer shipped support for nested parentEnter/parentExit View Transitions [1], emitting vt-parent-enter and vt-parent-exit annotations during streaming so the client picks them up correctly on hydration. This matters because Suspense reveals are core to modern SSR patterns, and animations have been out of reach until now. The same PR uncovered a fragile spot in React's fragment handling [2]: when a Fragment has no children, React was only checking HostComponent siblings before scrolling to parents, missing HostText nodes and risking focus landing on document.ownerDocument.activeElement. The fix reuses existing heuristics and hardened the code by encoding state node types explicitly. That same burst of activity exposed a gap in Fizz's stack overflow recovery [3]: the trampoline catches overflows in extremely deep trees and spawns continuation tasks, but retries weren't covered, leaving a TODO test case that just landed in CI. React Native's Flow definitions got the modern Node.js treatment [4] with node: alias support, so prefixed and unprefixed imports resolve to the same types going forward.
One email a day. Unsubscribe in one click.
What actually shipped in Meta, written up every day — commits, pull requests, releases, and security advisories.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Update to latest React canary if you're building nested Suspense animations in SSR facebook/react [plan]
- → Monitor your deepest tree renders for stack overflow patterns with the extended recovery facebook/react [monitor]
References
- [1] [Fizz] Support nested enter/exit ViewTransition animations ↗ facebook/react
- [2] [DOM] Scroll to text siblings of empty Fragments instead of the parent ↗ facebook/react
- [3] [Fizz] Extend stack overflow recovery to retries ↗ facebook/react
- [4] Flow: Add node: aliases to Node.js libdefs (#57600) facebook/react-native