Skip to main content

react-native-drax

Drag‑and‑drop for React Native. Done right.

Sortable lists, grids, cross-container drag, drag handles, collision algorithms, and more. Built on Reanimated 4 with a UI-thread-first architecture for smooth 60fps interactions on iOS, Android, and Web.

  • iOS
  • Android
  • Web

Works with FlatList · FlashList · LegendList · or any list component

npm install react-native-drax

List-Agnostic Sortable

Works with FlatList, FlashList, LegendList, or any list component. One API, any renderer.

Cross-Container Drag

Move items between lists — works with FlashList, LegendList, FlatList. Phantom slots, auto-scroll, and smooth transfers.

UI-Thread Performance

Spatial index worklet runs hit-testing on the UI thread. SharedValues split by update frequency for 60fps.

19 Callback Events

Full drag lifecycle control: drag start, enter, over, exit, end, drop, snap, monitor — and continuous callbacks.

Three Platforms

iOS, Android, and Web. New Architecture (Fabric) compatible. Built on Reanimated 4 + Gesture Handler 3.

Composable Architecture

Use DraxList for convenience, or compose useSortableList + SortableContainer + SortableItem for full control.

Three lines to drag. Five to sort.

App.tsx
import { DraxProvider, DraxView } from 'react-native-drax';

function App() {
return (
<DraxProvider>
<DraxView
style={{ width: 100, height: 100, backgroundColor: 'blue' }}
onDragStart={() => console.log('dragging')}
payload="hello"
/>
<DraxView
style={{ width: 100, height: 100, backgroundColor: 'green' }}
onReceiveDragDrop={({ dragged: { payload } }) => {
console.log(`received: ${payload}`);
}}
/>
</DraxProvider>
);
}

Choose your library #

This comparison was researched with the help of AI and may contain inaccuracies. If you spot an error, please open an issue.

FeatureDraxreanimated-dndsortables
Free-form drag & dropYesYesNo
Sortable listYesYesYes
Sortable gridYesYesYes
Sortable flex layoutNoNoYes
Horizontal sortingYesYesYes
List-agnostic (FlatList, FlashList, LegendList)YesNoNo
Cross-container / cross-list reorder⚠️ ExperimentalNoNo
Fixed-order itemsYesNo3 modes
Drag handlesYesYesYes
Drag axis lockingYesYesPartial
Drag boundsYesYesContainer only
Auto-scrollingYesYesYes
Haptic feedbackNoNoYes
Drag state styling15 props + inactiveonStateChange5 props + hook
Reorder animation presets5 presets + customNoNo
Drop animationCustom fn()Custom fn()Duration only
Item removal animationYesGrid onlyYes
Drop indicatorYesNoGrid only
Dynamic item heightsYesYesYes
Collision algorithms3 modes3 modesNo
Snap alignment9-point + custom9-pointNo
Drop zone acceptanceCallback + capacityCapacity onlyNo
Monitoring viewsYesNoNo
UI-thread DnD collisionYesNoNo
Event callbacks19 types~12 types~10 types
Continuous drag callbacks4 types1 type1 type
Provider-level callbacksYesYesNo
AccessibilityYesManualManual
Reduced motionYesNoNo
AI agent skillsNoYesNo
Web supportYesNoPartial
Reanimated4≥ 4.2≥ 3
Gesture Handler3 (beta)≥ 2.28≥ 2