Releases: software-mansion/react-native-reanimated
Reanimated - 4.4.0
Key changes
iOS CSS Core Animation
Reanimated 4.4.0 introduces a new platform-backed CSS animation engine on iOS that runs animations
directly on Core Animation layers instead of going through the JS-driven update loop. It is hidden
behind the IOS_CSS_CORE_ANIMATION static feature flag.
- feat: Wire
CSSPlatformTransitionwith iOS platform implementation by @MatiPl01 in #9325 - chore: Hide platform animations behind a feature flag by @MatiPl01 in #9493
Animation Backend
A new Animation Backend has been integrated behind a feature flag, which will help greatly with the flow of updating the Shadow Tree in animations.
- Integrate Animation Backend behind a flag by @bartlomiejbloniarz in #9279
New useTimestamp hook
A new useTimestamp hook exposes the current frame timestamp as a Shared Value that updates every
frame with the time elapsed since the first frame, with an isActive flag to pause and resume updates.
- Adds useTimestamp hook by @ashfurrow in #9162
Precompiled headers on Android
Reanimated's native build on Android now uses precompiled headers (ReanimatedPCH.h), significantly
reducing C++ compile times for both fresh and incremental builds.
Other changes
- fix(Reanimated): Spring jitter by @piaskowyk in #9463
- feat: emit ESM package json by @tjzel in #9481
- Add support for
placeholderTextColorin synchronous props by @tomekzaw in #9409 - Add support for
shadowColorin synchronous props by @tomekzaw in #9411 - Add support for
shadowOffsetin synchronous props by @tomekzaw in #9412 - Add support for
outlineColor,outlineOffsetandoutlineWidthin synchronous props by @tomekzaw in #9417 - Add support for
borderBlockColor,borderBlockStartColorandborderBlockEndColorin synchronous props by @tomekzaw in #9418 - Unify synchronous props logic between platforms by @tomekzaw in #9381
- Preallocate and reuse synchronous props buffers on Android by @tomekzaw in #9425
- fix(Reanimated): laggy LA outside of Animation Backend by @tjzel in #9431
- feat:
CSSPlatformAnimationabstraction by @MatiPl01 in #9278 - feat:
CSSPlatformTransitionabstraction by @MatiPl01 in #9324 - chore: Rename
EXPERIMENTAL_PLATFORM_CSS_ANIMATIONStoIOS_CSS_CORE_ANIMATIONby @MatiPl01 in #9506 - fix(Reanimated): RCTModernEventEmmitter for older RN by @tjzel in #9181
- chore(Reanimated): post release 4.3.0 by @tjzel in #9182
- Add check for conflicting feature flags by @tomekzaw in #9174
- Store
ShadowNodeFamilyinstead ofShadowNodeinUpdatesRegistryby @tomekzaw in #9156 - Store
ShadowNodeFamily::Sharedinstead ofShadowNodeFamily *inPropsMapandChildrenMapby @tomekzaw in #9184 - Remove
useInterpolateConfigfunction andInterpolateConfigandColorSpacetypes by @tomekzaw in #9150 - Bump React Native to 0.85.0-rc.6 by @tomekzaw in #9193
- Update doNotStrip to keepDebugSymbols by @wisniewskij in #8636
- Migrated packages/react-native-reanimated java->kotlin by @tshmieldev in #9163
- removed JSCallInvokerResolver.kt by @tshmieldev in #9198
- chore: Bump RN to
0.85.0stable by @MatiPl01 in #9233 - fix: animation cancellation race condition by @Nodonisko in #9235
- fix: animation cancellation race condition missing code by @tjzel in #9242
- Change UI runtime slow animations invocation pattern by @tshmieldev in #9205
- chore: Remove no longer used
StaticPropsRegistrymethods and props by @MatiPl01 in #9226 - chore: Remove unused css code by @MatiPl01 in #9227
- fix: Incorrect CSS props reverting on CSS transition detach by @MatiPl01 in #9220
- feat: Strict TS types in LA
withInitialValuesmethod by @MatiPl01 in #9232 - fix: Freeze example crash and different timings by @MatiPl01 in #9247
- feat: Add support for separate transform props in LA initial values config by @MatiPl01 in #9237
- refactor: decouple raf and events by @tjzel in #9244
- feat(Reanimated): Export
NativeEventsManagerby @j-piasecki in #8655 - feat: adds
withTargetValuesmodifier to default layout animations by @PiotrWszolek in #8848 - chore(Reanimated): jest tests for useFrameCallback by @tjzel in #9255
- docs: Remove
withInitialValuesfor layout transitions by @MatiPl01 in #9258 - fix: Remove
withInitialValuesandwithTargetValuesfrom layout transitions by @MatiPl01 in #9259 - feat: Update initial value of shared value by @pranko17 in #8782
- chore(Reanimated): add lint step to disallow worklets includes by @tjzel in #9262
- docs: Add new types of initial values in layout animation configs by @MatiPl01 in #9257
- docs: Add
withTargetValuesto Layout Animations docs by @PiotrWszolek in #9168 - fix: Fix handling falsy values in jestUtils getCurrentStyle by @edkimmel in #7494
- fix: Unistyles flattening regression in
4.3.0by @MatiPl01 in #9284 - fix(Reanimated): not flushing updates without mapper runs by @tjzel in #9270
- fix(Reanimated): useScrollOffset on renderScrollComponent by @tjzel in #9286
- chore: Extract CSS loop to the separate OperationsLoop class by @MatiPl01 in #9285
- Chore(Reanimated): reanimatedmoduleproxy refactor by @tshmieldev in #9342
- fix(Reanimated): registries race conditions by @tjzel in #9323
- Remove checks for new arch enabled by @tomekzaw in #9311
- feat: Add short-circuit for
scheduleOnUIcalled from the UI thread on Android by @MatiPl01 in #9343 - feat: Add
LoopOperationinterface and operation-based scheduling primitives by @MatiPl01 in #9346 - docs: remove outdated "Debugging worklets" guide by @tomekzaw in #9355
- Use
REACT_NATIVE_VERSION_MINORprovided by React Native instead of custom definition by @tomekzaw in #8412 - fix: Attempt to fix
EXC_BAD_ACCESSinReanimatedModuleProxy::performOperationsduringAnimationFrameBatchinator::flushby @MatiPl01 in #9308 - Remove legacy CDP debugger setup via
HermesExecutorRuntimeAdapterby @tomekzaw in #9356 - chore(Reanimated)...
Worklets - 0.9.1
Key changes
Support for cross-runtime Promises
Now functions that return a promise like runOnRuntimeAsync can be used on all runtimes in Bundle Mode, not only the RN Runtime.
The code responsible for memory-management of JavaScript callbacks in C++ was overhauled to support this, which should reduce
the memory imprint and stability of long-held callbacks in brownfield app.
- feat(Worklets): cross-runtime promise handling in Bundle Mode by @tjzel in #9451
- refactor(Worklets): remoteFunction memory model by @tjzel in #9272
Uniform Shareable hosting
Shareables can now be hosted on any runtime, not only the UI Runtime.
- Added shareable support outside UI runtime by @tshmieldev in #9391
DX improvements
-
Passing a local function to
scheduleOnRNno longer crashes the app in C++ but throws an actionable error in JavaScript. -
We append an asynchronous stacktrace to error thrown in Worklets for easier debugging.
This is an opt-out feature that can be disabled withENABLE_CROSS_RUNTIME_STACK_TRACESstatic feature flag.- Add RN runtime error traces to errors from UI runtime by @tshmieldev in #9280
-
Console implementation in Bundle Mode now prints objects exactly the same way on Worklet Runtimes as on the RN Runtime.
- Added native logging behavior to worklets runtime by @tshmieldev in #9201
Other changes
- feat(Worklets): Serializable regexp by @tshmieldev in #9494
- feat(Worklets): respect relative requires in worklets by @tjzel in #9486
- feat(Worklets): simplified Bundle Mode setup vol2 by @tjzel in #9465
- feat(Worklets): add native ArrayBuffer serialization support and explicitly deprecate
_createSerializableby @tjzel in #9464 - feat(Worklets): native Error serialization by @tjzel in #9452
- feat(Worklets): use
__RUNTIME_NAMEfor better error messages by @tjzel in #9410 - migrated worklets from java to kotlin by @tshmieldev in #9130
- fix(Worklets): misplaced else when cloning remote function by @tjzel in #9141
- fix(Worklets): wrong config object in .podspec by @tjzel in #9169
- chore(Worklets): improve async scheduling API error messages by @tjzel in #9183
- fix: Worklets x Reanimated compatibility CI by @tjzel in #9188
- refactor(Worklets): load unpackers with JSI by @tjzel in #8984
- refactor(Worklets): two-step initialization by @tjzel in #9203
- Replaced WorkletsError and ReanimatedError with lint rule by @tshmieldev in #9243
- fix(Worklets): duplicate definitions to call microtasks by @tjzel in #9245
- Refactored JSIWorkletsModuleProxy to not inherit from HostObject by @tshmieldev in #9252
- [fix]ed installUnpackers being called in bundleMode by @tshmieldev in #9283
- CallGuard in cpp, added support for worklet batching by @tshmieldev in #9313
- Added tests for bundle mode in babel plugin by @tshmieldev in #9318
- fix(Worklets): shareable deadlock by @tjzel in #9321
- chore(Worklets): removed stackDetails from bundleMode by @tshmieldev in #9331
- chore(Worklets): remove duplicate RNRuntime decoration by @tjzel in #9332
- chore(Worklets) Changed scheduleOnUI to schedule in helper by @tshmieldev in #9376
- chore(Worklets): documented stack trace flag by @tshmieldev in #9378
- chore(Worklets): various cleanups by @tjzel in #9387
- chore(Worklets): update deprecated API snippets by @tjzel in #9392
- Worklets: fixed memleak in shareable and serializable by @tshmieldev in #9393
- chore(Worklets): renamed cleanupIfRuntimeExists by @tshmieldev in #9426
- chore(Worklets): cleaned up ts createWorkletRuntime interface by @tshmieldev in #9427
- fix(Worklets): remove unused
hermes/hermes.hinclude inUnpackerLoader.hby @tomekzaw in #9448 - chore(Worklets): serialization code nits by @tjzel in #9453
- fix(Worklets): repair NDEBUG-only build error in SerializableRemoteFunction by @tomekzaw in #9456
- chore(Worklets): add recent expo issues to troubleshooting page by @tshmieldev in #9460
- refactor(Worklets): add hostRuntimeId to JSIWorkletsModuleProxy by @tjzel in #9461
- chore(Worklets): throw when serializing promises by @tjzel in #9468
- Symbol serializable hotfix by @tshmieldev in #9476
- fix(Worklets): unused lambda capture in release Android build by @tomekzaw in #9480
- chore(Worklets): remove unnecessary CI-s by @tshmieldev in #9484
- fix(Worklets): eager imports issue by @tjzel in #9488
New Contributors
- @tshmieldev made their first contribution in #9130
- @avibega23 made their first contribution in #9153
- @mobinni made their first contribution in #9052
- @pkfms made their first contribution in #9154
- @GrzywN made their first contribution in #9175
- @PiotrWszolek made their first contribution in #8848
- @pranko17 made their first contribution in #8782
- @edkimmel made their first contribution in #7494
- @ashfurrow made their first contribution in #9162
- @elliottkember made their first contribution in #9466
Full Changelog: worklets-0.8.3...worklets-0.9.1
Reanimated - 4.3.1
What's Changed
- cherry-pick(Reanimated): Incorrect CSS props reverting on CSS transition detach (#9220) by @MatiPl01 in #9288
- cherry-pick(Reanimated): Fix animation cancellation race condition missing code (#9242) by @MatiPl01 in #9289
- cherry-pick(4.3-stable): workflow for OIDC publishing (#9095) by @tjzel in #9298
- cherry-pick(4.3-stable): useScrollOffset on renderScrollComponent (#9286) by @tjzel in #9299
- cherry-pick(Reanimated): Fix Unistyles flattening regression in
4.3.0(#9284) by @MatiPl01 in #9301 - cherry-pick(4.3-stable): fix registries race conditions (#9323) by @tjzel in #9349
- release(Reanimated): 4.3.1 by @tjzel in #9353
Full Changelog: 4.3.0...4.3.1
Worklets - 0.8.3
Full Changelog: worklets-0.8.2...worklets-0.8.3
What's Changed
Full Changelog: worklets-0.8.2...worklets-0.8.3
Worklets - 0.8.2 (deprecated)
What's Changed
Full Changelog: worklets-0.8.1...worklets-0.8.2
Reanimated - 4.3.0
Key changes
CSS SVG Animations
CSS animations now support animating SVG components and their properties, including Path, Image, LinearGradient, RadialGradient, Pattern and Text. This includes support for animating the d property of Path components with a special handling for path morphing.
- feat: Implement CSS SVG Polyline by @wisniewskij in #9003
- feat: Implement CSS SVG Polygon by @MatiPl01 in #9008
- feat: Support
%length values in SVG CSS animations by @MatiPl01 in #9011 - Add css SVG Path parser and normalizer by @wisniewskij in #8709
- CSS SVGPath interpolation by @wisniewskij in #8710
- Enable support for SVGImage in CSS by @wisniewskij in #8830
- feat: Add support for SVG
Patterncomponent in SVG animations by @MatiPl01 in #9041 - CSS SVGRadialGradient support by @wisniewskij in #8871
- CSS SVGLinearGradient support by @wisniewskij in #8917
- Enable support for SVGText in CSS by @wisniewskij in #9022
Shared Value re-implementation
Shared Value internal implementation changed - now it uses Shareable type from react-native-worklets as its internal value container. That means you can finally use Shared Values from other Worklet Runtimes than just the UI Runtime. Also USE_SYNCHRONIZABLE_IN_MUTABLE optimization feature flag is now enabled by default.
- feat(Reanimated): enable Synchronizable in Mutable by default by @tjzel in #9068
- feat(Reanimated): use Shareable for Mutables by @tjzel in #9004
Animated Styles type changes
TypeScript type of Animated Styles now makes it impossible to accidentally pass them to non-animated components. This replaces previous runtime-check for this kind of mistake, which proved to be prone to false positives.
Fixes
- fix: use native processTransformOrigin instead of web version by @maxpotemkin in #8738
- fix: prefab headers locations by @tjzel in #8747
- fix: Proper support for nested
animatedPropsobjects and correct cleanup by @MatiPl01 in #8726 - fix(web): Support originX and originY in layout animations by @choi138 in #8733
- fix: Web entering animations triggered on view exiting by @MatiPl01 in #8772
- fix: Animation names array order updates on keyframes order change by @MatiPl01 in #8777
- fix:
Infinityparsing in web CSSanimationIterationCountby @MatiPl01 in #8787 - fix: FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS feature flag crashes by @MatiPl01 in #8822
- fix:
SharedValue.modifystrict type definition by @huextrat in #8846 - fix: FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS incorrect color alphas by @DouweBos in #8841
- fix: Guard for undefined style in Jest utils by @msynowski in #8878
- fix: Stop passing nativeID to component in jest unit tests by @MatiPl01 in #8881
- Fix the issue with next.js throwing errors while hydrating by @5ZYSZ3K in #8869
- fix:
useHandlernot working on web without babel plugin by @MatiPl01 in #8883 - fix:
nopluginoption being ignored in the web-example by @MatiPl01 in #8933 - fix: CSS SVGPath android parsing bugfix by @wisniewskij in #8918
- fix: free __cxa_demangle allocations in SingleInstanceChecker by @jingjing2222 in #8964
- fix: pass shouldPersistRemote to cloneObjectProperties by @aljadan in #8995
- fix: Fix native
matchVersionnot allowing patch version mismatches by @kitten in #9018 - fix: CSS transitions not working when a prop is added or removed by @MatiPl01 in #9014
react-native-reanimated/pull/9015 - fix: static frameworks missing header paths by @tjzel in #9035
- Fix sync props back to React mechanism by @tomekzaw in #9046
- Fix: Add missing initialization in SVG Path by @wisniewskij in #9058
- fix: RN 0.81 TS errors by @tjzel in #9059
- fix: CSS animation box-shadow crashes by @MatiPl01 in #9065
- fix: CSS transition flickering on
transitionPropertychange by @MatiPl01 in #9120 - fix: guard against null styleProps in PropsRegistry GC by @mobinni in #9052
- fix - passing negative values to
filtercrashes on iOS by @intergalacticspacehighway in #9155 - [Android] Fix commits during drawing by @bartlomiejbloniarz in #9072
- perf: Don't trigger CSS transition for props with effective duration 0 by @MatiPl01 in #9118
- chore:
useHandlerreimplementation by @MatiPl01 in #9090
Refactors
- refactor(Reanimated): use own SingleInstanceChecker by @tjzel in #8935
- refactor: move events to Reanimated by @tjzel in #8934
- refactor(Reanimated): use own JSIUtils by @tjzel in #8938
- refactor: Rename processOpacity to processPercentage by @wisniewskij in #8947
- Extract
applySynchronousUpdatesfromperformOperationsby @bartlomiejbloniarz in #9078 - Replace
isIntwithisNumberin synchronous props check by @tomekzaw in #9113
Chores
- Add
_beginSectionand_endSectionJSI bindings for systraces by @tomekzaw in #9101 - Add
_startProfilingand_stopProfilingJSI bindings for Hermes sampling profiler by @tomekzaw in #9102 - feat: Common fallback style props builder for any unsupported component by @MatiPl01 in #8989
- feat: peer dependencies validation by @tjzel in #9019
- feat: stable API versioning checks by @tjzel in #9105
- chore: modernize build.gradle scripts by @tjzel in #8707
- chore: consider new arch always enabled in react-native 0.82+ by @gabrieldonadel in #8771
- chore: Change props overriding behavior in the props builder by @MatiPl01 in #8877
- chore: Change
folly::dynamictojsi::ValueinupdateKeyframesfor CSS transitions by @MatiPl01 in #8982 - chore: bump gradle versions by @tjzel in #8994
- chore: only consider latest patch in compatibility tables by @tjzel in #9142
- chore: unpin dependencies by @tjzel in #9143
- chore(Rea): migrate to RCTModernEventEmitter by @tjzel in #9033
- chore: Remove unused `has...
4.2.3
What's Changed
- [cherry-pick][4.2] Fix commits during the Android draw pass by @bartlomiejbloniarz in #9123
- cherry-pick(4.2-stable): peer dependencies validation (#9019) by @tjzel in #9136
- chore(4.2-stable): bump accepted worklets by @tjzel in #9137
Full Changelog: 4.2.2...4.2.3
4.1.7
What's Changed
- [cherry-pick][4.1] Fix commits during the Android draw pass by @bartlomiejbloniarz in #9124
- chore(4.1-stable): bump accepted worklets by @tjzel in #9135
- cherry-pick(4.1-stable): peer dependencies validation (#9019) by @tjzel in #9134
Full Changelog: 4.1.6...4.1.7
Worklets - 0.8.1
Worklets - 0.8.0
Key changes
Features:
-
New shared memory type, Shareable, a building block for Reanimated's Shared Value implementation. See Docs and blogpost for more details.
-
Stable C++ API bindings for libraries to use.
-
New
runOnRuntimeSyncAPI - allows you to schedule a worklet on any Worklet Runtime synchronously. Docs- feat(Worklets):
runOnRuntimeSyncby @skusnierz in #8224
- feat(Worklets):
-
New scheduling APIs,
scheduleOnRuntimeWithId,runOnRuntimeSyncWithId- allows you to schedule worklets on Worklet Runtimes just by knowing their id. Docs -
New
runOnRuntimeAsyncAPI - allows you to schedule a worklet on any Worklet Runtime asynchronously and return a promise with the result. Docs- feat: add runOnRuntimeAsync by @riteshshukla04 in #8901
-
New useful API shorthands for checking current runtime context. Docs
-
New Worklets Babel plugin option,
strictGlobal, that prevents accidental captures of variables from global scope in worklets. Docs -
You can now schedule worklets on Worklet Runtimes even outside of Bundle Mode, but with some limitations. There are no limitations when using the Bundle Mode.
Bundle mode improvements:
-
You no longer need to patch React Native to use Bundle Mode, meaning that you can use pre-built React Native for faster compilation.
-
You no longer need to re-compile Worklets when switching between Bundle Mode and non-Bundle Mode (metro cache reset is still required).
-
(experimental) You can now run network request in Bundle Mode Docs
Docs:
- Documentation explaining what are closures in context of worklets, how they work and how to use them. Docs
Other changes
- chore: modernize build.gradle scripts by @tjzel in #8707
- chore(Worklets): Bundle Mode patches for 0.83.0 by @tjzel in #8737
- fix: prefab headers locations by @tjzel in #8747
- fix(Worklets): Add HERMES_V1_ENABLED flag to iOS podspec for Hermes V1 compatibility by @kimchi-developer in #8754
- feat(Worklets): docs for plugin types by @tjzel in #8633
- fix(Worklets): missing sideEffects property by @tjzel in #8760
- chore(Worklets): cleanup metro overrides for bundle mode by @tjzel in #8851
- refactor(Worklets): obtain BundleMode flag from static feature flags by @tjzel in #8853
- refactor(Worklets): dont use @react-native/babel-preset for unit tests by @tjzel in #8862
- fix(Worklets): Synchronizable serialization for objects outside of Bundle Mode by @tjzel in #8887
- chore(Worklets): rename __generatedWorklets dir by @tjzel in #8894
- feat(Worklets): docs for new bundle mode by @tjzel in #8759
- fix(Worklets): false-positive inlineStyles warning on computed [value] by @tjzel in #8897
- fix: Simplify run-loop and always attach JNI on Android by @mrousavy in #8905
- Fix bundle mode on windows by @OrfeasZ in #8910
- fix(worklets): avoid HERMES_V1_ENABLED macro redefinition on RN 0.84+ by @kimchi-developer in #8908
- chore(Worklets): fix runAsync mock signature by @tjzel in #8916
- refactor(Worklets): move serializable factories by @tjzel in #8560
- feat: docs for runOnRuntimeAsync by @riteshshukla04 in #8911
- fix: sidebar title of runtimeAsync by @riteshshukla04 in #8921
- docs(Worklets): add gtm by @p-malecki in #8937
- docs: add gtm by @p-malecki in #8936
- Remove workaround for dynamic frameworks by @tomekzaw in #8927
- chore(Worklets): compatibility docs by @tjzel in #8971
- fix: free __cxa_demangle allocations in SingleInstanceChecker by @jingjing2222 in #8964
- fix(Worklets): pulling native implementation for Jest tests by @tjzel in #8988
- chore(Worklets): cleanup dispatch functions and tests by @tjzel in #9006
- [docs] Fix scheduleOnRN call to remove extra invocation by @piaskowyk in #9017
- refactor(Worklets): always spin AnimationFrameQueue by @tjzel in #8900
- fix: Fix native
matchVersionnot allowing patch version mismatches by @kitten in #9018 - chore(Worklets): install serializer on UI Runtime by @tjzel in #9024
- chore(Worklets): merge isSynchronizable impl by @tjzel in #9027
- chore(Worklets): stabilize Serializable enum by @tjzel in #9025
- chore(Worklets): add RuntimeId type alias by @tjzel in #9026
- chore(Worklets): export unpackers in prod env by @tjzel in #9029
- fix: Reanimated synchronous events by @tjzel in #9057
- chore(Worklets): update createWorkletRuntime docs by @tjzel in #9030
- fix(Worklets): cascade raf callbacks with reanimated by @tjzel in #9080
- feat: stable API versioning checks by @tjzel in #9105
- feat: Reanimated x Worklets compilation compatibility CI by @tjzel in #8997
- fix(Worklets): remote function re-serialization by @tjzel in #9115
- chore(Worklets): update algolia keys by @tjzel in #9128
- release(Worklets): 0.8.0 by @tjzel in #9131