Installation
npm install react-native-flash-reels @shopify/flash-list react-native-video react-native-reanimated react-native-worklets react-native-gesture-handler
Or with Yarn:
yarn add react-native-flash-reels @shopify/flash-list react-native-video react-native-reanimated react-native-worklets react-native-gesture-handler
Peer dependencies
| Package | Notes |
|---|---|
@shopify/flash-list | v2+ (New Architecture) |
react-native-video | Default player; swappable via renderVideo |
react-native-reanimated | Like animation (v4+, New Architecture) |
react-native-worklets | Required by Reanimated 4 |
react-native-gesture-handler | Single vs double tap |
Babel
Add the Worklets plugin last in your Babel config:
babel.config.js
module.exports = {
presets: ['module:@react-native/babel-preset'],
plugins: ['react-native-worklets/plugin'],
};
Gesture handler
Import gesture-handler at your app entry, and wrap the tree (or reels screen) in GestureHandlerRootView:
index.js
import 'react-native-gesture-handler';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
export default function App() {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
{/* ... */}
</GestureHandlerRootView>
);
}
iOS video disk cache (optional)
To use videoCacheEnabled / bufferConfig.cacheSizeMB on iOS, enable react-native-video’s caching flag in your app Podfile, then reinstall pods:
ios/Podfile
# Enable react-native-video disk caching (progressive MP4/M4V/MOV)
$RNVideoUseVideoCaching = true
You may also need the CocoaPods Swift modular-headers gem — see react-native-video caching docs. Android only needs videoCacheEnabled or cacheSizeMB at runtime.