animate-expo

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

Updated Aug 22, 2026
One-click install
npx skills add https://github.com/falentio/cimi --skill animate-expo-falentio
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: animate-expo
Source: https://github.com/falentio/cimi/tree/main/.agents/skills/animate-expo
Command: npx skills add https://github.com/falentio/cimi --skill animate-expo-falentio

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? Mobile animations in React Native often stutter, feel wrong, or shouldn't exist at all. This Skill provides a decision sequence for building motion in Expo apps — deciding whether to animate, which runtime thread to use, which properties are safe, and how gestures hand off velocity — so animations survive review on real devices. ## Core Features & Use Cases - Decision-first workflow: Gates every animation by frequency and purpose before writing code, then picks the cheapest tool (CSS transitions, layout animations, shared values, or native stack options). - UI-thread correctness: Enforces Reanimated worklets, shared values, and scheduleOnRN patterns that keep motion off the JS thread, with explicit rules against setState per frame and layout-property animation. - Ready-to-build recipes: Includes 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: When asked to add a draggable bottom sheet to an Expo screen, it produces a gesture-driven implementation with momentum projection, rubber-banding, velocity-aware springs, haptics, and reduced-motion handling. ## 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 driven by a Gesture.Pan() handler, capturing the current position in onStart and projecting velocity in onEnd to decide dismissal. Hand the gesture velocity to a spring so the release continues seamlessly, and derive the backdrop opacity from the same shared value.

Should I use Reanimated or the core Animated API in Expo?

Use Reanimated for anything a finger touches or anything derived from scroll. Core Animated cannot be driven by gestures without crossing the bridge, and useNativeDriver only supports transform and opacity, while Reanimated worklets run on the UI thread even when JS is busy.

Why does my React Native animation stutter on device?

Stutter usually comes from calling setState in gesture or scroll handlers, animating layout properties like height or width, or scheduling back to the JS runtime every frame. Move values into shared values with useAnimatedStyle and restrict scheduleOnRN calls to onEnd or threshold reactions.

When should I use a spring versus a timing animation?

Use a spring whenever a finger was involved, because springs carry velocity through interruptions while timing curves restart. Everything else uses timing with ease-out for entering or exiting elements and ease-in-out for on-screen movement, staying under 300ms for UI animations.

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

Reanimated 4 requires the New Architecture, and in Expo projects babel-preset-expo configures the worklets plugin automatically. Expo Go is not a valid performance environment, so judge animation feel in a release build on the slowest supported device.

How do I add haptic feedback to animations in Expo?

Use expo-haptics with one haptic per user action, fired at the causal moment such as a detent catching rather than when the animation finishes. From a worklet, schedule the call back to the RN runtime with scheduleOnRN, and always pair haptics with visual feedback.