dohooo/react-native-reanimated-carousel

🎠 React Native swiper/carousel component, fully implemented using reanimated v2, support to iOS/Android/Web. (Swiper/Carousel)

TypeScript

3,432

1,012 commits

updated Aug 8, 2026

See the code

README

react-native-reanimated-carousel

platforms npm npm github issues discord chat

A performant, customizable carousel for React Native, powered by Reanimated and Gesture Handler.

Migrating from v4

Read https://rn-carousel.dev/migration-v5.md and upgrade react-native-reanimated-carousel to v5 in this project, then summarize what changed for my review.

v5 highlights

  • A smaller, named-only API with descriptive TypeScript types.
  • Container sizing through style, with optional itemSize for a custom page distance.
  • Explicit layout, itemAnimation, snapMode, and orientation contracts.
  • Continuous logical progress plus signed pixel-level scrollOffsetValue.
  • One Pagination component with loop-aware interpolation and accessible interactive dots.
  • Stable item identity through keyExtractor, horizontal RTL normalization, and package exports.

Installation

Expo projects should let Expo select compatible Reanimated and Worklets versions:

npx expo install react-native-reanimated-carousel react-native-reanimated react-native-worklets react-native-gesture-handler

React Native Community CLI projects can use their package manager:

yarn add react-native-reanimated-carousel react-native-reanimated react-native-worklets react-native-gesture-handler

Follow the official setup instructions for Reanimated and Gesture Handler.

Quick start

import * as React from "react";
import { Text, useWindowDimensions, View } from "react-native";
import { GestureHandlerRootView } from "react-native-gesture-handler";
import { Carousel } from "react-native-reanimated-carousel";

const data = ["First", "Second", "Third"];

export default function App() {
  const { width } = useWindowDimensions();

  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <View style={{ flex: 1, justifyContent: "center" }}>
        <Carousel
          style={{ width, height: 200 }}
          data={data}
          renderItem={({ item }) => (
            <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
              <Text>{item}</Text>
            </View>
          )}
        />
      </View>
    </GestureHandlerRootView>
  );
}

loop defaults to false in v5. Add loop when infinite wrapping is part of the product behavior.

Version compatibility

CarouselExpo SDKReact NativeReanimatedGesture HandlerWorklets
v554–57 validated0.80+4.1.0+>=2.9.0 <4.0.00.5.0+
v4.x (EOL)50–530.70.3+3.0.0+2.9.0+—
v3.x (EOL)47–490.66.0+2.0.0+2.0.0+—

Reanimated and Worklets must be a compatible pair. Expo users should use expo install; other projects should consult the Reanimated compatibility table.

Sponsors

License

MIT

android
carousel
hacktoberfest
infinite-scroll
ios
react-native
react-native-carousel
react-native-snap
react-native-swiper
reanimated
snap
swiper
web

dohooo/react-native-reanimated-carousel

🎠 React Native swiper/carousel component, fully implemented using reanimated v2, support to iOS/Android/Web. (Swiper/Carousel)

TypeScript

3,432

1,012 commits

updated Aug 8, 2026

See the code

README

react-native-reanimated-carousel

platforms npm npm github issues discord chat

A performant, customizable carousel for React Native, powered by Reanimated and Gesture Handler.

Migrating from v4

Read https://rn-carousel.dev/migration-v5.md and upgrade react-native-reanimated-carousel to v5 in this project, then summarize what changed for my review.

v5 highlights

  • A smaller, named-only API with descriptive TypeScript types.
  • Container sizing through style, with optional itemSize for a custom page distance.
  • Explicit layout, itemAnimation, snapMode, and orientation contracts.
  • Continuous logical progress plus signed pixel-level scrollOffsetValue.
  • One Pagination component with loop-aware interpolation and accessible interactive dots.
  • Stable item identity through keyExtractor, horizontal RTL normalization, and package exports.

Installation

Expo projects should let Expo select compatible Reanimated and Worklets versions:

npx expo install react-native-reanimated-carousel react-native-reanimated react-native-worklets react-native-gesture-handler

React Native Community CLI projects can use their package manager:

yarn add react-native-reanimated-carousel react-native-reanimated react-native-worklets react-native-gesture-handler

Follow the official setup instructions for Reanimated and Gesture Handler.

Quick start

import * as React from "react";
import { Text, useWindowDimensions, View } from "react-native";
import { GestureHandlerRootView } from "react-native-gesture-handler";
import { Carousel } from "react-native-reanimated-carousel";

const data = ["First", "Second", "Third"];

export default function App() {
  const { width } = useWindowDimensions();

  return (
    <GestureHandlerRootView style={{ flex: 1 }}>
      <View style={{ flex: 1, justifyContent: "center" }}>
        <Carousel
          style={{ width, height: 200 }}
          data={data}
          renderItem={({ item }) => (
            <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
              <Text>{item}</Text>
            </View>
          )}
        />
      </View>
    </GestureHandlerRootView>
  );
}

loop defaults to false in v5. Add loop when infinite wrapping is part of the product behavior.

Version compatibility

CarouselExpo SDKReact NativeReanimatedGesture HandlerWorklets
v554–57 validated0.80+4.1.0+>=2.9.0 <4.0.00.5.0+
v4.x (EOL)50–530.70.3+3.0.0+2.9.0+—
v3.x (EOL)47–490.66.0+2.0.0+2.0.0+—

Reanimated and Worklets must be a compatible pair. Expo users should use expo install; other projects should consult the Reanimated compatibility table.

Sponsors

License

MIT

android
carousel
hacktoberfest
infinite-scroll
ios
react-native
react-native-carousel
react-native-snap
react-native-swiper
reanimated
snap
swiper
web

Project health

Latest release

5.1.1 · Aug 8, 2026

Releases this year

3

Significant stargazers

Brent Vatne

4,534 followers · starred Jun 2022

Even Stensberg

488 followers · starred Feb 2025

Dwight Watson

225 followers · starred Mar 2024

Ryuhei Shima

14 followers · starred Oct 2022