React Native Theme TransitionReact Native Theme Transition

Overview

Smooth, animated theme transitions for React Native. Expo Go compatible, 100% JS, powered by Reanimated.

Theme transitions in React Native have always needed custom native modules. That means no Expo Go, no OTA updates, and extra maintenance for each platform.

This library takes a different approach: capture a screenshot, overlay it, switch colors underneath, and fade out. The result is a smooth cross-fade that works everywhere, no native code needed. All peer dependencies ship with Expo Go (SDK 54+) — only react-native-worklets needs to be installed separately.

Features

  • Smooth cross-fade transitions. Screenshot-overlay technique powered by Reanimated on the native UI thread, matching your display's refresh rate (60–120 FPS).
  • Expo Go compatible. No native code, no prebuilds.
  • Built-in theme management. Provider, typed hooks, and deep generic inference out of the box.
  • System theme sync. Follows OS appearance automatically with zero-flash startup and runtime switching.
  • Transition guard. Blocks concurrent transitions and exposes isTransitioning.
  • React Compiler ready. All hooks follow the Rules of React.
  • Tiny footprint. ~13 kB runtime, zero runtime dependencies.

Comparison

Featurereact-native-theme-transitionreact-native-theme-switch-animationUniwind ProUnistyles 3
Animated transitionCross-fadeFade/circular revealNative snapshotNone (instant)
Expo Go supportYesNo (prebuild)No (prebuild)No (prebuild)
ExecutionPure JS / Reanimated + WorkletsNative modulesC++ engineC++ (ShadowTree)
Theme state managementProvider + typed hooksBring your ownBuilt-inBuilt-in
TypeScript genericsDeep inferenceBasicAuto-generatedManual override
System theme listenerBuilt-inNot includedBuilt-inAdaptive themes
PriceFree (MIT)Free (MIT)$99/seat/yearFree (MIT)

Trade-offs

  • No interaction during transitions. Touches, scrolls, and additional setTheme calls are blocked while the fade is running. Use isTransitioning to disable buttons.
  • Static overlay. The transition uses a screenshot, so dynamic content (videos, animations, live counters) will appear frozen during the fade.

Requirements

  • React >= 18.0.0
  • React Native >= 0.76
  • react-native-reanimated >= 4.0.0
  • react-native-view-shot >= 3.0.0
  • react-native-worklets >= 0.5.0

On this page