Overview
@react-native-motion-kit/swipe-deck is a high-performance Tinder-style swipe
deck for React Native. It is built for apps that need a smooth card stack,
programmatic like/pass buttons, progress-driven overlays, and a typed API that
does not make every screen wire a controller by hand.
Mental Model
The main API is a typed compound component family:
createSwipeDeck<T>()creates one deck family for an item type.Rootowns data, gesture state, motion options, actions, events, and layout.Cardrenders each mounted item in the bounded forward window.- Factory hooks read state, run actions, subscribe to events, and expose Reanimated shared values for animated UI.
Create the factory once, export it from a shared module, and use hooks from that
same factory around a matching Root.
Why It Exists
- The deck does not render the full data set.
- Promoted cards keep item identity through stable keys.
- Manual drag motion and programmatic action motion can be tuned separately.
- Interaction shared values update on the UI thread without rerendering React every gesture frame.
- Events describe committed model changes such as swipes, undo, index changes, and end reached.
Core Concepts
Bounded Forward Window
By default, the deck mounts up to three cards from the active index forward:
- current card
- next card
- next buffered card
This keeps the stack continuous without backfilling dismissed cards. Use
visibleCardCount to tune that maximum budget.
Stable Item Keys
getKey is required. The same logical item must return the same key across
swipes, and different items should not share a key. The deck uses that key as
the React identity for each mounted card.
Committed Events vs Live Interaction
Use event hooks for committed model changes. Use interaction shared values for frame-synchronous visual feedback while a card is dragging, dismissing, or restoring.
