Features
- CSS Animations and CSS Transitions support 🚀
What's Changed
- docs: Add example to useHandler docs by @patrycjakalinska in #6369
- docs: Rewrite Custom Animations page by @patrycjakalinska in #6346
- fix: Change import to uppercase by @patrycjakalinska in #6388
- docs: Rewrite useAnimatedScrollHandler page by @patrycjakalinska in #6374
- dosc: Rewrite useEvent page by @patrycjakalinska in #6360
- refactor: Remove 'worklets' dependency on
NativeReanimatedModule
by @tjzel in #6357 - docs: add
PlatformCompatibility
component by @tomekzaw in #6394 - docs: Move Platform Compatibility to MDXComponents by @patrycjakalinska in #6401
- [Web] Add
findNodeHandle
web version by @m-bert in #6403 - [reJest] Migrate to use the new runtimetests API by @Latropos in #6356
- feat: Add Reanimated compatibility GitHub action by @tjzel in #6399
- chore: Make GitHub actions names match their titles, cleanup by @tjzel in #6391
- Regenerate some test snapshots by @Latropos in #6382
- chore: Fix precommit script by @tjzel in #6407
- Remove duplicated logic of error tests by @Latropos in #6358
- refactor: Split Java and ObjC code into Reanimated and Worklets dirs by @tjzel in #6366
- chore(deps): bump rexml from 3.2.8 to 3.3.3 in /apps/macos-example by @dependabot in #6404
- chore(deps): bump rexml from 3.2.9 to 3.3.3 in /apps/tvos-example by @dependabot in #6405
- chore(deps): bump rexml from 3.2.8 to 3.3.3 in /apps/fabric-example by @dependabot in #6406
- Don't update view tag when null by @j-piasecki in #6353
- Fix github workflows by @Latropos in #6412
- Fix colour comparison on Android by @Latropos in #6383
- Update RN pager view patch file by @szydlovsky in #6397
- chore: Pretty pre-commit by @tjzel in #6423
- chore: Improve build pipeline of Reanimated Babel plugin by @tjzel in #6424
- chore: Rename LiquidSwipe Button by @tjzel in #6428
- chore: Upgrade React Native to 0.75.1 by @tjzel in #6420
- chore(deps-dev): bump axios from 1.6.8 to 1.7.4 by @dependabot in #6427
- docs: Fix text colors in docs examples by @MatiPl01 in #6417
- [Web LA] Add
skipEntering
by @m-bert in #6425 - Fix
inline style
tests inJest
by @m-bert in #6400 - fix: Chrome debugger crash caused by incorrect viewTag by @MatiPl01 in #6437
- docs: Fix incorrect links in docs by @MatiPl01 in #6436
- chore(deps): bump rexml from 3.2.8 to 3.3.6 in /apps/paper-example by @dependabot in #6443
- fix: add missing include by @okwasniewski in #6439
- chore(deps): bump rexml from 3.3.3 to 3.3.6 in /apps/tvos-example by @dependabot in #6444
- feat: Enable Clangd in repo by @tjzel in #6430
- refactor: Less error prone
_value
in Mutables. by @tjzel in #6311 - Implement missing measurements on android by @Latropos in #6413
- Extract logic from TestRunner by @Latropos in #6390
- feat: Implement better reanimated logger with clean stack traces by @MatiPl01 in #6385
- feat: Use new logger and ReanimatedError for lib warnings and errors by @MatiPl01 in #6387
- Skip zero delay by @Latropos in #6398
- fix: Recursion in worklets by @tjzel in #6445
- chore: Clean up reanimated logger and error implementation by @MatiPl01 in #6453
- Add tests of keyframe animations by @Latropos in #6433
- Change
requestAnimationFrame
flush condition by @bartlomiejbloniarz in #6442 - feat: User-defined logger config by @MatiPl01 in #6409
- Add mutable value read/write during render warning by @MatiPl01 in #6310
- docs: Styling for mobile Platform Compatibility by @patrycjakalinska in #6456
- chore: Bump RN to 0.75.2 in examples by @tjzel in #6464
- chore: Enforce the use of ReanimatedError instead of Error by @MatiPl01 in #6454
- Fix keyframe types by @Latropos in #6438
- docs: CurvedTransition typo by @dynamichny in #6463
- feat: Add react-compiler safe API to mutables by @tjzel in #6312
- chore: Apply various native code cleanups by @tjzel in #6470
- Set CMake version on Android just like react-native by @tomekzaw in #6474
- chore(deps): bump rexml from 3.3.3 to 3.3.6 in /apps/fabric-example by @dependabot in #6449
- chore(deps): bump rexml from 3.3.3 to 3.3.6 in /apps/macos-example by @dependabot in #6448
- Use string interpolation in
RNReanimated.podspec
by @tomekzaw in #6473 - chore: Remove codegen resolution by @tjzel in #6488
- chore: Bump prettier by @tjzel in #6486
- chore: Add separate tsconfig for metro-config by @tjzel in #6487
- chore: Fix codegen dir in examples by @tjzel in #6490
- chore: Bump react-native-builder-bob by @tjzel in #6485
- chore(deps): bump webpack from 5.83.1 to 5.94.0 in /packages/docs-reanimated by @dependabot in #6457
- Monorepo Support: Use node resolver to locate React Native package by @morganick in #6482
- chore: Enable TSDoc and JSDoc formatting by @tjzel in #6484
- chore: Enable .js TypeScript checks in repo by @tjzel in #6483
- chore: Fix deprecated
this
captures in lambdas for NDK 27 by @tjzel in #6495 - chore: Add
eslint-plugin-reanimated
build directory to .gitignore by @tjzel in #6493 - fix: Remove error-prone package.json addition from
react-native-builder-bob
by @tjzel in #6494 - chore(TypeScript): Add ViewDescriptorsWrapper type to fix types by @tjzel in #6481
- chore: Hotfix formatting by @tjzel in #6496
- chore: Enable strict mode by default, remove fatal log, add missing web check by @MatiPl01 in #6477
- docs: Fix
measure
InteracitveExample by @patrycjakalinska in #6452 - chore: Bump prettier in docs by @tjzel in #6497
- Extract logic to build the tests by @Latropos in #6408
- docs: Add metro config wrapper and reanimated logger docs by @MatiPl01 in #6467
- docs: fix typos by @shubh73 in #6402
- Add runtime tests for animations in StrictMode by @piaskowyk in #6305
- docs: Rewrite Shared Element Transition page by @patrycjakalinska in #6455
- Fix handling of layout animations coinciding with view flattening by @bartlomiejbloniarz in #6460
- Fix issues with skipping reanimated commit by @bartlomiejbloniarz in #6498
- Add useEvent mock by @piaskowyk in #6511
- chore(deps): bump serve-static from 1.15.0 to 1.16.2 by @dependabot in #6513
- chore(deps): bump body-parser from 1.20.2 to 1.20.3 by @dependabot in #6514
- chore(deps): bump express from 4.19.2 to 4.21.0 in /packages/docs-reanimated by @dependabot in #6515
- feat: add support for isNavigationBarTranslucentAndroid by @maciekstosio in #6431
- fix: Add JavaScript wrappers to captured console to prevent crashes in React Native 0.75 by @tjzel in #6520
- docs: Bump
@swmansion/t-rex-ui
to 0.0.14 by @patrycjakalinska in #6522 - More test cases - custom layout transitions by @Latropos in #6458
- docs: Rewrite Web Support page by @patrycjakalinska in #6516
- docs: Add AvailableFrom label by @patrycjakalinska in #6523
- Fix layout animations flickering on Android [New Architecture] by @bartlomiejbloniarz in #6518
- docs: Rewrite Testing with Jest page by @patrycjakalinska in #6503
- docs: add Entering/Exiting Playground by @patrycjakalinska in #6468
- chore: Change overlooked job name by @tjzel in #6525
- Fix wrong exiting animation indices [New Architecture] by @bartlomiejbloniarz in #6526
- chore(deps): bump next from 14.2.3 to 14.2.12 by @dependabot in #6521
- chore: Fix TypeScript issues for
react-native@0.76
by @tjzel in #6527 - docs: Mark debugging docs as unreleased, remove recommended metro config step by @MatiPl01 in #6529
- Move
ReaLayoutAnimator
to a separate file by @tomekzaw in #6530 - Enable V8 nightly CI by @piaskowyk in #6533
- Fix broken links in documentation by @piaskowyk in #6535
- Fix getViewProp on Android, RN.74 by @Latropos in #6441
- Remove empty.cpp by @tomekzaw in #6540
- Convert double-quoted includes to angle includes by @tomekzaw in #6537
- refactor: Obtain JsCallInvoker directly from context by @tjzel in #6542
- Merge
packagingOptions
in build.gradle by @tomekzaw in #6541 - Convert all iOS includes to angle-bracket imports by @tomekzaw in #6543
- Change namespace
reanimated
toworklets
by @tomekzaw in #6544 - feat: Allow to fire compatibility check action with label by @tjzel in #6545
- fix: Remove path from Compatibility Action by @tjzel in #6547
- Move Android sources to
android/
subdirectory and update includes by @tomekzaw in #6549 - Support React Native 0.76 by @tomekzaw in #6499
- fix: Restore backwards C++ compatibility for NDK23 by @tjzel in #6553
- feat: Add main branch protection scripts by @tjzel in #6555
- feat: Expose BaseLayoutAnimationConfig by @tjzel in #6558
- Remove
resolveTaskFactory
in build.gradle by @tomekzaw in #6560 - Fix prefab headers by @tomekzaw in #6566
- Add SVG color properties to list of color attributes to parse by @jakex7 in #6567
- Add
outlineColor
to ColorProperties list by @jakex7 in #6568 - chore: Ignore comments in validation scripts by @tjzel in #6554
- Bump React Native to 0.76.0-rc.3 by @tomekzaw in #6565
- Add
HostFunction
handling to_scheduleOnJS
by @bartlomiejbloniarz in #6571 - feat: Add release dedicated GitHub Action by @tjzel in #6569
- Lazy initalize layout aniamtions in the Commit Hook by @bartlomiejbloniarz in #6586
- Bump python version and freeze cpplint by @bartlomiejbloniarz in #6587
- fix: build error with c++17 by @jeanregisser in #6590
- Use
Number
instead ofparseInt
by @Latropos in #6593 - Bump reanimated version to 3.16.0 by @bartlomiejbloniarz in #6599
- Update ReducedMotionConfig.mdx by @mzaien in #6598
- Fix crash on macos when using Layout Animations by @Latropos in #6600
- Fix
CallInvokerHolderImpl
backwards compatibility by @bartlomiejbloniarz in #6601 - Bump reanimated version to 3.17.0 by @bartlomiejbloniarz in #6609
- docs: Restore logger docs changes after release by @MatiPl01 in #6608
- Update Podfile.locks by @tomekzaw in #6610
- Move headers to
apple
directory by @tomekzaw in #6612 - Remove
config[:reanimated_node_modules_dir]
in reanimated_utils.rb by @tomekzaw in #6611 - Fix static linking on iOS by @tomekzaw in #6614
- Do not make a synchronous call when canceling animation. by @Szymon20000 in #6564
- refactor(Worklets): Merge TypeScript type files by @tjzel in #6556
- chore: Silence next-example linter warnings by @tjzel in #6633
- [LA] Update window update check by @bartlomiejbloniarz in #6618
- fix: Side effects paths in package.json by @MatiPl01 in #6634
- fix: create symlink to common-app by @jakex7 in #6637
- fix: Installation of Reanimated from commit on CI by @tjzel in #6635
- refactor(Worklets): JavaScript NativeReanimatedModule by @tjzel in #6557
- fix: Invalid shared value access displaying when code is correct by @MatiPl01 in #6631
- fix: Return value of set-reanimated-version.js script by @tjzel in #6649
- Add warning when passing incorrect transformOrigin by @Latropos in #6602
- refactor: Specify each example app workspace by @tjzel in #6652
- chore: Redo tvos example for 0.76 by @tjzel in #6654
- chore(Worklets): Add worklets validation to scripts by @tjzel in #6651
- chore: Add noop typescript worklets module by @tjzel in #6650
- chore: Bump macos example to 0.75 by @tjzel in #6653
- Bump React Native to 0.76 in example apps by @bartlomiejbloniarz in #6636
- chore: Remove duplicated yarn by @tjzel in #6656
- chore(deps): bump rexml from 3.3.6 to 3.3.9 in /apps/paper-example by @dependabot in #6643
- chore(deps): bump http-proxy-middleware from 2.0.6 to 2.0.7 in /packages/docs-reanimated by @dependabot in #6638
- docs: Manage system color scheme changes by @patrycjakalinska in #6627
- chore(deps): bump rexml from 3.3.6 to 3.3.9 in /apps/fabric-example by @dependabot in #6662
- chore: Align with react-native@0.74 as oldest supported version by @tjzel in #6629
- fixed a typo— "grater" by @akshar-dave in #6675
- chore: Add pod install(update) to each app build script by @tjzel in #6575
- chore: Remove dead code for RN 73 and below by @tjzel in #6658
- docs: update landing copy by @kacperkapusciak in #6695
- chore: migrate to screens v4 and navigation v7 by @alduzy in #6622
- chore: Bump web example to 0.76 by @alduzy in #6679
- chore: Use updated MetroConfig type by @tjzel in #6717
- fix: missing headers on new arch by @WoLewicki in #6725
- feat: Support for multiple surfaces on Fabric by @patrycjakalinska in #6647
- fix(example): Reloading to crashing screen by @tjzel in #6689
- chore: Remove reference for 0.72 tests on CI by @tjzel in #6716
- feat: Add name to the Reanimated Plugin by @tjzel in #6705
- fix: Allow TypeScript in worklet classes by @tjzel in #6667
- chore: Describe
isWorkletRuntime
behavior on different runtimes by @tjzel in #6692 - feat: Add fallback detection methods for Worklet Classes by @tjzel in #6706
- fix: Animation assignment with compiler-safe API by @tjzel in #6715
- feat(Worklets): Create a stub of Worklets Module by @tjzel in #6539
- docs: worklets on the Web are just JavaScript functions by @kacperkapusciak in #6737
- chore(Worklets): SingleInstanceChecker by @tjzel in #6694
- Update ReanimatedPackage to supported stable API by @jakex7 in #6730
- chore(deps): bump cross-spawn from 6.0.5 to 6.0.6 by @dependabot in #6729
- Replace findNodeHandle with reading _componentViewTag by @gaearon in #6720
- refactor(Worklets): Move shareable creation to Worklets by @tjzel in #6576
- Fix bug in useSharedValueMock by @sumo-slonik in #6742
- chore: migrate npx react-native init by @coado in #6628
- refactor(Worklets): Move
messageQueue
to Worklets by @tjzel in #6577 - fix: restore
classic
runtime for @babel/preset-react by @tjzel in #6760 - Make
makeShareableCloneRecursive
more readable by @tjzel in #5724 - refactor: rename MessageQueueThread by @tjzel in #6750
- Restore
nativeStateSource
inmakeShareableCloneRecursive
by @bartlomiejbloniarz in #6763 - refactor: rename cpp NativeReanimatedModule to ReanimatedModuleProxy by @tjzel in #6766
- refactor: rename cpp NativeWorkletsModule to WorkletsModuleProxy by @tjzel in #6767
- Clear
operationsInBatch_
before terminating UI runtime by @tomekzaw in #6779 - Assert that
workletsModuleProxy
is found by @tomekzaw in #6780 - chore: rephrase render shared value read warning by @tjzel in #6785
- Refactor findNodeHandler by @piaskowyk in #6736
- docs: fix
useEvent
typos, tweak wording of mainREADME
opening summary by @sorenfrederiksen in #6690 - fix: Empty array & null checks in handleTabNavigatorChange method fixes #6698 by @aymather in #6700
- fix: brownfield integration by @WoLewicki in #6774
- refactor(Worklets): move PlatformLogger by @tjzel in #6794
- Cache
worklets
by @piaskowyk in #6758 - Workaround for V8EXECUTOR_LIB NOTFOUND error in worklets CMakeLists.txt by @dlee in #6603
- Fix crash caused by using
ShareableHandle
in multiple remote runtimes by @tomekzaw in #6796 - refactor: restore JSCallInvoker by @tjzel in #6783
- refactor(Worklets): move JSScheduler by @tjzel in #6762
- refactor(Worklets): move UIScheduler by @tjzel in #6789
- fix: missing
.get()
inuseDerivedValue
mock by @kirillzyusko in #6809 - feat(Worklets): react-native-worklets node package stub by @tjzel in #6806
- chore: remove extraneous packageManager field by @tjzel in #6814
- refactor: move _WORKLET injection to Worklets decorator by @tjzel in #6816
- chore: add cmake formatting and linting by @tjzel in #6811
- chore: bump repo to RN 0.76.5 by @tjzel in #6818
- chore(deps): bump nanoid from 3.3.6 to 3.3.8 in /packages/docs-reanimated by @dependabot in #6815
- Fix Android validation CI by @bartlomiejbloniarz in #6822
- refactor(Worklets): move UIWorkletRuntime by @tjzel in #6792
- chore: remove monorepo-check github action by @tjzel in #6824
- refactor(Worklets): move UI scheduling by @tjzel in #6793
- docs: add State of React Native 2024 banner by @kacperkapusciak in #6831
- fix: assert ReanimatedModule is loaded before initializing UI runtime by @tjzel in #6835
- fix: inject IS_FABRIC from worklets by @tjzel in #6833
- docs: Fix FlipCard example on Android/iOS by @patrycjakalinska in #6823
- docs: fix State of React Native 2024 banner styles by @kacperkapusciak in #6840
- Fix
MountingOverrideDelegate
initialization by @bartlomiejbloniarz in #6841 - chore(deps): bump next from 14.2.13 to 15.1.1 by @dependabot in #6830
- Fix invalid link in docs by @latekvo in #6845
- Fix
JS_RUNTIME_HERMES
flag definition by @piaskowyk in #6838 - chore(deps): bump next from 15.1.1 to 15.1.3 by @dependabot in #6866
- Update Gemfile.lock and Podfile.lock by @tomekzaw in #6874
- Add
ReanimatedSystraceSection
by @bartlomiejbloniarz in #6376 - [Fabric LA] Fix
maybeDropAncestors
condition. by @bartlomiejbloniarz in #6663 - Add comment for
canOverrideExistingModule
inReactModuleInfo
constructor on Android by @tomekzaw in #6877 - Remove
CoreFeatures.h
include by @tomekzaw in #6875 - Remove
shouldYield
commit option by @tomekzaw in #6876 - Fix respecting Reduced Motion Settings in Layout Animations on Fabric by @piaskowyk in #6864
- fix: __reanimatedLoggerConfig is not defined on edge runtime by @lebleb in #6880
- refactor: explicit invalidations for native and cpp by @tjzel in #6850
- Compatibility with 0.77 for findHostInstance by @piaskowyk in #6883
- fix: Break circular reference in
LayoutAnimation
by @lukmccall in #6671 - Add missing null-check to
findHostInstanceFastPath
by @piaskowyk in #6884 - Add missing
@stylexjs/babel-plugin
in web-example by @tomekzaw in #6886 - fix: Unsubscribe dangling listeners by @lukmccall in #6696
- Bump example apps to React Native 0.77 by @tomekzaw in #6768
- Update compatibility table by @tomekzaw in #6891
- Enable build with provenance for nightly by @tomekzaw in #6890
- Update versions in compatibility check workflow by @tomekzaw in #6892
- Don't call
jsQueue->quitSynchronous()
immediately after construction by @tomekzaw in #6781 - Remove
REAInitializerRCTFabricSurface
by @piaskowyk in #6837 - CSS Animations and Transitions by @MatiPl01 in #6912
- chore: Throw an error when the New Architecture is not available by @MatiPl01 in #6913
- Update compatibility and document fabric-only support for Reanimated 4 by @kmagiera in #6914
New Contributors
- @dynamichny made their first contribution in #6463
- @morganick made their first contribution in #6482
- @shubh73 made their first contribution in #6402
- @jakex7 made their first contribution in #6567
- @jeanregisser made their first contribution in #6590
- @mzaien made their first contribution in #6598
- @akshar-dave made their first contribution in #6675
- @gaearon made their first contribution in #6720
- @sumo-slonik made their first contribution in #6742
- @sorenfrederiksen made their first contribution in #6690
- @aymather made their first contribution in #6700
- @dlee made their first contribution in #6603
- @lebleb made their first contribution in #6880
Full Changelog: 3.15.0...4.0.0-beta.1