reanimated-cherry-pick
Skill11k starsChanged 9 days agoMITView on GitHub
Backports merged upstream PRs onto a release branch using one worktree per PR so the cherry-picks don't fight over the same working tree. Each cherry-pick becomes its own PR (open it ready-for-review — drafting is optional), and the tracking issue for the release is updated with links. Preferably use PR stack from GitHub. Ask for or extract from the request: - Release branch — e.g. 4.3-stable - PR list — one or more GitHub PR URLs / numbers in software-mansion/react-native-reanimated…
- Deletes or force-pushes
- Commits and pushes
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 5 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 19
Ask for or extract from the request:
- Very specific: line 23
Use only the PR number for <PR> and $pr in branch names, paths and commands.
- Distinctive: line 25
Ask if not provided.
- Very specific: line 48
If original author differs from user, add the user as Co-authored-by: trailer.
- Very specific: line 49
Never: add Co-Authored-By: Claude or 🤖 Generated with Claude Code anywhere — not in commits, not in PR bodies.
- Very specific: line 100
If the upstream PR also changes Worklets, leave the Worklets part out of the cherry-pick: restore packages/react-native-worklets/ from the …
- Very specific: line 143
If the upstream squash commit already has a Co-authored-by: <you> trailer (GitHub's squash-merge often adds it, and it comes into …
- Very specific: line 164
If a previous failed attempt left an empty branch on remote, use --force-with-lease.
- Very specific: line 187
If the upstream PR is not in the list yet, add both lines.
- Distinctive: line 204
Before executing steps that create externally visible artifacts, confirm scope with the user:
- Very specific: line 206
Before gh pr create — first run only, to verify title/body format is right.
- Distinctive: line 207
Before git push --force-with-lease — force-push is fine on private cherry-pick branches but flag it.
- Distinctive: line 208
Before amending a commit that changes authorship — surface the change.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Cherry-pick PRs onto a Reanimated release branch
Backports merged upstream PRs onto a release branch using one worktree per PR so the cherry-picks don't fight over the same working tree. Each cherry-pick becomes its own PR (open it ready-for-review — drafting is optional), and the tracking issue for the release is updated with links.
Preferably use PR stack from GitHub.
Inputs
Ask for or extract from the request:
- Release branch — e.g.
4.3-stable - PR list — one or more GitHub PR URLs / numbers in
software-mansion/react-native-reanimatedUse only the PR number for<PR>and$prin branch names, paths and commands. - Tracking issue — the "Reanimated X.Y.Z cherry-pick thread" issue. Some titles use the form
[Reanimated] [X.Y.Z] cherry-pick thread. Ask if not provided.
Naming conventions
| Thing | Pattern |
| Local branch | @<you>/<release-branch>/cherry-pick-#<PR> (contains # — quote it in shell) |
| Worktree path | ../rnr-cp-<PR> (sibling of the repo, not inside it) |
| PR title | cherry-pick(<release-branch>): <upstream title with conv-commit prefix stripped> (#<PR>) |
| PR body | Cherry-picking #<PR> — no AI preamble |
| Commit message | Upstream message + (cherry picked from commit <sha>) trailer (git writes this to MERGE_MSG automatically) |
<you> is your GitHub login (gh api user --jq .login). origin must be software-mansion/react-native-reanimated, because
the branches are pushed to the upstream repository. Run the commands from the root of your main checkout, so ../ is
its parent directory.
Example strip: fix(Reanimated): Babel plugin not detecting production environment →
Babel plugin not detecting production environment.
Authorship
- Author = original upstream PR author. Preserve their name and email.
- Committer = the user running this skill (their git config).
- If original author differs from user, add the user as
Co-authored-by:trailer. - Never add
Co-Authored-By: Claudeor🤖 Generated with Claude Codeanywhere — not in commits, not in PR bodies.
Procedure
1. Gather PR metadata
Step 2 creates the worktrees for all PRs. Then complete step 1 and steps 3 to 9 for one PR before you start the next PR,
and set sha, title and author again in step 1 for each PR.
For each PR, capture merge commit SHA + upstream title + original author. Keep the upstream values in shell variables and
pass them quoted ("$author", "$title"). Never type them into a command: a backtick or $(...) in a title runs as a
command inside double quotes.
git fetch origin main
sha="$(gh pr view <PR> --repo software-mansion/react-native-reanimated --json mergeCommit --jq .mergeCommit.oid)"
git cat-file -e "$sha^{commit}"
title="$(gh pr view <PR> --repo software-mansion/react-native-reanimated --json title --jq .title | sed -E 's/^[a-z]+(\([^)]*\))?!?: //')"
author="$(git show -s --format='%an <%ae>' "$sha")"
git show -s --format='%P%n%s' "$sha"git cat-file -e fails when the commit is not in the clone. Then fetch again and check that the PR is merged.
The last command prints the parent SHAs on the first line and the subject on the second. This repo squash-merges PRs, so
continue only when the first line has exactly one SHA and the subject ends with (#<PR>). Otherwise the PR was merged in a
different way. Stop and ask the user.
2. Create worktrees
git fetch origin <release-branch>
for pr in <PR1> <PR2> …; do
git worktree add -b "@<you>/<release-branch>/cherry-pick-#$pr" \
../rnr-cp-$pr origin/<release-branch>
done3. Cherry-pick with --no-commit
cd ../rnr-cp-<PR>
git cherry-pick --no-commit -x "$sha"Note: -x does nothing when combined with --no-commit (the (cherry picked from commit …) trailer is only added when
cherry-pick itself commits). Fortunately git writes the full upstream message + trailer to MERGE_MSG on --no-commit, so step
5 recovers it.
3a. Keep only the Reanimated part
If the upstream PR also changes Worklets, leave the Worklets part out of the cherry-pick: restore packages/react-native-worklets/ from the
release branch. This also removes the Worklets changelog fragment. A Reanimated release branch does not release Worklets.
git restore --source=origin/<release-branch> --staged --worktree -- packages/react-native-worklets3b. Keep the changelog fragment
On 4.7-stable and newer, the upstream changelog fragment in packages/react-native-reanimated/changelog/ comes with the
cherry-pick. Keep it: changelog:squash reads it at release time. On older branches, see the changelog item of the
"Cross-cutting change checklist" in AGENTS.md.
4. Resolve conflicts
Resolve conflicts.
5. Commit
Use the gitdir path — .git in a worktree is a file, not a directory. git commit -F .git/MERGE_MSG fails silently with
Not a directory.
Conflict-free apply — commit MERGE_MSG directly:
git commit -F "$(git rev-parse --git-dir)/MERGE_MSG"If the cherry-pick conflicted, git appends a trailing # Conflicts: comment block to MERGE_MSG. git commit -F uses
whitespace cleanup, which keeps # lines, so that block ends up in the commit message. You can't fix it with
--cleanup=strip — the upstream PR body legitimately contains ##/### markdown headers that strip would delete along with
it. Cut only the # Conflicts: block first, then commit the cleaned file:
mm="$(git rev-parse --git-dir)/MERGE_MSG"
awk '/^# Conflicts:/{exit} {print}' "$mm" > "$mm.clean"
git commit -F "$mm.clean"6. Fix authorship (only when original author ≠ user)
Decide this before you commit in step 5. If original author = user, skip this step.
If the upstream squash commit already has a Co-authored-by: <you> trailer (GitHub's squash-merge often adds it, and it
comes into MERGE_MSG), don't add it twice. Add --author to the step 5 commit command instead:
git commit --author="$author" -F "<message-file>"Otherwise, commit as in step 5, then add the trailer and set the author with an amend:
git log -1 --format=%B | \
git interpret-trailers --trailer "Co-authored-by: <User Name> <user@email>" | \
git commit --amend --author="$author" -F -7. Push
git push -u origin "@<you>/<release-branch>/cherry-pick-#<PR>"If a previous failed attempt left an empty branch on remote, use --force-with-lease.
8. Open the PR
Open it ready-for-review (omit --draft); drafting is optional. The body is just Cherry-picking #<PR> — no AI preamble.
gh pr create --repo software-mansion/react-native-reanimated \
--base <release-branch> \
--head "@<you>/<release-branch>/cherry-pick-#<PR>" \
--title "cherry-pick(<release-branch>): $title (#<PR>)" \
--body "Cherry-picking #<PR>"9. Update tracking issue
The tracking issue lists the upstream PRs. Under each upstream PR, add the cherry-pick PR as a nested item:
- https://github.com/software-mansion/react-native-reanimated/pull/<PR>
- https://github.com/software-mansion/react-native-reanimated/pull/<cherry-pick PR>If the upstream PR is not in the list yet, add both lines. Read the body with gh issue view <N> --repo software-mansion/react-native-reanimated --json body --jq .body > <file>, and write it
back with gh api repos/software-mansion/react-native-reanimated/issues/<N> -X PATCH -F body=@<file>. Keep the rest of the body unchanged.
10. Cleanup (after PRs are merged)
for pr in <PR1> <PR2> …; do
git worktree remove ../rnr-cp-$pr
git branch -D "@<you>/<release-branch>/cherry-pick-#$pr"
doneThe upstream repo has "Automatically delete head branches" enabled — remote branches disappear on merge. Verify with
git ls-remote origin "<branch>" if unsure.
Confirmation checkpoints
Before executing steps that create externally visible artifacts, confirm scope with the user:
- Before
gh pr create— first run only, to verify title/body format is right. - Before
git push --force-with-lease— force-push is fine on private cherry-pick branches but flag it. - Before amending a commit that changes authorship — surface the change.
Local worktree/branch operations don't need confirmation; they're reversible.
Gotchas checklist
.gitin a worktree is a file. Use$(git rev-parse --git-dir)/MERGE_MSG, not.git/MERGE_MSG.-xon--no-commitcherry-pick does nothing — recover the trailer fromMERGE_MSG.--no-commitwith a conflict-free apply does not leave a cherry-pick in progress.git cherry-pick --continuewill error with "no cherry-pick in progress". Just commit.- Chained
git commit && git pushafter a silent commit failure can push an empty branch (release-branch tip) to origin. If it happens, force-push over it after committing correctly. - Branch names contain
#— always quote in shell commands. - Conflicted cherry-pick → MERGE_MSG gets a trailing
# Conflicts:block thatgit commit -Fkeeps (whitespace cleanup). Strip only that block withawk '/^# Conflicts:/{exit} {print}'; don't use--cleanup=strip— it also deletes the body's##/###markdown headers. - If the upstream squash commit already carries a
Co-authored-by: <you>trailer (GitHub usually adds it), don't re-add it — just commit with--author=directly. - Cherry-pick PRs may be opened ready-for-review (omit
--draft); no AI preamble in the body. - The Claude Code auto-mode classifier may block commits mid-flow if the user earlier said "don't commit". Ask the user for explicit re-authorization.
Trending
Quiet since March.about the whole repository
Who's talking about software-mansion/react-native-reanimated
- expo/expo“Web Support V1”GitHub · Jan 16, 2020 · 301 reactions
- react-native-community/discussions-and-proposals“JSI (JavaScript Interface) & JSC (JavaScript Core) Discussion”GitHub · Jan 24, 2019 · 183 reactions
- gorhom/react-native-bottom-sheet“fix: assigning to read-only property 'reduceMotion'”GitHub · May 28, 2024 · 47 reactions
- software-mansion/react-native-screens“[Reanimated + Screens] Shared Element Transition”GitHub · Sep 14, 2022 · 32 reactions
- expo/expo“App crashes in expo-dev-client with while reloading with Reanimated installed”GitHub · Dec 31, 2022 · 30 reactions
The biggest 5 of 66 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 66
Talked about on GitHub, Stack Overflow and Bluesky (66 times).
On GitHub · 34
- Jan 16, 2020Web Support V1 — expo/expo301 reactions · 65 comments
- Jan 24, 2019JSI (JavaScript Interface) & JSC (JavaScript Core) Discussion — react-native-community/discussions-and-proposals183 reactions · 124 comments
- May 28, 2024fix: assigning to read-only property 'reduceMotion' — gorhom/react-native-bottom-sheet47 reactions · 50 comments
- Sep 14, 2022[Reanimated + Screens] Shared Element Transition — software-mansion/react-native-screens32 reactions · 3 comments
- Dec 31, 2022App crashes in expo-dev-client with while reloading with Reanimated installed — expo/expo30 reactions · 39 comments
29 more on GitHub
- Sep 24, 2025feat: exposing JS Bundle for Native Modules — react/react-native23 reactions · 5 comments
- Apr 19, 2023Upgrade v2 to reanimated v3❓ — margelo/react-native-vision-camera21 reactions · 8 comments
- May 30, 2023Drawer incompatible with `react-native-reanimated@3.2.0` on android but compatible with `v3.1.0` — react-navigation/react-navigation18 reactions · 42 comments
- Feb 20, 2021JSI Frame Processors (iOS) — margelo/react-native-vision-camera18 reactions · 7 comments
- Nov 11, 2024Reduce Reanimated serialization traffic — bluesky-social/social-app17 reactions · 6 comments
- Jan 17, 2024Feature Request: Include ninja — CircleCI-Public/cimg-android17 reactions · 9 comments
- Dec 3, 2021Remove React Native Reanimated 2 as direct dependency — alexZajac/react-native-skeleton-content17 reactions · 6 comments
- Jul 16, 2025Add guards around nativeProps usage to prevent race conditions — react/react-native13 reactions · 10 comments
- Nov 16, 2021Port to Reanimated v2 — computerjazz/react-native-draggable-flatlist10 reactions · 11 comments
- Jun 11, 2021feat: Frame Processors for Android — margelo/react-native-vision-camera10 reactions · 3 comments
- Nov 24, 2025feat: `useAnimatedKeyboard` compat layer — kirillzyusko/react-native-keyboard-controller9 reactions · 1 comment
- Oct 23, 2024fix: dependency array; removes shared value access warning from react-native-reanimated — dohooo/react-native-reanimated-carousel9 reactions · 13 comments
- Oct 20, 2023[image][ios] Fix too frequent image reloads — expo/expo9 reactions · 12 comments
- Sep 25, 2023Upgrade to Expo 49 & expo-blur 12.4.1 ( with needed fixes for breaking changes ) — enesozturk/react-native-hold-menu8 reactions · 11 comments
- Oct 5, 2023feat: add screen "go back" transition animations based on gestures using Reanimated — software-mansion/react-native-screens7 reactions · 3 comments
- Apr 25, 2025bump it bop it upgrade it (rn 79/expo 53) — bluesky-social/social-app5 reactions · 6 comments
- Jan 9, 2023Cocoapods: Fix deprecated/removed File.exists method — software-mansion/react-native-gesture-handler5 reactions
- Mar 25, 2022Fix dynamic_cast (RTTI) by adding key function to ShadowNodeWrapper and related classes — react/react-native5 reactions · 10 comments
- Dec 16, 2021fix: add stub methods to remove warning while using listeners — wonday/react-native-orientation-locker5 reactions · 4 comments
- Aug 20, 2025[css-interop] Fixes for RN 0.81 and reanimated 4 — nativewind/nativewind4 reactions
- Jun 5, 2023[ios] Enable frame rates higher than 60 FPS — expo/expo4 reactions · 1 comment
- Mar 12, 2026Expo 55 Support — axelra-ag/react-native-animateable-text3 reactions · 1 comment
- Jan 24, 2026build(deps): bump react-native-reanimated from 4.1.6 to 4.2.1 — magicappdev/magicappdev3 reactions · 5 comments
- Dec 26, 2024[Draft] All changes needed to support macOS — wcandillon/react-native-skia3 reactions · 1 comment
- Dec 17, 2023Upgrade react-native-reanimated to 3.6.1 — status-im/status-legacy3 reactions · 3 comments
- Aug 2, 2023fix: [v5]fix backdrop gesture — gorhom/react-native-bottom-sheet3 reactions · 11 comments
- Mar 18, 2023chore: updated reanimated to v3 — gorhom/react-native-bottom-sheet3 reactions · 11 comments
- Jan 24, 2023Upgrade Jest from 27 to 29.5.0 — WordPress/gutenberg3 reactions · 20 comments
- May 18, 2022[runtime] Resolve peer dependency issue with react-native-reanimated 2.8 — expo/snack3 reactions · 3 comments
On Stack Overflow · 30
- Aug 29, 2022Can't merge user_target_xcconfig for pod targets: ["Reanimated", "hermes-engine"]. Singular build setting CLANG_CXX_LIBRARY has different values25 votes
- Jul 20, 2022How to fix the error "Could not find method compile() for arguments [directory 'libs']" fundamentally?8 votes
- Dec 21, 2021React Native Android crashes on enabling debug mode8 votes
- Jan 27, 2021"TypeError" when trying to render react-native-reanimated node in Jest test6 votes
- Apr 7, 2020"TypeError" when trying to render react-native-reanimated node in Jest test6 votes
25 more on Stack Overflow
- Dec 28, 2022Why is there a 60fps limitation on React Native?4 votes
- Feb 21, 2022Invariant Violation: Module `AppRegistry` is not a registered callable module (calling `runApplication`). and etc4 votes · 3 answers
- Jan 3, 2022TypeError: global.performance.now is not a function in react native4 votes
- Aug 17, 2021React-native 0.65 (targetSdk=30) android build is failing because of react-native-reanimated4 votes
- Jul 12, 2023react-native-reanimated fails entire react native project build3 votes · 5 answers
- May 2, 2022Getting error RCTBridge required dispatch_sync to load RNGestureHandlerModule. This may lead to deadlocks3 votes
- Apr 29, 2021React Native error - "animated node with tag does not exist?"3 votes
- Feb 21, 2025Property SetImmediate doesnt exist in react native expo2 votes
- Sep 17, 2023React Native Reanimated 3 - How to prevent View exiting animation on parent unmount2 votes · 1 answer
- Apr 7, 2023Gesture handler stuck when navigate React Native2 votes
- Mar 6, 2023React Native iOS Build Crashes after Installing Reanimated V22 votes
- Jan 9, 2023How to animate expo-linear-gradient with reanimated?2 votes
- Dec 8, 2021react-native-reanimated useSharedValue does not update in jest tests2 votes · 1 answer
- Mar 15, 2021React-Native-Reanimated and React-native2 votes
- Nov 11, 2020react-native-reanimated rotation is working only on last child inside a .map loop2 votes
- Sep 18, 2020Cannot find module 'react-native-reanimated/plugin' from /projectFolder2 votes
- Mar 17, 2024java.lang.UnsatisfiedLinkError: dlopen failed: library "libreanimated.so" not found React Native Reanimated Issue React Native1 vote
- Jun 29, 2023(React Native Gesture Handler) Tried to synchronously call function from a different thread1 vote
- Jun 5, 2023React Native Reanimated Measure view flattening1 vote · 1 answer
- Jun 27, 2022When I upgrade my React native project to version 0.69.0 I got this type of error1 vote
- May 18, 2022Type 'ListRenderItem<IPhotos>' is not assignable to type 'ListRenderItem<unknown>1 vote
- Mar 8, 2022react-navigation drawer - white screen issue / build failing on native 0.67.31 vote · 1 answer
- Oct 6, 2021React Navigation - Auth Flow - Error The specified child already has a parent on Android1 vote
- Oct 7, 2020React-native-reanimated not working in web1 vote · 2 answers
- Aug 12, 2020> Task :react-native-reanimated:compileDebugJavaWithJavac FAILED1 vote
On Bluesky · 2
- Jul 26, 2025📦 software-mansion / react-native-reanimated ⭐ 9,973 (+95) 🗒 TypeScript React Native's Animated library reimplemented — @github-trending-js.bsky.social2 likes and reposts
- Jul 25, 2025📦 software-mansion / react-native-reanimated ⭐ 9,879 (+16) 🗒 TypeScript React Native's Animated library reimplemented — @github-trending.bsky.social2 likes and reposts
In this repository5 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- reanimated-releaseSkill
- worklets-cherry-pickSkill
- worklets-releaseSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

