animate-expo

Implements animations and gestures in React Native Expo apps using Reanimated and Gesture Handler.

Updated Aug 25, 2026
One-click install
npx skills add https://github.com/KlyrhonMiko/kly-skills --skill animate-expo-klyrhonmiko
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: animate-expo
Source: https://github.com/KlyrhonMiko/kly-skills/tree/main/data/skills/animate-expo
Command: npx skills add https://github.com/KlyrhonMiko/kly-skills --skill animate-expo-klyrhonmiko

SYSTEM DOCUMENTATION & REQUIREMENTS

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

What problem does it solve? Mobile animations in React Native often stutter, feel wrong, or run on the wrong thread, and developers struggle to decide what should animate, which tool to use, and how to keep motion on the UI thread. This Skill provides a decision sequence and ready-to-build recipes that produce fluid, device-verified motion in Expo apps. ## Core Features & Use Cases - Decision framework for motion: Gates every animation by frequency and purpose, then selects the cheapest correct tool, from CSS transitions to shared values to native stack transitions. - Ready-to-build recipes: Includes implementations for press feedback, drag-to-dismiss bottom sheets, swipe-to-delete rows, collapsing headers, list entrances, keyboard-synced UI, tab indicators, screen transitions, and toasts. - UI-thread discipline and haptics: Enforces Reanimated worklets, spring configs with velocity handoff, reduced-motion support, and correctly timed expo-haptics feedback. - Use Case: When asked to add a draggable bottom sheet to an Expo screen, the Skill writes the full Gesture.Pan implementation with momentum projection, rubber-banding, velocity-aware springs, and a haptic on snap-back. ## Quick Start Ask the AI to build a drag-to-dismiss bottom sheet animation in 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 Gesture.Pan with a shared value for translateY, capture the current position in onStart, and decide dismissal with momentum projection rather than distance alone. Hand the release velocity to withSpring so the animation continues seamlessly from the finger.

Reanimated vs core Animated for React Native gestures?▼

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

Why does my React Native animation stutter on device?▼

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

Should I use a spring or timing animation in Reanimated?▼

Use a spring whenever a finger was involved, because springs carry velocity through interruptions while timing curves restart. Everything else uses timing with a strong ease-out bezier such as Easing.bezier(0.23, 1, 0.32, 1).

How do I animate UI with the keyboard in Expo?▼

Use react-native-keyboard-controller with a KeyboardProvider at the root and the useReanimatedKeyboardAnimation hook, which tracks the keyboard's real position frame by frame on the UI thread. Never build this from Keyboard.addListener plus a timing animation, which visibly lags.

When should I not animate something in a mobile app?▼

Skip animation for interactions happening 100+ times a day like tab switches, keyboard open/close, and scrolling, and keep frequent actions like press feedback under 150ms. Tab switches should use animation: 'none' since sliding implies hierarchy that does not exist.