reanimated-release
Skill11k starsChanged 9 days agoMITView on GitHub
Prepare a Reanimated patch release from a <X.Y>-stable branch - bump the version, rebuild app pods, open a release PR, and run the npm publish workflow as a dry run. On explicit request also does the real npm publish and the GitHub release. Use when asked to prepare, cut, or release Reanimated X.Y.Z, or after a cherry-pick thread is fully merged.
- Commits and pushes
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 2 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
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
- Very specific: line 78
If a fragment has no pr: N line, it reads the PR number from the first (#N) in the subject of the commit that added it.
- Distinctive: line 114
If they show the new version and git status shows only the expected files, proceed.
- Very specific: line 163
Wait for the run to complete (Monitor/poll gh run view <id>), then confirm in the job log:
- Very specific: line 178
Verify the release branch tip runs in development on both platforms, using argent (load argent-react-native-app-workflow first):
- Very specific: line 180
Start Metro from the release worktree: yarn react-native start --port <port> in apps/fabric-example.
- Very specific: line 183
Verify: the examples list renders, an animation example actually animates (e.g.
- Very specific: line 194
Verify the job log the same way as step 11, but the real-publish signature has no (dry-run) suffix:
- Distinctive: line 199
Never do this as part of preparing the release.
- Very specific: line 236
Before gh pr create — confirm version and branch tip contents if anything looks off (e.g.
- Very specific: line 237
Before any dispatch with publish=true — always.
≈ “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
Prepare a Reanimated patch release
Cuts a release of react-native-reanimated from a stable branch (e.g. 4.3-stable) in an isolated worktree: version bump via package scripts, pod lockfile regeneration, a release(Reanimated): X.Y.Z PR, and a dry-run of the npm reanimated publish workflow linked from the PR description. On explicit request it also runs the real npm publish (step 13) and creates the GitHub release with the published tarball attached (step 14).
Reference examples: PR #10797 (release(Reanimated): 4.7.1, with the changelog squash) and PR #10427 (release(Reanimated): 4.5.5, before the changelog fragments).
Inputs
- Version — e.g.
4.7.2. Infer the branch from it:4.7-stable. - Release branch —
<X.Y>-stable. - Optionally the cherry-pick tracking issue ("Reanimated X.Y.Z cherry-pick thread") — verify every cherry-pick PR in it is merged before starting.
Naming conventions
| Thing | Pattern |
<you> | your GitHub login (gh api user --jq .login) |
| Worktree path | ../rnr-release-<version> (sibling of the repo; rnr because it's a Reanimated release) |
| Branch | @<you>/reanimated/release-<version> |
| Commit + PR title | release(Reanimated): <version> |
| PR body | ## Summary / Releasing Reanimated <version> / Dry run CI: <run URL> (bare URL). No AI preamble — recent release PRs (#10797, #10427) don't carry one. |
Expected diff
These files, matching prior release commits:
packages/react-native-reanimated/package.json(version)packages/react-native-reanimated/src/platform-specific/jsVersion.ts(version)apps/fabric-example/ios/Podfile.lock(RNReanimated pinned to new version)apps/tvos-example/ios/Podfile.lock(same)- The changelog (step 3a):
packages/react-native-reanimated/CHANGELOG.md, plus the deleted fragments inpackages/react-native-reanimated/changelog/on4.7-stableand newer.
apps/macos-example/macos/Podfile.lock is not part of a release commit — see gotchas.
Procedure
1. Verify the branch tip
git fetch origin <release-branch>
git log --oneline -5 origin/<release-branch>Confirm all expected cherry-picks are present (cross-check the tracking issue).
2. Worktree + install
git worktree add -b '@<you>/reanimated/release-<version>' \
../rnr-release-<version> origin/<release-branch>
cd ../rnr-release-<version>
yarn installyarn install is mandatory in a fresh worktree — workspace scripts and the pre-commit hook fail without it ("Couldn't find the node_modules state file").
3. Bump the version
yarn workspace react-native-reanimated set-version --version <version>Updates package.json and src/platform-specific/jsVersion.ts, prints the previous version. Never hand-edit these.
3a. Update the changelog
On 4.7-stable and newer, move the changelog fragments into CHANGELOG.md. The script needs gh to read the authors:
yarn workspace react-native-reanimated changelog:squash <version>If a fragment has no pr: N line, it reads the PR number from the first (#N) in the subject of the commit that added it.
It fails when neither source gives a PR number. Then add a pr: N line to that fragment and run it again (see packages/react-native-reanimated/RELEASE.md).
Branches older than 4.7-stable have no fragments. 4.5-stable and older have no CHANGELOG.md, so skip this step there. On
4.6-stable, move the ## Unpublished entries in packages/react-native-reanimated/CHANGELOG.md under a new
## <version> — <YYYY-MM-DD> heading by hand, and keep the empty ## Unpublished section above it.
4. Build the packages
yarn build # in the worktree rootRuns prepare-vscode and build-packages (builds react-native-reanimated, which builds Reanimated and its Babel plugin as dependencies). Do this before build-apps.
5. Format and lint
yarn format
yarn lintBoth run across all workspaces (minutes — background them if needed). They must not change the working tree beyond the version bump — if format touches anything or lint fails, stop and investigate before committing.
6. Rebuild app pods
yarn build-apps # in the worktree root; takes minutes — run in backgroundThis runs build in common-app and every *-example workspace in parallel. Expected partial failure: on older stable branches macos-example fails the podspec compatibility assert (worklets_assert_minimal_react_native_version), because compatibility.json for the Reanimated minor doesn't include the RN version react-native-macos pairs with. This failure predates the bump (the old version fails identically) and prior release commits ship without the macos lockfile — ignore it, but verify both iOS lockfiles did regenerate before the failure stopped the run:
grep 'RNReanimated (' apps/fabric-example/ios/Podfile.lock apps/tvos-example/ios/Podfile.lockIf they show the new version and git status shows only the expected files, proceed.
7. Commit and push
git add -A
git commit -m 'release(Reanimated): <version>'
git push -u origin '@<you>/reanimated/release-<version>'8. Open the release PR
Open it ready-for-review (omit --draft); drafting is optional. The body is the minimal three lines below — no AI preamble (recent release PRs #10797 / #10427 don't carry one). The CI link is added in step 10.
gh pr create --base <release-branch> \
--head '@<you>/reanimated/release-<version>' \
--title 'release(Reanimated): <version>' \
--body '## Summary
Releasing Reanimated <version>'9. Dispatch the publish workflow as a dry run
gh workflow run 'npm reanimated publish' --ref '@<you>/reanimated/release-<version>' \
-f publish=false -f release-type=stable -f version=<version>publish=false (also the default) maps to dry-run: true in the shared software-mansion/npm-package-publish action — the run packs the tarball and uploads it as an artifact but cannot publish. Never pass publish=true without an explicit user request.
Grab the run URL:
gh run list --workflow 'npm reanimated publish' \
--branch '@<you>/reanimated/release-<version>' --limit 1 --json url,databaseId10. Link the run in the PR description
gh pr edit fails in this repo with a GraphQL "Projects (classic)" deprecation error. Patch via REST instead:
gh api repos/software-mansion/react-native-reanimated/pulls/<N> -X PATCH -f body='...'11. Verify the dry run
Wait for the run to complete (Monitor/poll gh run view <id>), then confirm in the job log:
- dispatch inputs show
publish: falseand the action receiveddry-run: true; - the publish line ends with
(dry-run):npm notice Publishing to https://registry.npmjs.org/ with tag <tag> and default access (dry-run); - the tag is sane:
legacywhen releasing a patch for an older minor,latestfor the current one (decided byshould-be-latest.js).
jobid=$(gh run view <run-id> --json jobs --jq '.jobs[0].databaseId')
gh api "repos/software-mansion/react-native-reanimated/actions/jobs/$jobid/logs" | grep -e 'dry' -e 'Publishing to'A dry run leaves no trace on the npm registry, so the workflow log is the authoritative evidence.
12. Smoke-test fabric-example (when asked)
Verify the release branch tip runs in development on both platforms, using argent (load argent-react-native-app-workflow first):
- Start Metro from the release worktree:
yarn react-native start --port <port>inapps/fabric-example. 8081/8082 are often taken by other sessions — check withlsof -nP -i :<port>and pick a free one; never kill an existing Metro, it may belong to another active session. - iOS:
yarn react-native run-ios --udid <udid> --port <port> --scheme "Debug FabricExample", thenxcrun simctl spawn <udid> defaults write org.reactjs.native.example.FabricExample RCT_jsLocation "localhost:<port>"and relaunch. A "React Native version mismatch" redbox whose native version matches another branch means a stale install survived (happens when the CoreSimulator session breaks mid-install) —reinstall-appfromios/Build/Products/Debug-iphonesimulator/FabricExample.appand re-applyRCT_jsLocation(reinstall clears it). - Android:
yarn react-native run-android --deviceId <serial> --port <port> --active-arch-only—gradle.propertiespins all four ABIs, so always pass--active-arch-onlyfor a single-emulator check. Thenadb -s <serial> reverse tcp:8081 tcp:<port>. - Verify: the examples list renders, an animation example actually animates (e.g. "Detach animated styles" or "Bokeh"), and
globalThis._REANIMATED_VERSION_CPP(viadebugger-evaluate) equals the release version.
13. Actual publish (separate, explicit step)
Only after the user reviews, merges the release PR, and explicitly asks: re-dispatch the workflow with -f publish=true (same release-type and version). Dispatch against the merged stable branch, not the release worktree branch — the release branch auto-deletes on merge, so --ref '@<you>/reanimated/release-<version>' would fail with "ref not found":
gh workflow run 'npm reanimated publish' --ref <X.Y>-stable \
-f publish=true -f release-type=stable -f version=<version>Verify the job log the same way as step 11, but the real-publish signature has no (dry-run) suffix:
dry-run: falsein the dispatch inputs;npm notice Publishing to https://registry.npmjs.org/ with tag <tag> and default access(no(dry-run)), followed by+ react-native-reanimated@<version>.
Never do this as part of preparing the release.
14. GitHub release (after publish)
The publish workflow only pushes to npm — it does not create the git tag or the GitHub release. Do that manually once published. Convention: release title Reanimated - X.Y.Z, git tag X.Y.Z (see prior releases via gh release list).
git fetch origin <X.Y>-stable # the merged release commit must be in the ref
sha=$(git rev-parse origin/<X.Y>-stable) # FULL 40-char SHA — see gotcha
gh release create <version> --draft --target "$sha" \
--title 'Reanimated - <version>' \
--generate-notes --notes-start-tag <previous-version>--targetmust be the full 40-char SHA. An abbreviated SHA returnsHTTP 422: target_commitish is invalid.--generate-notes --notes-start-tag <previous-version>reproduces the## What's Changedlist plus the<previous-version>...<version>compare link, matching prior releases.- For a patch of an older minor, add
--latest=false. Only a release of the newest minor is marked as the latest release (for example,Reanimated - 4.5.5is not the latest release). - Created with
--draft; the<version>git tag is only created when the draft is published. Leave publishing the draft to the user unless they ask.
Attach the published tarball to the release:
npm pack react-native-reanimated@<version> # downloads the published .tgz
gh release upload <version> react-native-reanimated-<version>.tgz15. Cleanup (after the PR is merged)
xcrun simctl spawn <udid> defaults delete org.reactjs.native.example.FabricExample RCT_jsLocation # only if you ran step 12
git worktree remove ../rnr-release-<version>
git branch -D '@<you>/reanimated/release-<version>'Confirmation checkpoints
- Before
gh pr create— confirm version and branch tip contents if anything looks off (e.g. unexpected commits on the stable branch). - Before any dispatch with
publish=true— always; publishing is irreversible.
Gotchas checklist
- Fresh worktree without
yarn installbreaks workspace scripts and the pre-commit hook. yarn build-appsfails inmacos-exampleon older stable branches — pre-existing compatibility gap, not caused by the bump; release commits ship without the macos lockfile.- The final diff must be exactly the files listed above; anything else means the branch or build did something unexpected.
publish=falseis the workflow default, but pass it explicitly so the intent is visible in the run's inputs.gh pr editis broken by the projectCards GraphQL deprecation — usegh api ... -X PATCH -f body=.- Verify a dry run via the workflow log, not the npm registry.
- Branch names contain
@and the workflow name contains spaces — quote both in shell. - npm tag:
legacyfor old-minor patches is correct, not a bug. - Actual publish (step 13) must dispatch
--ref <X.Y>-stable, not the release worktree branch — that branch auto-deletes on merge. - The publish workflow does NOT create git tags or GitHub releases — that's the manual step 14.
gh release create --targetneeds the FULL 40-char SHA; an abbreviated SHA returns HTTP 422 "target_commitish is invalid".- Patches often target more than one maintained minor (e.g. current + previous, when the older line is still supported) — run this skill once per minor, each from its own
<X.Y>-stablebranch.
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-cherry-pickSkill
- 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.

