Skip to main content

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

PackageNotes
@shopify/flash-listv2+ (New Architecture)
react-native-videoDefault player; swappable via renderVideo
react-native-reanimatedLike animation (v4+, New Architecture)
react-native-workletsRequired by Reanimated 4
react-native-gesture-handlerSingle 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.