Skip to main content

Overview

A splash screen is displayed while your app loads. Expo provides expo-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)
The splash image will be resized to fit different screen sizes. Design with a safe area of approximately 1000 x 1000 pixels in the center.

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
Usage:
app/_layout.tsx

Platform-Specific Configuration

iOS-specific options

app.json

Resize modes

  • contain: Scale image to fit (default)
  • cover: Scale to fill, may crop
  • native: Use iOS native scaling

Status bar configuration

app.json

Dark Mode Support

app.json
The dark mode splash screen is automatically shown based on the device’s appearance settings.

Advanced Patterns

Custom splash component

Create a fully custom splash screen using React components:
components/CustomSplash.tsx

Loading progress indicator

hooks/useAppLoading.ts
Usage:
app/_layout.tsx

Asset Generation

Generate properly sized splash screens for all devices:
Or use online tools:

Troubleshooting

Call SplashScreen.preventAutoHideAsync() at the top level of your app, before any components render:
  • Run npx expo prebuild --clean to 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)
The splash screen implementation differs between platforms. Test on both platforms and use platform-specific configurations if needed.
Ensure you call SplashScreen.hideAsync() after your app is ready:
Changes to the splash screen configuration in app.json require rebuilding your app. Run npx expo prebuild and rebuild.

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