Description
react-native-worklets@0.11.0 crashes on startup during WorkletRuntime.init on debug-native iOS builds with a Metro-served dev JS bundle. Release builds (EAS release native + release bundle) of the same code run cleanly.
Stack (SIGABRT on the JS thread)
__pthread_kill
pthread_kill
__abort
abort
__assert_rtn
facebook::jsi::Value::getObject(facebook::jsi::Runtime&) &&
worklets::UnpackerLoader::installUnpacker(facebook::jsi::Runtime&, worklets::CodeUnpacker const&)
worklets::UnpackerLoader::installUnpackers(facebook::jsi::Runtime&) const
worklets::WorkletRuntime::legacyModeInit(std::__1::shared_ptr<worklets::UnpackerLoader> const&)
worklets::WorkletRuntime::init(std::__1::shared_ptr<worklets::JSIWorkletsModuleProxy> const&)
worklets::WorkletsModuleProxy::start()
-[WorkletsModule start]
The getObject cast in installUnpacker fires the JSI assertion (in debug builds, __assert_rtn is fatal; in release builds NDEBUG strips it and the same undefined-behavior path silently continues, which is why release doesn't visibly crash).
Build matrix
| Build |
Native |
JS bundle |
Result |
npx expo run:ios (Xcode debug scheme) |
debug |
Metro dev bundle |
crash |
EAS production profile (test) |
release |
release bundle |
runs cleanly |
EAS dev-personal profile |
release |
release bundle + dev OTA |
runs cleanly |
The last two use react-native-worklets@0.11.0 too — the crash is exclusive to the debug-native + dev-bundle combination.
Environment
|
|
| react-native |
0.85.3 |
| react-native-reanimated |
4.5.2 |
| react-native-worklets |
0.11.0 |
| react |
19.2 |
| Architecture |
New Architecture (Fabric + TurboModules) |
| JS engine |
Hermes |
| Platform |
iOS Simulator (iPhone, iOS 26) — also reproduces on device |
| Build type |
Debug app + Metro dev bundle |
| Host |
macOS 26.5.1, Xcode 16, Apple silicon |
| Expo |
SDK 56 |
Reproduction
- Fresh app with
react-native-worklets@0.11.0 + react-native-reanimated@4.5.2 (the two are the same pair as our tree).
rm -rf ios node_modules ~/Library/Developer/Xcode/DerivedData/*
npm ci
npx expo prebuild --platform ios --clean
npx expo run:ios
- App crashes on launch before any JS user code executes; SIGABRT on
com.facebook.react.runtime.JavaScript thread with the stack above.
Metro is attached and shows no JS error — the abort happens in native WorkletsModule start before the JS runtime hands the bundle to any user module.
Known-good
Rolling back to react-native-worklets@0.10.2 + react-native-reanimated@4.5.1 (last peer combination) restores debug-build startup on the same tree.
Adjacent issues
Impact for us
Production users are unaffected (release builds work), but the entire team's local Xcode-based debug cycle is broken — this is what surfaced the report. We've pinned back to 0.10.2 / 4.5.1 as a workaround.
Happy to bisect against 0.11.0 nightlies or test a patch build if useful.
Description
react-native-worklets@0.11.0crashes on startup duringWorkletRuntime.initon debug-native iOS builds with a Metro-served dev JS bundle. Release builds (EAS release native + release bundle) of the same code run cleanly.Stack (SIGABRT on the JS thread)
The
getObjectcast ininstallUnpackerfires the JSI assertion (in debug builds,__assert_rtnis fatal; in release buildsNDEBUGstrips it and the same undefined-behavior path silently continues, which is why release doesn't visibly crash).Build matrix
npx expo run:ios(Xcode debug scheme)productionprofile (test)dev-personalprofileThe last two use
react-native-worklets@0.11.0too — the crash is exclusive to the debug-native + dev-bundle combination.Environment
Reproduction
react-native-worklets@0.11.0+react-native-reanimated@4.5.2(the two are the same pair as our tree).rm -rf ios node_modules ~/Library/Developer/Xcode/DerivedData/*npm cinpx expo prebuild --platform ios --cleannpx expo run:ioscom.facebook.react.runtime.JavaScriptthread with the stack above.Metro is attached and shows no JS error — the abort happens in native
WorkletsModule startbefore the JS runtime hands the bundle to any user module.Known-good
Rolling back to
react-native-worklets@0.10.2+react-native-reanimated@4.5.1(last peer combination) restores debug-build startup on the same tree.Adjacent issues
installUnpackerssourceMap ?? ''in 0.9.1, but that case was debug-native + release-transformed OTA bundle. Ours is debug-native + Metro dev bundle, and the failure is a baregetObjectassertion rather than the source-map JSON parse.evalWithSourceMapempty-source-map crash after fix(Worklets): always expecting sourceMaps in unpackers #9607 in the same debug + release-OTA combination.installUnpacker/UnpackerLoaderneighbourhood; the 0.11.0 refactor aroundlegacyModeInitmay have introduced a new variant that hits any debug build with a dev-transform bundle.Impact for us
Production users are unaffected (release builds work), but the entire team's local Xcode-based debug cycle is broken — this is what surfaced the report. We've pinned back to 0.10.2 / 4.5.1 as a workaround.
Happy to bisect against 0.11.0 nightlies or test a patch build if useful.