Blank Stack (Recommended)
The default, recommended option. You define all animations viascreenStyleInterpolator.
- Full animation control
- Smooth gesture handling
- Works in Expo Go
- No native code required
- Best performance for custom animations
- You write all animations (no built-in defaults)
- No native back button behavior on Android
- Custom animations
- Prototyping
- Fully controlled navigation
Native Stack
Wraps native iOS/Android navigation but allows customization via Reanimated.enableTransitions: true to enable custom animations.
Advantages:
- Native back button behavior (Android)
- Familiar iOS/Android feel
- Can mix native + custom animations
- Hardware-accelerated transitions
- Delayed touch events on Android (native behavior)
beforeRemovelisteners can cause edge cases- Rapid navigation may glitch
- Requires native modules
- More complex setup
- Touch events are delayed while animating (native behavior)
navigation.beforeRemove()may fire at unexpected times- Navigating too quickly can cause state inconsistencies
- Back button behavior varies by platform
- Apps that need native back button
- Porting iOS/Android native code
- Enterprise production apps
Component Stack (Experimental)
A standalone navigator without React Navigation context. Useful for embedded navigation or testing.- No React Navigation required
- Works standalone (testing, embedded views)
- Lightweight
- Full gesture control
- No deep linking
- State isolated from React Navigation
- Touch events don’t pass through to underlying screens
- Limited to internal navigation only
- Not production-ready
- No state synchronization with navigation state
- Can’t navigate from outside (no ref access)
- Limited debugging tools
- Not suitable for app-level navigation
- Testing custom animations
- Embedded navigation UI
- Development and prototyping
- Internal sub-navigation
Comparison Table
| Feature | Blank Stack | Native Stack | Component Stack |
|---|---|---|---|
| Custom animations | ✅ Full control | ✅ Full control | ✅ Full control |
| Presets | ✅ Available | ✅ Available | ✅ Available |
| Native back button | ❌ No | ✅ Yes | ❌ No |
| Gesture support | ✅ Full | ⚠️ Limited | ✅ Full |
| Expo Go compatible | ✅ Yes | ❌ No | ✅ Yes |
| React Navigation | ✅ Required | ✅ Required | ❌ Optional |
| Deep linking | ✅ Yes | ✅ Yes | ❌ No |
| Performance | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Native feel | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Setup complexity | Simple | Complex | Very Simple |
Switching Between Stacks
From Blank to Native
If you need native back button behavior:From Native to Blank
If you don’t need the native back button:Platform-Specific Setup
Blank Stack (All Platforms)
Works everywhere without additional setup. Use in Expo, managed, or bare React Native projects.Native Stack
Requires native modules. Use in:- Bare React Native with autolinking
- Expo with
expo prebuild - EAS Build for managed Expo projects
Component Stack
Works anywhere. No platform-specific code needed.Recommendation
Start with Blank Stack. It’s the most predictable and gives you full control. Migrate to Native Stack only if you specifically need platform-native behavior.Next Steps
- Start building with Quick Start
- Learn Custom Animations for Blank Stack
- Check Caveats for known limitations
