Arc Wheel Picker
A curved React Native wheel picker for Expo — real arc geometry, snap detents, native picker haptics and a tick sound. No Reanimated, no gesture-handler.
Preview

Usage
$npx expo install expo-haptics expo-audio @expo/vector-icons
Built with React Native core only — no third-party UI library required.
Examples
5The whole API: a list, the index that is currently centred, and a callback that fires on every detent the wheel crosses. The wheel fills its parent, so give it a flex container.
<ActivityWheel data={ACTIVITIES} // [{ id, label, icon, color }] selectedIndex={index} // which row is centred onChange={setIndex} // fires on every crossed detent haptics // default: true sound // default: true/>Overview
Arc Wheel Picker is a scroll-driven selector for Expo and React Native whose rows sit on a genuine circular path. As an item leaves the centre it slides right, rotates to stay square with the radius, and fades back, while the vertical gaps compress toward the edges exactly the way points on an arc do — instead of marching evenly down the screen like a plain list. Most "curved" React Native pickers fake that arc with a linear offset ramp; this one solves the circle, so the horizontal push, the rotation and the vertical compression all fall out of a single radius (theta = d * ANGLE_STEP, y = R * sin theta, x = R * (1 - cos theta)). It runs on a plain ScrollView with native-driver Animated interpolation, so it ships without Reanimated and without react-native-gesture-handler — nothing extra to autolink, nothing to rebuild. Every detent the wheel crosses fires the platform's own picker feedback — Haptics.selectionAsync() on iOS, AndroidHaptics.Clock_Tick on Android — plus a bundled 7 KB tick that mixes with the user's music and honours the ringer switch, rate-limited to one pulse per 30 ms so a fast fling never buzzes on past the gesture. Four constants — ITEM_HEIGHT, ANGLE_STEP, ROTATION_DAMPING and GUIDE_RADIUS — reshape the whole wheel, and haptics and sound are independent props you can switch off to run the picker on bare React Native with zero extra dependencies.
What's included
- True circular arc geometry — not a linear offset ramp
- Four constants reshape the entire wheel
- No Reanimated, no react-native-gesture-handler
- Native-driver Animated over a plain ScrollView
- Momentum snap detents plus tap-to-select on any row
- iOS selection haptic, Android Clock_Tick detent
- Bundled 7 KB tick that mixes with the user's music
- Rate-limited feedback so fast flings never buzz on
- haptics and sound switch independently
- onChange reports the settled index
- 12-item demo screen with MaterialCommunityIcons
- MIT licensed — full source on GitHub
Tech Stack
Get this component
Free
One-time payment · Lifetime access
Free License
Personal and commercial use
- Use in 1 personal project
- Lifetime access to updates
- Email support
- Remove attribution
- Commercial use included