Claude Code skills for react-native-ease — migrate Reanimated/Animated code to react-native-ease
npx claudepluginhub appandflow/react-native-easeDeclarative native animations for React Native — migration tools
Share bugs, ideas, or general feedback.
Lightweight declarative animations powered by platform APIs. Uses Core Animation on iOS and Animator on Android — zero JS overhead.
App & Flow is a Montreal-based React Native engineering and consulting studio. We partner with the world’s top companies and are recommended by Expo. Need a hand? Let’s build together. team@appandflow.com
npm install react-native-ease
# or
yarn add react-native-ease
If you're already using react-native-reanimated or React Native's Animated API, this project includes an Agent Skill that scans your codebase for animations that can be replaced with react-native-ease and migrates them automatically.
npx skills add appandflow/react-native-ease
Then invoke the skill in your agent (e.g., /react-native-ease-refactor in Claude Code).
The skill will:
If you're using NativeWind (v4+), add this import once in your app's entry point (e.g., _layout.tsx or App.tsx):
import 'react-native-ease/nativewind';
This registers EaseView with NativeWind's cssInterop so className is properly converted to styles:
<EaseView
className="flex-1 bg-white rounded-2xl p-4"
animate={{ opacity: visible ? 1 : 0 }}
transition={{ type: 'timing', duration: 300 }}
>
{children}
</EaseView>
Tip: If you use the migration skill, it detects NativeWind automatically and adds this import for you.
If you're using Uniwind, first follow the Uniwind quickstart to install and configure Uniwind in your app. That setup includes the required CSS entry file, app-root CSS import, and bundler configuration.
Once Uniwind is set up, import EaseView from the Uniwind entry point:
import { EaseView } from 'react-native-ease/uniwind';
This wraps EaseView with Uniwind's withUniwind(...) so className is converted to styles:
<EaseView
className="flex-1 bg-white rounded-2xl p-4"
animate={{ opacity: visible ? 1 : 0 }}
transition={{ type: 'timing', duration: 300 }}
>
{children}
</EaseView>
import { EaseView } from 'react-native-ease';
function FadeCard({ visible, children }) {
return (
<EaseView
animate={{ opacity: visible ? 1 : 0 }}
transition={{ type: 'timing', duration: 300 }}
style={styles.card}
>
{children}
</EaseView>
);
}
EaseView works like a regular View — it accepts children, styles, and all standard view props. When values in animate change, it smoothly transitions to the new values using native platform animations.
| Use case | Ease | Reanimated |
|---|---|---|
| Fade/slide/scale on state change | ✅ | |
| Enter/exit animations | ✅ | |
| Gesture-driven animations (pan, pinch) | ✅ | |
| Layout animations (width, height) | ✅ | |
| Complex interpolations & chaining | ✅ |