Overview
A splash screen is displayed while your app loads. Expo providesexpo-splash-screen to control when the splash screen is hidden and support custom splash screens on both platforms.
Basic Configuration
Configure in app.json
app.json
Image requirements
- Resolution: 1284 x 2778 pixels (iPhone 13 Pro Max size)
- Format: PNG with transparency
- Design: Keep important content in the center (safe area)
Installation
Controlling Splash Screen Visibility
Prevent auto-hide
By default, the splash screen hides automatically. To control when it hides:app/_layout.tsx
With animations
Create a smooth transition from splash screen to app:components/AnimatedSplash.tsx
app/_layout.tsx
Platform-Specific Configuration
- iOS
- Android
Dark Mode Support
app.json
Advanced Patterns
Custom splash component
Create a fully custom splash screen using React components:components/CustomSplash.tsx
Loading progress indicator
hooks/useAppLoading.ts
app/_layout.tsx
Asset Generation
Generate properly sized splash screens for all devices:Troubleshooting
Splash screen flickers or disappears immediately
Splash screen flickers or disappears immediately
Call
SplashScreen.preventAutoHideAsync() at the top level of your app, before any components render:Splash screen not showing custom image
Splash screen not showing custom image
- Run
npx expo prebuild --cleanto regenerate native files - Verify the image path is correct in app.json
- Check image format (should be PNG)
- Rebuild your app (changes to splash screen require rebuild)
Different behavior on iOS vs Android
Different behavior on iOS vs Android
The splash screen implementation differs between platforms. Test on both platforms and use platform-specific configurations if needed.
Splash screen stuck/won't hide
Splash screen stuck/won't hide
Ensure you call
SplashScreen.hideAsync() after your app is ready:Best Practices
- Keep it simple: Splash screens should be simple and load quickly
- Match your brand: Use your brand colors and logo
- Design for all sizes: Test on different device sizes
- Support dark mode: Provide dark variants of your splash screen
- Don’t overload: Avoid loading too many resources before hiding the splash
- Use native splash first: Let the native splash show while JS loads
- Animate transitions: Create smooth transitions from splash to app
- Test on devices: Simulator behavior may differ from physical devices
- Optimize images: Compress splash images to reduce app size
- Handle errors: Catch loading errors and hide splash screen anyway