animate-expo

Implements UI-thread animations, gestures, and haptics for React Native Expo apps.

Updated Mar 14, 2026
One-click install
npx skills add https://github.com/beelabstudio/ai --skill animate-expo-beelabstudio
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: animate-expo
Source: https://github.com/beelabstudio/ai/tree/main/skills/enabling/animate-expo
Command: npx skills add https://github.com/beelabstudio/ai --skill animate-expo-beelabstudio

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? React Native animations often stutter on real devices because they run on the wrong thread, use layout-animating properties, or ignore gesture velocity handoff. This Skill turns a motion request into an implementation that survives review on a slow physical device, not just the simulator. ## Core Features & Use Cases - Decision-first build sequence: Gates every request on whether it should animate at all, names its purpose, then picks the cheapest tool — CSS transitions, layout animations, shared values, or native stack options. - UI-thread correctness: Enforces Reanimated worklets, scheduleOnRN discipline, and transform/opacity-only animation to keep motion off the JS thread. - Ready-to-build recipes: RECIPES.md covers press feedback, drag-to-dismiss sheets, swipe-to-delete, collapsing headers, 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.Pan implementation with momentum projection, rubber-banding, velocity-aware springs, and a haptic on snap — plus reduced-motion handling. ## Quick Start Ask the assistant to build a drag-to-dismiss bottom sheet animation for your Expo screen 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, capture the current position in onStart, project flick velocity to decide dismissal, and hand velocity to a spring so the animation continues seamlessly. Rubber-band upward overshoot and fire a light haptic when it snaps home.

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 a gesture without crossing the bridge, and useNativeDriver only supports transform and opacity, while Reanimated worklets run entirely on the UI thread.

Why does my React Native animation stutter on real devices?▼

Stutter usually comes from setState in gesture or scroll handlers, animating layout properties like height or width, or scheduling JS calls per frame. Move values into shared values with useAnimatedStyle and judge feel only on a release build.

When should I use a spring versus a timing animation?▼

Use a spring whenever a finger was involved, because springs carry velocity through interruptions. Use timing with an ease-out curve for state-driven changes like entrances, and never use ease-in on UI elements.

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

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

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

Use expo-haptics: selectionAsync for detents, impactAsync for snaps and commits, and notificationAsync for success or failure. Fire exactly one haptic per user action in the same frame as the visual, scheduled from worklets via scheduleOnRN.