animate-expo

Implements React Native and Expo animations with Reanimated, Gesture Handler, and Expo Router.

2|Updated Jun 5, 2026
One-click install
npx skills add https://github.com/sathishssj3/NexVR-Engine --skill animate-expo-sathishssj3
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: animate-expo
Source: https://github.com/sathishssj3/NexVR-Engine/tree/main/.agents/skills/animate-expo
Command: npx skills add https://github.com/sathishssj3/NexVR-Engine --skill animate-expo-sathishssj3

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires react-native-reanimated, react-native-worklets, react-native-gesture-handler, expo-haptics, expo-router, react-native-keyboard-controller.

What problem does it solve? Building animations in React Native that feel right on real devices is hard: motion that looks fine in the simulator stutters on older phones, gestures fight scroll views, and hover-based web patterns don't translate to touch. This Skill turns a request for motion into a reviewed implementation that runs on the UI thread and survives a strict on-device check. ## Core Features & Use Cases - Decision-first build sequence: Gates every animation by frequency and purpose, then picks the cheapest tool — CSS transitions, layout animations, shared values with gestures, or native stack transitions in Expo Router. - UI-thread correctness: Enforces Reanimated worklets, scheduleOnRN discipline, and transform/opacity-only properties so motion never blocks the JS thread. - Ready-to-build recipes: Provides implementations for press feedback, drag-to-dismiss sheets, swipe-to-delete, collapsing headers, list entrances, keyboard-synced UI, tab indicators, screen transitions, and toasts. - Use Case: You need a bottom sheet users can flick to dismiss. The Skill supplies the pan gesture with momentum projection, velocity-aware spring handoff, rubber-banding at the top edge, and a haptic on snap-back. ## Quick Start Ask the assistant to build a drag-to-dismiss bottom sheet animation for your Expo app using Reanimated and Gesture Handler.

Frequently Asked Questions about animate-expo

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I build a drag-to-dismiss bottom sheet in React Native?▼

Use a Reanimated shared value with a Gesture.Pan handler: capture the current position in onStart, apply rubber-banding past the top edge, and in onEnd project the release velocity to decide dismiss or snap-back. Hand the velocity to withSpring so the animation continues seamlessly from the finger.

Reanimated vs core Animated for gesture-driven animations?▼

Reanimated is required for anything a finger touches. Core Animated cannot be driven by a gesture without crossing the bridge, and useNativeDriver only supports transform and opacity. Reanimated worklets run on the UI thread and keep running while JS is busy.

Why does my React Native animation stutter on device?▼

Stutter usually comes from calling setState in a gesture or scroll handler, scheduling back to the RN runtime every frame, or animating layout properties like height and width. Move values into shared values with useAnimatedStyle and animate only transform and opacity.

Does Reanimated 4 work with Expo and the New Architecture?▼

Reanimated 4 requires the New Architecture and installs via npx expo install react-native-reanimated react-native-worklets. In Expo projects, babel-preset-expo configures the worklets plugin automatically; a missing plugin throws a worklet creation error at runtime.

When should I not animate a UI element on mobile?▼

Skip animation for actions happening 100+ times a day like tab switches, keyboard open/close, and scrolling — use platform defaults instead. Frequent interactions like press feedback should stay under 150ms, and tabs should never slide since they are peers, not a hierarchy.

How do I add haptic feedback to animations in Expo?▼

Use expo-haptics: selectionAsync for value ticks, impactAsync for snaps and commits, and notificationAsync for success or failure. Fire the haptic in the same frame as the visual cause, limit to one per user action, and schedule it from worklets with scheduleOnRN.