Community Migration
jingjing2222/react-native-nitro-geolocation
Migrate React Native apps from @react-native-community/geolocation to react-native-nitro-geolocation.
Scan for Animated/Reanimated code and migrate to EaseView. An agent skill from smontlouis/bible-strong.
$ npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install smontlouis/bible-strong react-native-ease-refactor --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/smontlouis/bible-strong.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/react-native-ease-refactor .claude/skills/react-native-ease-refactor && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "react-native-ease-refactor" agent skill from https://github.com/smontlouis/bible-strong/tree/master/.agents/skills/react-native-ease-refactor into .claude/skills/react-native-ease-refactor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "react-native-ease-refactor", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/smontlouis/bible-strong/tree/master/.agents/skills/react-native-ease-refactorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install smontlouis/bible-strong react-native-ease-refactor --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/smontlouis/bible-strong.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/react-native-ease-refactor .agents/skills/react-native-ease-refactor && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "react-native-ease-refactor" agent skill from https://github.com/smontlouis/bible-strong/tree/master/.agents/skills/react-native-ease-refactor into .agents/skills/react-native-ease-refactor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "react-native-ease-refactor", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install smontlouis/bible-strong react-native-ease-refactor --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/smontlouis/bible-strong.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/react-native-ease-refactor .cursor/skills/react-native-ease-refactor && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "react-native-ease-refactor" agent skill from https://github.com/smontlouis/bible-strong/tree/master/.agents/skills/react-native-ease-refactor into .cursor/skills/react-native-ease-refactor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "react-native-ease-refactor", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/smontlouis/bible-strong.git --path .agents/skills/react-native-ease-refactor--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install smontlouis/bible-strong react-native-ease-refactor --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/smontlouis/bible-strong.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/react-native-ease-refactor .gemini/skills/react-native-ease-refactor && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "react-native-ease-refactor" agent skill from https://github.com/smontlouis/bible-strong/tree/master/.agents/skills/react-native-ease-refactor into .gemini/skills/react-native-ease-refactor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "react-native-ease-refactor", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install smontlouis/bible-strong react-native-ease-refactorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/smontlouis/bible-strong.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/react-native-ease-refactor .github/skills/react-native-ease-refactor && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "react-native-ease-refactor" agent skill from https://github.com/smontlouis/bible-strong/tree/master/.agents/skills/react-native-ease-refactor into .github/skills/react-native-ease-refactor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "react-native-ease-refactor", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install smontlouis/bible-strong react-native-ease-refactor --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/smontlouis/bible-strong.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/react-native-ease-refactor .opencode/skills/react-native-ease-refactor && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "react-native-ease-refactor" agent skill from https://github.com/smontlouis/bible-strong/tree/master/.agents/skills/react-native-ease-refactor into .opencode/skills/react-native-ease-refactor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "react-native-ease-refactor", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
react-native-ease-refactorScan for Animated/Reanimated code and migrate to EaseView. An agent skill from smontlouis/bible-strong.
React Native Ease Refactor is an agent skill from smontlouis/bible-strong. Scan for Animated/Reanimated code and migrate to EaseView
Its SKILL.md is about 5.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering Cross-platform mobile apps and Refactoring. It works with React Native. The licence is GPL-3.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 05c9a66. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
React Native Ease Refactor loads about 5.9k tokens when it runs. Until then it costs about 21 tokens; SKILL.md has 1,922 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from smontlouis/bible-strong at commit 05c9a66, republished under its GPL-3.0 licence (© smontlouis). 1,922 words, ~5,886 tokens.
.claude/skills/react-native-ease-refactor/SKILL.md (or your agent's skills folder).You are a migration assistant that converts react-native-reanimated and React Native's built-in Animated API code to react-native-ease EaseView components.
Follow these 6 phases exactly. Do not skip phases or reorder them.
Scan the user's project for animation code:
Use Grep to detect if the project uses NativeWind:
from ['"]nativewind['"] in **/*.{ts,tsx,js,jsx}package.json for "nativewind" in dependenciesusesNativeWind = true for use in Phase 5Detect the Reanimated version (needed for default value mapping in Phase 2):
package.json and check the react-native-reanimated version in dependencies or devDependencies^4 or >=4.0.0, set reanimatedVersion = 4reanimatedVersion = 3 (covers v2/v3 which share the same defaults)Use Grep to find all files importing from react-native-reanimated:
from ['"]react-native-reanimated['"]**/*.{ts,tsx,js,jsx}Use Grep to find all files using React Native's built-in Animated API:
from ['"]react-native['"] that also use AnimatedAnimated\.View|Animated\.Text|Animated\.Image|Animated\.Value|Animated\.timing|Animated\.springUse Grep to find files already using react-native-ease (to avoid re-migrating):
from ['"]react-native-ease['"]Read each file that contains animation code. Build a list of components with their animation patterns.
Exclude from scanning:
node_modules/*.test.* and *.spec.* fileslib/, build/, dist/)For each component found, classify as migratable or not migratable.
Apply these checks in order. The first match determines the result:
Gesture.Pan, Gesture.Pinch, Gesture.Rotation, useAnimatedGestureHandler) → NOT migratable — "Gesture-driven animation"useAnimatedScrollHandler, onScroll with Animated.event) → NOT migratable — "Scroll-driven animation"sharedTransitionTag) → NOT migratable — "Shared element transition"runOnUI or worklet directives? → NOT migratable — "Requires worklet runtime"withSequence? → NOT migratable — "Animation sequencing not supported"
5b. Uses withDelay wrapping a single animation (withTiming/withSpring)? → MIGRATABLE — map to delay on the transition
5c. Uses withDelay wrapping withSequence or nested withDelay? → NOT migratable — "Complex delay/sequencing not supported"interpolate()? (more than 2 input/output values) → NOT migratable — "Complex interpolation"layout={...} prop? → NOT migratable — "Layout animation"<prop>"TransitionMap with category keys (transform, opacity, borderRadius, backgroundColor, border, shadow, default)Use this table to convert Reanimated/Animated patterns to EaseView:
| Reanimated / Animated Pattern | EaseView Equivalent |
|---|---|
useSharedValue + useAnimatedStyle + withTiming for opacity, translate, scale, rotate, borderRadius, backgroundColor | animate={{ prop: value }} + transition={{ type: 'timing', duration, easing }} |
withSpring | transition={{ type: 'spring', damping, stiffness, mass }} |
entering={FadeIn} / FadeIn.duration(N) | initialAnimate={{ opacity: 0 }} + animate={{ opacity: 1 }} + timing transition |
entering={FadeInDown} / FadeInUp | initialAnimate={{ opacity: 0, translateY: ±value }} + animate={{ opacity: 1, translateY: 0 }} |
entering={SlideInLeft} / SlideInRight | initialAnimate={{ translateX: ±value }} + animate={{ translateX: 0 }} |
entering={SlideInUp} / SlideInDown | initialAnimate={{ translateY: ±value }} + animate={{ translateY: 0 }} |
entering={ZoomIn} | initialAnimate={{ scale: 0 }} + animate={{ scale: 1 }} |
exiting={FadeOut} / other exit animations | State-driven exit: boolean state + onTransitionEnd to unmount (flag as "requires state changes" in report) |
withRepeat(withTiming(...), -1, false) | transition={{ type: 'timing', ..., loop: 'repeat' }} + initialAnimate for start value |
withRepeat(withTiming(...), -1, true) | transition={{ type: 'timing', ..., loop: 'reverse' }} + initialAnimate for start value |
Easing.linear | easing: 'linear' |
Easing.ease / Easing.inOut(Easing.ease) | easing: 'easeInOut' |
Easing.in(Easing.ease) | easing: 'easeIn' |
Easing.out(Easing.ease) | easing: 'easeOut' |
Easing.bezier(x1, y1, x2, y2) | easing: [x1, y1, x2, y2] |
Animated.Value + Animated.timing | Same animate + transition pattern — convert to state-driven |
Animated.Value + Animated.spring | animate + transition={{ type: 'spring' }} — convert to state-driven |
withDelay(ms, withTiming(...)) or withDelay(ms, withSpring(...)) | transition={{ ..., delay: ms }} — add delay to the transition config |
entering={FadeIn.delay(ms)} / any entering preset with .delay() | initialAnimate + animate + transition={{ ..., delay: ms }} |
Different withTiming/withSpring per property in useAnimatedStyle | transition={{ opacity: { type: 'timing', ... }, transform: { type: 'spring', ... } }} (per-property map) |
CRITICAL: Reanimated and EaseView have different defaults. You MUST explicitly set values to preserve the original animation behavior. Do not rely on EaseView defaults matching Reanimated defaults.
Use reanimatedVersion from Phase 1 to select the correct defaults.
withSpring → EaseView springReanimated v2/v3 defaults:
| Parameter | Reanimated v2/v3 | EaseView default | Action |
|---|---|---|---|
damping | 10 | 15 | Must set damping: 10 |
stiffness | 100 | 120 | Must set stiffness: 100 |
mass | 1 | 1 | Same — omit |
Reanimated v4 defaults:
| Parameter | Reanimated v4 | EaseView default | Action |
|---|---|---|---|
damping | 120 | 15 | Must set damping: 120 |
stiffness | 900 | 120 | Must set stiffness: 900 |
mass | 4 | 1 | Must set mass: 4 |
Reanimated v4 changed to a critically damped, snappy spring (no bounce) as the default. The rationale was that the old physics-based defaults were too sensitive to start/end conditions. v4 recommends using duration + dampingRatio instead of raw physics params.
If the source code explicitly sets any of these values, carry them over as-is. If the source relies on Reanimated defaults (no explicit value), set the Reanimated default explicitly on the EaseView transition.
Example — bare withSpring(1) with no config:
// Before (Reanimated)
scale.value = withSpring(1);
// After (EaseView) — v2/v3: set damping: 10, stiffness: 100
transition={{ type: 'spring', damping: 10, stiffness: 100 }}
// After (EaseView) — v4: set damping: 120, stiffness: 900, mass: 4
transition={{ type: 'spring', damping: 120, stiffness: 900, mass: 4 }}Duration-based spring: Reanimated v3+ also supports withSpring(target, { duration, dampingRatio }). If the code explicitly sets dampingRatio/duration, convert using: damping = dampingRatio * 2 * sqrt(stiffness * mass).
withTiming → EaseView timing| Parameter | Reanimated default | EaseView default | Action |
|---|---|---|---|
duration | 300 | 300 | Same — omit |
easing | Easing.inOut(Easing.quad) | 'easeInOut' (cubic) | Must set easing: [0.455, 0.03, 0.515, 0.955] |
The easing curves are different! Reanimated's default is quadratic ease-in-out, EaseView's is cubic. Always set the easing explicitly when the source doesn't specify one.
Example — bare withTiming(1) with no config:
// Before (Reanimated)
opacity.value = withTiming(1);
// After (EaseView) — must set quad easing to match
transition={{ type: 'timing', duration: 300, easing: [0.455, 0.03, 0.515, 0.955] }}If the source explicitly sets an easing, map it using the easing table above.
Animated.timing (old RN API) → EaseView timing| Parameter | RN Animated default | EaseView default | Action |
|---|---|---|---|
duration | 500 | 300 | Must set duration: 500 |
easing | Easing.inOut(Easing.ease) | 'easeInOut' | Same curve — omit |
Animated.spring (old RN API) → EaseView springRN Animated uses friction/tension by default: friction: 7, tension: 40. These map to: stiffness = tension, damping = friction.
| Parameter | RN Animated default | EaseView default | Action |
|---|---|---|---|
| stiffness (tension) | 40 | 120 | Must set stiffness: 40 |
| damping (friction) | 7 | 15 | Must set damping: 7 |
| mass | 1 | 1 | Same — omit |
'45deg' strings in transforms → EaseView uses 45 (number, degrees). Strip the 'deg' suffix and parse to number.ALWAYS print this report before asking the user to select components. This report must be visible to the user before Phase 4.
Print a structured report. Do NOT apply any changes yet.
Format:
## Migration Report
### Summary
- Files scanned: X
- Components with animations: Y
- Migratable: Z | Not migratable: W
### Migratable Components
#### `path/to/file.tsx` — ComponentName
**Current:** Brief description of what the animation does and which API it uses
**Proposed:** What the EaseView equivalent looks like (include exact transition values with mapped defaults)
**Changes:** What will be added/removed/modified
**Note:** (only if applicable) "Requires state changes for exit animation" or other caveats
### Not Migratable (will be skipped)
#### `path/to/file.tsx` — ComponentName
**Reason:** Why it can't be migrated (from decision tree)This report MUST be printed as text output in the conversation — not inside a plan, not collapsed. The user needs to read it before selecting components in Phase 4.
CRITICAL: You MUST use the AskUserQuestion tool here. Do NOT use plan mode, do NOT use text prompts, do NOT ask inline. Call the AskUserQuestion tool directly.
Call AskUserQuestion with these exact parameters:
multiSelect: truequestions: a single question object with:header: "Migrate"question: "Which components should be migrated to EaseView? All are selected — deselect any to skip."multiSelect: trueoptions: one entry per migratable component, each with:label: the component name (e.g., "AnimatedButton")description: file path and brief animation description (e.g., "src/components/animated-button.tsx — spring scale on press")Example tool call for 2 migratable components:
{
"questions": [
{
"header": "Migrate",
"question": "Which components should be migrated to EaseView? All are selected — deselect any to skip.",
"multiSelect": true,
"options": [
{
"label": "AnimatedButton",
"description": "src/components/simple/animated-button.tsx — spring scale on press"
},
{
"label": "Collapsible",
"description": "src/components/ui/collapsible.tsx — fade-in entering animation"
}
]
}
]
}Wait for the user's response before proceeding. Do not enter plan mode. Do not apply any changes without the user selecting components.
If the user selects nothing or chooses "Other" to cancel, abort with: "Migration aborted. No changes were made."
Only proceed to Phase 5 with the components the user confirmed.
For each confirmed component, apply the migration:
Add EaseView import if not already present:
import { EaseView } from 'react-native-ease';1b. If usesNativeWind is true, check if import 'react-native-ease/nativewind' already exists in the project (search all files). If not, add it to the app's root entry point (e.g., _layout.tsx, App.tsx, or index.tsx — whichever is the earliest entry). This only needs to be done once across all migrations, not per component.
Replace the animated view:
Animated.View → EaseView<Animated.View style={[styles.box, animatedStyle]}> → <EaseView style={styles.box} animate={{ ... }} transition={{ ... }}>Convert animation hooks to props:
useSharedValue, useAnimatedStyle, withTiming, withSpring, withRepeat callsanimate, initialAnimate, and transition propsConvert entering/exiting animations:
entering={FadeIn} → initialAnimate={{ opacity: 0 }} on the EaseView + animate={{ opacity: 1 }}
For exiting: introduce a state variable and onTransitionEnd callback:
const [visible, setVisible] = useState(true);
const [mounted, setMounted] = useState(true);
// When triggering exit:
setVisible(false);
// On the EaseView:
{
mounted && (
<EaseView
animate={{ opacity: visible ? 1 : 0 }}
transition={{ type: 'timing', duration: 300 }}
onTransitionEnd={({ finished }) => {
if (finished && !visible) setMounted(false);
}}
>
...
</EaseView>
);
}Clean up imports:
Print progress:
[1/N] Migrated ComponentName in path/to/file.tsxThese rules are non-negotiable. Violating them corrupts user code.
'45deg' string → EaseView 45 number. If the source uses radians, convert: radians * (180 / Math.PI).After all migrations are applied, print:
## Migration Complete
### Changed (X components)
- `path/to/file.tsx` — ComponentName: brief description of what was migrated
### Unchanged (Y components)
- `path/to/file.tsx` — ComponentName: reason skipped
### Next Steps
- Run your app and verify animations visually
- Run your test suite to check for regressions
- If no Reanimated code remains, consider removing `react-native-reanimated` from dependenciesAll properties in the animate prop:
| Property | Type | Default | Notes |
|---|---|---|---|
opacity | number | 1 | 0–1 range |
translateX | number | 0 | In DIPs (density-independent pixels) |
translateY | number | 0 | In DIPs |
scale | number | 1 | Shorthand for scaleX + scaleY |
scaleX | number | 1 | Overrides scale for X axis |
scaleY | number | 1 | Overrides scale for Y axis |
rotate | number | 0 | Z-axis rotation in degrees |
rotateX | number | 0 | X-axis rotation in degrees (3D) |
rotateY | number | 0 | Y-axis rotation in degrees (3D) |
borderRadius | number | 0 | In pixels |
backgroundColor | ColorValue | 'transparent' | Any RN color value |
borderWidth | number | 0 | In pixels |
borderColor | ColorValue | 'black' | Any RN color value |
shadowOpacity | number | 0 | 0–1 (iOS only) |
shadowRadius | number | 0 | In pixels (iOS only) |
shadowColor | ColorValue | 'black' | Any RN color value (iOS only) |
shadowOffset | object | {width:0,height:0} | { width, height } (iOS only) |
elevation | number | 0 | Android material shadow |
Timing:
transition={{
type: 'timing',
duration: 300, // ms, default 300
easing: 'easeInOut', // 'linear' | 'easeIn' | 'easeOut' | 'easeInOut' | [x1,y1,x2,y2]
delay: 0, // ms, default 0
loop: 'repeat', // 'repeat' | 'reverse' — requires initialAnimate
}}Spring:
transition={{
type: 'spring',
damping: 15, // default 15
stiffness: 120, // default 120
mass: 1, // default 1
delay: 0, // ms, default 0
}}None (instant):
transition={{ type: 'none' }}animate — target values for animated propertiesinitialAnimate — starting values (animates to animate on mount)transition — animation config: a single SingleTransition (timing/spring/none) OR a TransitionMap with category keys (default, transform, opacity, borderRadius, backgroundColor, border, shadow)onTransitionEnd — callback with { finished: boolean }transformOrigin — pivot point as { x: 0-1, y: 0-1 }, default centeruseHardwareLayer — Android GPU optimization (boolean, default false)className — NativeWind / Tailwind CSS class string (requires NativeWind in the project)initialAnimate must define the start valueTransitionMap with category keys (default, transform, opacity, borderRadius, backgroundColor, border, shadow) to use different configs per property groupwithSequence. Simple withDelay IS supported via the delay transition propstyle and animate, the animated value wins© smontlouis, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/react-native-ease-refactor of smontlouis/bible-strong.
Open the folder on GitHubat commit 05c9a66
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in smontlouis/bible-strong, which our catalogue first saw on October 7, 2026.
React Native Ease Refactor next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| React Native Ease Refactor this skillsmontlouis/bible-strong | 171 | 1 repos | ~5.9k | Automated safety check: Pass | GPL-3.0 | |
| Community Migrationjingjing2222/react-native-nitro-geolocation | 116 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Fullstack Webapprevfactory/harness-100 | 1.3k | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| Uniwindpproenca/dot-skills | 214 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Code Guidelinesgetsentry/sentry-react-native | 1.8k | — | ~3.2k | Automated safety check: Pass | MIT | |
| React Native Best Practicesvercel-labs/openreview | 1.7k | 17 repos | ~1.1k | Automated safety check: Pass | MIT |
jingjing2222/react-native-nitro-geolocation
Migrate React Native apps from @react-native-community/geolocation to react-native-nitro-geolocation.
revfactory/harness-100
A full development pipeline where an agent team collaborates to develop fullstack web apps through requirements analysis, design, frontend, backend, testing, and deployment.
pproenca/dot-skills
Uniwind best practices for React Native styling with Tailwind CSS.
getsentry/sentry-react-native
Enforce Sentry React Native SDK code guidelines for implementation, refactoring, and review.
vercel-labs/openreview
A prioritized rule set for React Native and Expo apps covering list performance, animation, navigation, UI patterns, state, rendering, monorepos and configuration.
gluestack/gluestack-ui
Generate React Native Reanimated animation code for React Native apps.
smontlouis/bible-strong
Guides and best practices for working with Lakebase Postgres, the database behind Neon.
smontlouis/bible-strong
Create or adapt Bible Strong illustrations in the house style of flat colors, monochromatic characters, and fine detail lines.
smontlouis/bible-strong
Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files.
smontlouis/bible-strong
Deterministic Strong-Bible command workflow for this repository.
smontlouis/bible-strong
Sequentially review and merge GitHub pull requests one at a time.
smontlouis/bible-strong
Overview of Neon, a complete set of cloud backend primitives for apps and agents, spanning Lakebase Postgres, Auth, the Data API, Object Storage, Compute Functions, and the AI Gateway.
Works with
Categories
Scan for Animated/Reanimated code and migrate to EaseView. An agent skill from smontlouis/bible-strong. React Native Ease Refactor is an agent skill from smontlouis/bible-strong.
React Native Ease Refactor fits situations like: tasks that involve Cross-platform mobile apps; tasks that involve Refactoring.
Run `npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a claude-code`. Or copy the skill folder (.agents/skills/react-native-ease-refactor in smontlouis/bible-strong) into .claude/skills/react-native-ease-refactor in your project. Claude Code loads it when a task matches its description.
Run `npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a codex`. Or copy the skill folder (.agents/skills/react-native-ease-refactor in smontlouis/bible-strong) into .agents/skills/react-native-ease-refactor in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add smontlouis/bible-strong --skill react-native-ease-refactor -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/react-native-ease-refactor, .gemini/skills/react-native-ease-refactor, .github/skills/react-native-ease-refactor and .opencode/skills/react-native-ease-refactor in your project.
SKILL.md names no scripts, command-line tools or credentials: React Native Ease Refactor is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
React Native Ease Refactor is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.9k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with React Native Ease Refactor: Community Migration (jingjing2222/react-native-nitro-geolocation, 116 stars), Fullstack Webapp (revfactory/harness-100, 1.3k stars), Uniwind (pproenca/dot-skills, 214 stars) and Code Guidelines (getsentry/sentry-react-native, 1.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
smontlouis (a GitHub user) maintains it in smontlouis/bible-strong, which has 171 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 6, 2026.
Source: smontlouis/bible-strong on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.