react-native-screen-transitions is a transition toolkit for apps that need more control over navigation motion than the platform defaults.
Use it to build custom push and dismiss animations, gesture-driven screens, snap sheets, overlays, and bounds-driven transitions.
One navigator, two hosts
v4's Blank Stack is a Standard Navigator. The same transition navigator integrates with both React Navigation and Expo Router through host-specific package entry points.
Blank Stack is the default choice when Screen Transitions should drive the stack. withScreenTransitions remains available as an adapter for one-off animations inside an existing native stack.
v4 is experimental. Its navigation and bounds APIs may change before the stable release.
Continue to Installation, then connect your navigator in Getting Started.
Expo Router
Screen Transitions exports a BlankStack that is ready to use in an Expo Router layout. Replace the stack in the layout where you want Screen Transitions:
TSX
You can use BlankStack in the root layout or a nested _layout.tsx. Only the routes inside that layout participate in its transition stack.
Expo Router remains responsible for routing. Continue to navigate with router.push(), router.replace(), router.back(), or Link as usual.
React Navigation
Screen Transitions exports the same Blank Stack for React Navigation through its React Navigation entry point. Create it like any other React Navigation navigator:
TSX
Blank Stack is implemented as a Standard Navigator, which lets the same navigator work with React Navigation and Expo Router. Your screens continue to navigate with navigation.navigate(), navigation.goBack(), and the rest of the standard React Navigation API.
Adapting a native stack
withScreenTransitions serves a different purpose. It wraps an existing native stack so you can opt individual screens into Screen Transitions animations while retaining native-stack behavior elsewhere:
TSX
Use the adapter when you specifically need a native stack. For a stack driven entirely by Screen Transitions, use Blank Stack.