React Native Best Practices
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.
Add React Native support (.native.tsx files) to Blade components that currently only have web implementations.
$ npx skills add razorpay/blade --skill migrate-to-rn -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install razorpay/blade migrate-to-rn --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/razorpay/blade.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/migrate-to-rn .claude/skills/migrate-to-rn && 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 "migrate-to-rn" agent skill from https://github.com/razorpay/blade/tree/master/.agents/skills/migrate-to-rn into .claude/skills/migrate-to-rn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-to-rn", 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/razorpay/blade/tree/master/.agents/skills/migrate-to-rnType 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 razorpay/blade --skill migrate-to-rn -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install razorpay/blade migrate-to-rn --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/razorpay/blade.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/migrate-to-rn .agents/skills/migrate-to-rn && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-to-rn" agent skill from https://github.com/razorpay/blade/tree/master/.agents/skills/migrate-to-rn into .agents/skills/migrate-to-rn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-to-rn", 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 razorpay/blade --skill migrate-to-rn -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install razorpay/blade migrate-to-rn --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/razorpay/blade.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/migrate-to-rn .cursor/skills/migrate-to-rn && 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 "migrate-to-rn" agent skill from https://github.com/razorpay/blade/tree/master/.agents/skills/migrate-to-rn into .cursor/skills/migrate-to-rn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-to-rn", 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/razorpay/blade.git --path .agents/skills/migrate-to-rn--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 razorpay/blade --skill migrate-to-rn -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install razorpay/blade migrate-to-rn --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/razorpay/blade.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/migrate-to-rn .gemini/skills/migrate-to-rn && 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 "migrate-to-rn" agent skill from https://github.com/razorpay/blade/tree/master/.agents/skills/migrate-to-rn into .gemini/skills/migrate-to-rn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-to-rn", 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 razorpay/blade migrate-to-rnInstalls 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 razorpay/blade --skill migrate-to-rn -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/razorpay/blade.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/migrate-to-rn .github/skills/migrate-to-rn && 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 "migrate-to-rn" agent skill from https://github.com/razorpay/blade/tree/master/.agents/skills/migrate-to-rn into .github/skills/migrate-to-rn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-to-rn", 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 razorpay/blade --skill migrate-to-rn -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install razorpay/blade migrate-to-rn --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/razorpay/blade.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/migrate-to-rn .opencode/skills/migrate-to-rn && 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 "migrate-to-rn" agent skill from https://github.com/razorpay/blade/tree/master/.agents/skills/migrate-to-rn into .opencode/skills/migrate-to-rn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-to-rn", 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.
migrate-to-rnAdd React Native support (.native.tsx files) to Blade components that currently only have web implementations.
Migrate To Rn is an agent skill from razorpay/blade. Add React Native support (.native.tsx files) to Blade components that currently only have web implementations. Use when user says "add native support to {Component}", "migrate {Component} to native", or "/migrate-to-rn".
Its SKILL.md is about 4.4k 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, React components and Git worktrees. It works with React Native. The repository describes itself as: Design System that powers Razorpay. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit fa38cf0. 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.
Shell commands in SKILL.md call:
gityarnxcrunghFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
claude.comFrom 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.
Migrate To Rn loads about 4.4k tokens when it runs. Until then it costs about 59 tokens; SKILL.md has 1,389 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 razorpay/blade at commit fa38cf0, republished under its MIT licence (© razorpay). 1,389 words, ~4,405 tokens.
.claude/skills/migrate-to-rn/SKILL.md (or your agent's skills folder).Use this skill when the user asks to run the migrated source command migrate-to-rn.
You ARE the orchestrator. You set up worktrees, spawn agents, present gates, and open PRs. You do NOT read agent files to follow their steps yourself.
jq, agent-device, agent-browser) and install anything missing before Step 0subagent_typeUse the Read tool to load:
.claude/rules/orchestrator-guardrails.md.claude/rules/rn-migration.mdAssumes Blade dev already works (yarn install, Xcode, pod install, yarn start:ios, etc.).
Before Step 0, verify these skill-only tools are on PATH:
command -v jq || echo 'MISSING: jq'
command -v agent-device || echo 'MISSING: agent-device'
command -v agent-browser || echo 'MISSING: agent-browser'| Tool | Why |
|---|---|
jq | .claude/settings.json hook — artifact listing when spawning RN agents |
agent-device | Simulator visual verify (global on PATH, not npx) |
agent-browser | Web vs native screenshot compare in Verify 4e (global on PATH, not npx) |
If any check fails: install the missing tool(s), run any post-install setup they require, then re-check. Do not proceed to Step 0 until all three pass.
Optional later: gh authenticated — only needed at Final Gate for gh pr create.
User provides one or more component names (e.g., "add native support to Drawer" or "migrate Drawer, InfoGroup to native").
feat/blade-rn/{Name}.claude/worktrees/{Name}/.claude/artifacts/{Name}/.claude/artifacts/batch-status.md (main checkout)Extract component name(s). If multiple, process as a batch.
For each component:
ls packages/blade/src/components/{Name}/ > /dev/null 2>&1 && echo "EXISTS" || echo "NOT FOUND"If not found → report error, skip that component.
Don't classify on bare
throwBladeError— validation-only files (Tabs,Avatar,AccordionButton) are REAL. Use the Plan agent's genuine-stub detection so the gate and Plan phase agree.
# Genuine stub = small file whose body is essentially just a throwBladeError (no real render tree/hooks).
# Validation-only files that use throwBladeError are large, so a line-count threshold separates them.
grep -rl "throwBladeError" packages/blade/src/components/{Name}/ --include="*.native.tsx" | while read -r f; do
if [ "$(wc -l < "$f")" -lt 40 ]; then echo "STUB: $f"; else echo "REAL: $f"; fi
doneSTUB:, or no .native.tsx at all → needs migration (proceed)STUB: and REAL: → partial migration (proceed — Plan only creates/replaces the stub/missing files, skips REAL ones)REAL: → skip: "Already has native support"Number the surviving components 1..N (in input order). Assign per slot:
Slot i | Metro Port | iOS Simulator Device | Session Name |
|---|---|---|---|
| 1 | 8081 | iPhone 17 | rn-{Name1} |
| 2 | 8082 | iPhone 17 Pro | rn-{Name2} |
| 3 | 8083 | iPhone 17 Pro Max | rn-{Name3} |
| 4 | 8084 | iPhone 17e | rn-{Name4} |
| 5 | 8085 | iPhone Air | rn-{Name5} |
Cap at 5 parallel slots (machine RAM/CPU limit — each booted simulator uses ~2-3 GB). If batch > 5, queue remaining components and process them after the first batch's verify phase completes.
This works because agent-device natively supports multi-worktree RN development: each simulator gets its own Metro port written to per-simulator debug server settings on open, so bundles don't conflict. See agent-device help react-native for details.
For each component in the batch:
git worktree add -B feat/blade-rn/{Name} .claude/worktrees/{Name} origin/mastercd .claude/worktrees/{Name} && yarn install --frozen-lockfileOr if APFS clone available:
cp -Rc node_modules .claude/worktrees/{Name}/node_modules 2>/dev/null || (cd .claude/worktrees/{Name} && yarn install --frozen-lockfile)The Storybook .app binary only needs to be built once — all worktrees share the same native code; only JS differs (served by each worktree's own Metro). Build from the first slot's worktree:
cd .claude/worktrees/{Name1}/packages/blade && yarn start:iosThis builds, installs, and launches the app on the first simulator (slot 1's device). Run via Bash tool with run_in_background: true.
Wait for the build to complete and the app to appear:
agent-device wait text "COMPONENTS" 60000 --session rn-{Name1}For slots 2..N, the app is already installed on the first simulator. To get it on additional simulators, install the built .app artifact:
# Find the built .app from the Xcode derived data
APP_PATH=$(find ~/Library/Developer/Xcode/DerivedData -name "blade.app" -path "*/Build/Products/Debug-iphonesimulator/*" -maxdepth 5 2>/dev/null | head -1)
# For each additional slot i (2..N):
agent-device open org.reactjs.native.example.blade \
--platform ios --device "{iOSDevice_i}" \
--session rn-{Name_i} --metro-port {MetroPort_i} --relaunchIf the app isn't found on a secondary simulator, install it explicitly:
agent-device install org.reactjs.native.example.blade "$APP_PATH" \
--platform ios --device "{iOSDevice_i}"
agent-device open org.reactjs.native.example.blade \
--platform ios --device "{iOSDevice_i}" \
--session rn-{Name_i} --metro-port {MetroPort_i} --relaunchNote: Metro is NOT started by the orchestrator — each Verify agent starts its own Metro on the assigned port inside its worktree.
CRITICAL: Without this step, reloads on any simulator will fetch the JS bundle from port 8081 (the default), causing cross-contamination between worktrees during parallel visual verification.
After the app is installed on all simulators, write the correct Metro port into each simulator's app preferences using xcrun simctl spawn:
# Slot 1 (port 8081) — default, no override needed
# For slots 2..N:
xcrun simctl spawn "{iOSDevice_2}" defaults write org.reactjs.native.example.blade RCT_jsLocation "localhost:{MetroPort_2}"
xcrun simctl spawn "{iOSDevice_3}" defaults write org.reactjs.native.example.blade RCT_jsLocation "localhost:{MetroPort_3}"
# ... repeat for each additional slotThis writes into NSUserDefaults for that simulator's app container, so even when the app reloads (shake gesture, error recovery, Fast Refresh reconnect), it fetches from the correct Metro port — not 8081.
Verify this worked: Each Verify agent should see its own worktree's component in the Storybook list, not another slot's component.
⛔ HARD GATE: Steps 0.7 and 0.8 are MANDATORY before spawning Verify agents. Do NOT proceed to Step 4 (Verify Phase) without completing the shared app build and port isolation. The app binary (native shell) can be built as early as Step 0 since RN migrations only add
.native.tsx(JS) files — Metro serves the latest JS dynamically at runtime. Building early lets the ~5min build run in parallel with Plan/Execute, saving wall-clock time. Only rebuild after Execute if a new native dependency was added (new pod/native module) — rare for RN migrations. TS checks and unit tests can run without the app, but visual verification requires it. If the app build is skipped, Verify agents MUST be told--skip-visualor visual results are invalid. Alternatively, the first Verify agent can build the app if the orchestrator hasn't — but only one agent should build, not all of them.
Spawn Plan agents for all components in one message:
Agent(
subagent_type: "plan-rn-migration",
description: "Plan RN migration for {Name}",
run_in_background: false,
prompt: "
Add native support to {Name}.
- Component name: {Name}
- Worktree (absolute base): {absolute_path_to_worktree}
ALWAYS use absolute paths prefixed with the worktree.
Read .claude/rules/rn-migration.md and .claude/rules/agent-base-directory.md first.
React source: {Worktree}/packages/blade/src/components/{Name}/
Output artifacts to: {Worktree}/.claude/artifacts/{Name}/
Templates at: {Worktree}/.claude/templates/
"
)For multiple components: send all Agent calls in a single message for parallel execution.
After all Plan agents return:
{Worktree}/.claude/artifacts/{Name}/rn-discovery-report.md{Worktree}/.claude/artifacts/{Name}/rn-migration-plan.md## Migration Plan Summary: {Name}
- **Complexity:** {tier}
- **Files to create:** {N}
- **Files to rename:** {N}
- **Unsupported CSS items:** {N}
- **Animations to port:** {N}
- **Blockers:** {list or "none"}
- **Risk:** {low/medium/high}
### Key decisions:
1. {decision 1}
2. {decision 2}
Shall I proceed with execution?If blockers exist: Flag them clearly. The user must decide: wait for dependency, workaround, or abort.
After user approval, spawn Execute agents:
Agent(
subagent_type: "execute-rn-migration",
description: "Execute RN migration for {Name}",
run_in_background: false,
prompt: "
Create native implementation for {Name}.
- Component name: {Name}
- Mode: Full
- Worktree (absolute base): {absolute_path_to_worktree}
ALWAYS use absolute paths prefixed with the worktree.
Read .claude/rules/rn-migration.md and .claude/rules/agent-base-directory.md first.
Migration plan: {Worktree}/.claude/artifacts/{Name}/rn-migration-plan.md
Web source: {Worktree}/packages/blade/src/components/{Name}/
"
)Pre-flight check: Before spawning Verify agents, confirm:
- ✅ Step 0.7 completed (shared app built and installed on all simulators)
- ✅ Step 0.8 completed (
RCT_jsLocationset per simulator for port isolation) If either is missing, complete them NOW before proceeding. Do NOT spawn Verify agents without the app build.
After Execute completes, spawn Verify agents. Each agent gets its own Metro port, simulator device, and session name from the slot allocation (Step 0.4). This allows all verify agents to run truly in parallel without resource conflicts.
Agent(
subagent_type: "verify-rn-migration",
description: "Verify RN migration for {Name}",
run_in_background: false,
prompt: "
Verify native implementation for {Name}.
- Component name: {Name}
- Worktree (absolute base): {absolute_path_to_worktree}
- Metro port: {MetroPort}
- iOS device: {iOSDevice}
- Session name: {SessionName}
ALWAYS use absolute paths prefixed with the worktree.
Read .claude/rules/rn-migration.md and .claude/rules/agent-base-directory.md first.
Discovery report: {Worktree}/.claude/artifacts/{Name}/rn-discovery-report.md
Screenshots dir: {Worktree}/.claude/artifacts/{Name}/screenshots/
Verification report: {Worktree}/.claude/artifacts/{Name}/rn-verification-report.md
PARALLEL VERIFICATION: You have a dedicated simulator and Metro port.
- Start Metro on port {MetroPort} (not 8081 unless that is your assigned port).
- Use --session {SessionName} on ALL agent-device commands.
- The app is already installed on your simulator by the orchestrator.
- Use: agent-device open org.reactjs.native.example.blade --platform ios --device \"{iOSDevice}\" --session {SessionName} --metro-port {MetroPort} --relaunch
- Do NOT run 'agent-device boot' — the open command boots the simulator.
- Call agent-device / agent-browser directly (they are installed globally); do NOT prefix with 'npx' (npx re-resolves the package each call and can cause the app to blank/refresh).
"
)For multiple components: send all Agent calls in a single message for true parallel execution. Each agent operates on an isolated simulator + Metro + session combination.
The Verify agent self-heals by spawning Execute in Patch mode internally.
After Verify completes:
{Worktree}/.claude/artifacts/{Name}/rn-verification-report.md{Worktree}/.claude/artifacts/{Name}/screenshots/## Verification Result: {Name}
**Status:** {PASS / PASS WITH WARNINGS / FAIL}
**Iterations:** {N}
**Platform tested:** {iOS / visual skipped}
### Checklist:
- TypeScript: {pass/fail}
- Tests: {pass/fail} ({N}/{N})
- Visual: {clean / P2 warnings / issues / skipped}
### Screenshots:
{list screenshot paths for user to review}
### Issues (if any):
{P1/P2 items with descriptions}
Ready to create PR?⛔ Human approval required. Do NOT run any command in this step (
git add,git commit,git push,gh pr create) unless the user explicitly approved at the Final Gate in Step 5. If approval was not given in this conversation, stop and ask. This applies per component — approval for one component does not cover another.
For each component that passed:
# Stage only the component source — NOT the migration artifacts/screenshots in .claude/artifacts/.
cd {Worktree} && git add packages/blade/src/components/{Name}
# Add any other intentionally-changed source files explicitly (e.g. storybook registration) — never `git add -A`.
cd {Worktree} && git commit -m "feat(native): Add React Native support for {Name}
Implements .native.tsx files for the {Name} component, replacing stub
implementations with real native rendering using styled-components/native
and react-native-reanimated.
Co-Authored-By: Claude <noreply@anthropic.com>"
cd {Worktree} && git push -u origin feat/blade-rn/{Name}
cd {Worktree} && gh pr create \
--title "feat(native): Add React Native support for {Name}" \
--body "$(cat <<'EOF'
## Summary
- Adds native implementation (.native.tsx) for {Name} component
- Replaces throwBladeError stubs with real platform-specific rendering
- Uses styled-components/native + react-native-reanimated
## Changes
- Created: {list .native.tsx files}
- Renamed: {list .tsx → .web.tsx renames, if any}
- Modified: {list modified files like types.ts}
## Verification
- [x] TypeScript native compilation passes
- [x] Native tests pass
- [ ] Visual verification on iOS simulator {PASS/INCOMPLETE}
- [ ] Visual verification on Android {SKIPPED/PASS}
## Screenshots
{include key screenshot paths or inline if small}
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"Write/update .claude/artifacts/batch-status.md in the main checkout:
# RN Migration Batch Status
| # | Component | Metro Port | iOS Device | Session | Plan | Execute | Verify | PR | Status |
|---|-----------|-----------|------------|---------|------|---------|--------|-----|--------|
| 1 | {Name1} | 8081 | iPhone 17 | rn-{Name1} | ✅ | ✅ | ✅ | #{number} | Done |
| 2 | {Name2} | 8082 | iPhone 17 Pro | rn-{Name2} | ✅ | ✅ | ❌ FAIL | — | Needs fix |If component A imports from component B, and both are in the same batch:
🟡 deferred — only B proceeds through Execute/Verify/PR| Situation | Action |
|---|---|
| Plan agent finds blockers | Present to user, ask to proceed or abort |
| Execute fails (type errors) | Verify will catch and patch |
| Verify fails after 6 iterations | Present FAIL report, ask user for manual fix or abort |
| Worktree conflicts | cd {Worktree} && git reset --hard origin/master and re-run |
| Simulator fails to boot for a slot | Try next available device from the pool; if none left, that component's verify runs sequentially after another slot finishes |
| Metro port conflict | Kill the conflicting process (`lsof -ti:{port} |
| Shared app build fails | Retry with clean build (Step 0.7); all verify agents are blocked until build succeeds |
© razorpay, MIT. 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/migrate-to-rn of razorpay/blade.
Open the folder on GitHubat commit fa38cf0
Migrate To Rn 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 |
|---|---|---|---|---|---|---|
| Migrate To Rn this skillrazorpay/blade | 656 | — | ~4.4k | Automated safety check: Pass | MIT | |
| React Native Best Practicesvercel-labs/openreview | 1.7k | 17 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Argent Metro Debuggerbbplayer-app/BBPlayer | 1.2k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Simfleetentropyconquers/simfleet | 118 | — | ~1.5k | Automated safety check: Pass | MIT | |
| React Devtoolssanity-io/sanity | 6.4k | 3 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Community Migrationjingjing2222/react-native-nitro-geolocation | 115 | — | ~3.5k | Automated safety check: Pass | MIT |
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.
bbplayer-app/BBPlayer
Debug a JS runtime via CDP using argent debugger tools. An agent skill from bbplayer-app/BBPlayer.
entropyconquers/simfleet
Operate a simfleet device fleet: slimmed iOS simulators and Android emulators, parallel React Native worktree lanes with leased Metro ports, the native build cache, and per-agent device claims.
sanity-io/sanity
React DevTools CLI for AI agents. An agent skill from sanity-io/sanity.
jingjing2222/react-native-nitro-geolocation
Migrate React Native apps from @react-native-community/geolocation to react-native-nitro-geolocation.
fluid-design-io/payload-better-auth-starter
React and React Native file-system architecture patterns that scale.
razorpay/blade
Review blade PRs by fetching diff, checking CI status, and getting Storybook URL.
razorpay/blade
Orchestrate parallel migration of Blade React components to Svelte 5.
razorpay/blade
Important guidelines for writing frontend UI code. An agent skill from razorpay/blade.
razorpay/blade
Heal a Blade PR by fixing CI failures, missing changesets, and sanity issues.
razorpay/blade
This rule helps in reviewing the component before shipping to make sure all important things are checked
razorpay/blade
Resolve comments on a pull request. An agent skill from razorpay/blade.
Works with
Categories
Add React Native support (.native.tsx files) to Blade components that currently only have web implementations. Migrate To Rn is an agent skill from razorpay/blade.tsx files) to Blade components that currently only have web implementations.
Migrate To Rn fits situations like: user says add native support to {Component}; migrate {Component} to native.
Run `npx skills add razorpay/blade --skill migrate-to-rn -a claude-code`. Or copy the skill folder (.agents/skills/migrate-to-rn in razorpay/blade) into .claude/skills/migrate-to-rn in your project. Claude Code loads it when a task matches its description.
Run `npx skills add razorpay/blade --skill migrate-to-rn -a codex`. Or copy the skill folder (.agents/skills/migrate-to-rn in razorpay/blade) into .agents/skills/migrate-to-rn 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 razorpay/blade --skill migrate-to-rn -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-to-rn, .gemini/skills/migrate-to-rn, .github/skills/migrate-to-rn and .opencode/skills/migrate-to-rn in your project.
Going by SKILL.md and its folder, Migrate To Rn needs the command-line tools its instructions call (git, yarn, xcrun and gh).
SKILL.md names 1 domain. In commands or code: claude.com; the agent is likely to contact it when it follows the instructions. 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.
Migrate To Rn is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.4k tokens (SKILL.md is roughly 18k 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 Migrate To Rn: React Native Best Practices (vercel-labs/openreview, 1.7k stars), Argent Metro Debugger (bbplayer-app/BBPlayer, 1.2k stars), Simfleet (entropyconquers/simfleet, 118 stars) and React Devtools (sanity-io/sanity, 6.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
razorpay (a GitHub organization) maintains it in razorpay/blade, which has 656 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 9, 2026.
Source: razorpay/blade on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.