Skip to content

Releases: software-mansion/react-native-screens

4.25.0-beta.1

21 Apr 13:35
58513de

Choose a tag to compare

4.25.0-beta.1 Pre-release
Pre-release

What's Changed

First beta of the 4.25.0 release.

This version is a major step towards stabilization of the Tabs API.
It brings both, many API changes in yet-unstable Tabs API and internal refactors
allowing us to bring you more stable & reliable experience.

The Tabs API we publish in this version is a "stable candidate".
We'll release a couple more of 4.25.0 versions and "stable candidate API" in stable
4.25.0 version. Once we receive final round of feedback we plan to stabilize the
Tabs API in 4.26.0.

✅ Improvements

  • feat(Tabs): remove freezeContents & placeholder props by @kkafar in #3673
  • feat(Android, Tabs): Add support for selectedIcon on Android by @t0maboro in #3633
  • chore: define min. required react-native version in peerDependencies by @kkafar in #3691
  • feat: add ScrollViewMarker experimental component by @kkafar in #3674
  • feat(Android, Tabs): State-driven appearance on Android by @t0maboro in #3714
  • feat(iOS, Tabs): handle colorScheme (dark mode) by @kligarski in #3716
  • feat(Tabs, Android): handle colorScheme (dark mode) by @kligarski in #3723
  • feat(Tabs): add native RTL support for bottom tabs on iOS & Android by @ahmedawaad1804 in #3613
  • feat(Android): configure RNSLog utility by @sgaczol in #3718
  • chore(Android): disable default RNSLog activation in debug mode by @sgaczol in #3730
  • feat(iOS, Stack v4): Use new invalidation callback on Fabric by @t0maboro in #3728
  • feat(JS) - RNSLog utility by @sgaczol in #3733
  • feat(iOS): configure RNSLog utility by @sgaczol in #3727
  • refactor(Tabs): Split JS components and specs internally by @t0maboro in #3722
  • feat(iOS, Tabs): Migrate tabs to new invalidate callback on Fabric by @t0maboro in #3729
  • refactor(Tabs): Rename tabKey to screenKey by @t0maboro in #3750
  • refactor(JS, Tabs): Cleanup API following design doc by @t0maboro in #3748
  • feat(Android, Tabs): add prop to configure whether tab bar respects IME insets by @kligarski in #3740
  • chore(JS): RNSLog remove from public API by @sgaczol in #3744
  • fix(iOS, Modal): Filter-out obsolete state updates from JS by @t0maboro in #3760
  • refactor(Tabs, Android): Split TabsHost into TabsHost and TabsContainer by @kkafar in #3766
  • fix(iOS, StackV5): Fix default props type by @t0maboro in #3800
  • feat(Android, Tabs): partially implement RFC-1028 for Tabs on Android by @kkafar in #3776
  • feat(iOS, Tabs): partially implement RFC-1028 for Tabs on iOS by @kkafar in #3781
  • chore: make all exports from v5 component modules explicit by @kkafar in #3808
  • feat(iOS, Tabs): Add proper support for moreNavigationController on iOS by @kkafar in #3785
  • refactor(tabs): rename onTabChange event to onTabSelected by @kkafar in #3789
  • fix(iOS, Tabs): fix diverging behavior of JS updates requesting moreNavigationController on various Apple platforms by @kkafar in #3813
  • feat(Tabs): update operation model, add TabSelectionRejectedEvent and support rejecting stale state updates by @kkafar in #3794
  • fix(Android, Tabs): fix issue with badges being assigned to wrong menu items by @kkafar in #3799
  • chore: Bump RN to 0.85.0-rc.7 by @t0maboro in #3822
  • feat(Tabs): add preventNativeSelection support by @kkafar in #3838
  • feat(Android, Stack v5): add basic support for header by @kligarski in #3753
  • chore(Tabs): remove isFocused prop from TabsScreen codegen spec by @kkafar in #3863
  • refactor(Tabs, iOS): decouple moreNavigationController from navigation state by @kkafar in #3875
  • feat(iOS, Stack v4): allow background color customization by @sgaczol in #3833
  • chore: bump RN to 0.85.0 by @sgaczol in #3865
  • feat(Android, Stack v4): Add prop for manual opt-out from applying inset to header by @t0maboro in #3835
  • feat(iOS, Stack v5): Align Stack implementation with RFC 753 by @kmichalikk in #3774
  • refactor(Tabs): remove controlledBottomTabs / controlNavigationStateInJS option by @kkafar in #3888
  • chore(Tabs): add usesStableTabsApi compatibility flag by @kkafar in #3889
  • refactor(iOS, Tabs): Migrate scrollEdgeEffects from TabsScreen to ScrollViewMarker by @t0maboro in #3895
  • chore(types): enable exactOptionalPropertyTypes support by @YevheniiKotyrlo in #3719
  • feat(Android, Stack v5): handle header configuration and custom subviews by @kligarski in #3796
  • feat(Android, Stack v5): add back button to header with customization by @kligarski in #3883

🐞 Bug fixes

  • fix(Examples): Fix default icon provider by @t0maboro in #3742
  • fix(iOS, Stack v4): Fix usePreventRemove callback not called when tapping formSheet backdrop by @t0maboro in #3771
  • fix(iOS, Stack v4): hide back button when root screen is replaced with pop animation by @kligarski in #3770
  • fix(iOS): forward scrollEdgeEffects to inner screen in modals (#3816) by @maxencehenneron in #3825
  • fix(Android, Stack v4): Add heuristic for applying inset only on top-level header by @t0maboro in #3793
  • fix(android): Fix Activity memory leak in ScreenDummyLayoutHelper due to unreleased view references and missing lifecycle cleanup by @l2hyunwoo in #3638
  • fix(Android, Stack v4): Clear supportActionBar on fragment removal to prevent ScreenStackFragment leak by @t0maboro in #3867
  • fix(Tabs, iOS): reconcile navigation state on implicit UIKit selection changes by @kkafar in #3877
  • fix(ios): guard +load with #ifdef RCT_DYNAMIC_FRAMEWORKS by @DavidDuarte22 in #3828
  • fix: use path-based menuId to prevent collisions in nested submenus by @chrism in #3762
  • fix(Android, Stack): dispatch lifecycle events when parent is not a ScreenFragment by @collectioneur in #3854
  • fix(iOS, Stack v4): Fix reattaching screens which have preventNativeDismiss set by @t0maboro in #3886
  • fix(iOS, Tabs): prevent double event on more tab navigation by @kkafar in #3906

🔢 Misc

  • chore: rename TabsAccessory to TabsBottomAccessory by @kligarski in #3712
  • chore(Android, Tabs): move tabs files to separate packages by @kligarski in #3661
  • chore(CI): remove workflows related to the legacy architecture by @kkafar in #3686
  • chore(deps): bump tar from 7.5.7 to 7.5.9 in /FabricExam...
Read more

4.24.0

24 Feb 09:22
4b171b7

Choose a tag to compare

What's Changed

Minor release bringing further development to 5.0 stack implementation, nice improvements to Split API and other various improvements & fixes.

Caution

Most importantly this is the last release we've tested with legacy architecture.

From 4.25.0 on, we no longer plan to support RN versions below 0.82, which naturally comes with drop of support for legacy arch.
We plan to gradually remove the legacy architecture related code.

I want to also announce our plans regarding approach to 5.0 transition. At the moment we plan to keep releasing v4 line till we're "close to ready" with all APIs we've planed for 5.0 major. We plan to stabilise Tabs API on v4 line. When we're "close to ready" we'll release a series (rather not many) of 5.0-alpha/beta versions & after 5.0 stable release v4 branch will stay for some, not long, time in maintenance mode.
The downstream library implementers are already adopting new 5.0 APIs, they should be available for testing in the navigation library of your choice shortly.

✅ Improvements

  • feat(Android, Stack v5): prevent native dismiss support by @kkafar in #3620
  • feat(Android, Stack v5): make Transition API work by @kkafar in #3629
  • chore(iOS, Stack v4): Enable iosPreventReattachmentOfDismissedScreens by default by @t0maboro in #3652
  • feat(iOS 26): Add opt-out flag for interactions during transition for iOS 26 by @kmichalikk in #3631
  • feat(split-view): add show(column) command and topColumnForCollapsing prop by @Ubax in #3639
  • feat: add imageSource and templateSource icon support to menus by @Ubax in #3645

🐞 Bug fixes

  • fix(Android, Stack v5): fix lifecycle of prevent native dismiss callback by @kkafar in #3635
  • chore: Change constexpr to obj-c NSNumber by @kmichalikk in #3646
  • fix(iOS, Stack v4): prevent header subview memory leak by @kligarski in #3653
  • fix(Android, FormSheet): Apply workaround for controlling insets on BottomSheetBehavior by @t0maboro in #3611
  • fix(iOS, Tabs): defer scroll view behavior override until props are set by @Ubax in #3655
  • fix(Android, Stack v4): fix keyboard navigation focus for form sheet by @kligarski in #3245

🔢 Misc

Full Changelog: 4.23.0...4.24.0

4.23.0

06 Feb 13:47
61a7d8e

Choose a tag to compare

What's Changed

Minor release.
It's minor, because it ships with improvements with
experimental APIs, however its purpose is mostly to publish fix for FormSheet
on Android related to focus & keyboard management.

🟢 Improvements

  • feat(Android, Stack v5): allow for nested container pop via JS by @kkafar in #3612

🐞 Bug fixes

  • fix(Android, FormSheet): Add logic for dismissing keyboard when the BottomSheet is presented by @t0maboro in #3617
  • fix(android): default ScreenStackHeaderSubview type is LEFT by @hannojg in #3619

🔢 Misc

New Contributors

Full Changelog: 4.22.0...4.23.0

4.22.0

03 Feb 11:11
8f80ca3

Choose a tag to compare

What's Changed

Minor release bringing couple of fixes for the downstream regarding iPad orientation support
and tab-core logic.

Additionally, we've landed few PRs with further development of overhaul of native stack.
These are marked with ⚠️.

🟢 Improvements

  • ⚠️ feat(Android, Stack v5): nested stack uses childFragmentManager of parent container by @kkafar in #3597
  • ⚠️ feat(Android, Stack v5): allow for native navigation in nested stacks by @kkafar in #3601

🐛 Bug fixes

  • fix(iOS): Respect all screen orientations on iPad by @douglowder in #3609
  • fix: updateSelectedTab removing unowned fragments by @lukmccall in #3608
  • ⚠️ fix(Android, Stack v5): update stack model after native pop by @kkafar in #3599

🔢 Misc

  • chore(deps): bump tar from 7.5.6 to 7.5.7 by @dependabot[bot] in #3604
  • chore(examples): fix import path for tests in apps/App.tsx by @kkafar in #3605

Full Changelog: 4.21.0...4.22.0

4.21.0

02 Feb 12:34
7f6e4cf

Choose a tag to compare

What's Changed

Minor release bringing a variety of improvements, including enhanced support for xcassets and initial model for the new native stack implementation. This version also includes several important bug fixes and enhancements, especially for modals, stacks, and opening the dev menu from a key event on Android.

🟢 Improvements

  • feat(iOS): add xcassets support by @ajanuar in #3443
  • feat(Android): Make commit hook condition for resetting screen size more general by @kmichalikk in #3508
  • feat(Android, Stack v5): add skeleton native implementation by @kkafar in #3531
  • feat(Android, Stack v5): handle preloading screens by @kligarski in #3576

🐛 Bug fixes

  • fix(iOS, Stack): Add compression resistance to button item by @LeviWilliams in #3548
  • fix(iOS): FullWindowOverlay is not mounted when fullScreenModal is presented by @kkafar in #3553
  • fix(Android, FormSheet): Account initial translationY for default animation by @t0maboro in #3564
  • fix: Remove interaction disabling code for modals by @kmichalikk in #3555
  • fix(Android, FormSheet): Constraint calculations by screen size by @t0maboro in #3566
  • fix: Correct screen size change comparison by @kmichalikk in #3571
  • fix(iOS): modal content flicker during enter transition on iPad by @kkafar in #3345
  • fix(Android, Fabric): Fix crash when sending key event for opening dev menu by @t0maboro in #3586
  • fix(iOS): fix tvOS compilation in split-view by @douglowder in #3590
  • fix(iOS): fix possible build issues on Mac Catalyst due to implicit conversions by @kkafar in #3594
  • fix(iOS, Stack): Fix for reattaching Screens when swiping back quickly by @t0maboro in #3584
  • fix(iOS, Tabs): Request layout pass after loading image from source by @t0maboro in #3596

🔢 Misc

  • chore(deps): bump tar from 7.4.3 to 7.5.3 in /FabricExample by @dependabot[bot] in #3541
  • chore: Bump react-native to 0.84-rc1 by @kmichalikk in #3543
  • chore: Disable prebuilt RN core for FabricExample by @kmichalikk in #3552
  • chore(deps): aggregate dependabot updates by @kkafar in #3565
  • chore(deps): bump vm2 from 3.9.19 to 3.10.3 by @dependabot[bot] in #3575
  • chore: Bump react-navigation and update Test2560 to cover sheetResizeAnimationEnabled by @t0maboro in #3581
  • chore: Add information about keyboard handling to sheetLargestUndimmedDetentIndex by @t0maboro in #3582
  • chore: Add platform annotation and rephrase sheetLargestUndimmedDetentIndex remark by @t0maboro in #3583
  • chore: Refactor library examples & tests by @kmichalikk in #3528
  • fix(Android, Examples): Fix crashes in examples below API level 29 by @t0maboro in #3588
  • chore(deps): aggregate dependabot updates for tar by @kkafar in #3595

New Contributors

Full Changelog: 4.20.0...4.21.0

4.20.0

19 Jan 10:41
5f91652

Choose a tag to compare

What's Changed

Minor release bringing improvements to formSheet on Android in form of support for "dynamic content size" when fitToContents is selected. Beside that important a11y update for bottom tabs and other fixes.

🟢 Improvements

  • fix(Android, FormSheet): Fix dynamic height change for fitToContents by @t0maboro in #3484
  • fix(Android, FormSheet): Fix Y translation when fitToContents content overflows Screen size by @t0maboro in #3522
  • feat: Remove componentProvider from package.json by @kmichalikk in #3504
  • feat: Add testId and accessibilityLabel for BottomTabsScreen and Item by @kmichalikk in #3497
  • feat(Tabs): allow full tabs background color styling by @kligarski in #3492

🐛 Bug fixes

  • fix(iOS, Stack): center subview not visible/misaligned in header by @kligarski in #3489
  • fix: fix library typing for React 19 by @kkafar in #3509
  • fix(iOS): fix issue with ill-formed program due to usage of static_assert(false) by @kkafar in #3523

⚠️ Changes in experimental APIs

  • chore(Stack): rename components related to new stack by @kkafar in #3485
  • chore(Stack): rename ScreenStackHost to StackHost by @kkafar in #3486
  • chore(Split): reorganize Split component exports and naming by @kkafar in #3487
  • chore(Stack): rename maxLifecycleState to activityMode by @kkafar in #3505
  • feat(Tabs)!: export tabs related components under Tabs object + drop Bottom* prefix by @kkafar in #3535

🔢 Misc

  • chore: Update FormSheet-SAV integration test to cover sheetShouldOverflowTopInset by @t0maboro in #3503
  • chore(JS): use new platform specific icon syntax in tests by @kligarski in #3490
  • chore(Stack): refactor component definition & nomenclature on native side by @kkafar in #3493
  • chore(Stack): move impl source files for "host" and "screen" into separate dirs by @kkafar in #3494
  • docs(readme): add sorn25 banner by @p-malecki in #3506
  • docs(readme): remove sorn25 banner by @p-malecki in #3539
  • chore: update PR template with new requirements by @kkafar in #3519
  • chore: add reference StackContainer implementation by @kkafar in #3518
  • chore: Remove react-native-edge-to-edge from example apps by @kmichalikk in #3520
  • chore(deps): bump js-yaml from 3.14.1 to 3.14.2 in /TVOSExample by @dependabot[bot] in #3498
  • chore(deps): bump js-yaml from 3.14.1 to 3.14.2 in /FabricExample by @dependabot[bot] in #3507
  • chore(deps): bump qs from 6.14.0 to 6.14.1 in /docs by @dependabot[bot] in #3513
  • chore(deps): bump qs from 6.14.0 to 6.14.1 in /TVOSExample by @dependabot[bot] in #3516
  • chore(deps): bump js-yaml from 3.14.1 to 3.14.2 by @dependabot[bot] in #3517

New Contributors

Full Changelog: 4.19.0...4.20.0

4.19.0

15 Dec 19:24
f65b107

Choose a tag to compare

What's Changed

Minor release. It comes with many improvements & bug fixes. Notably:

  1. bottomAccessory support for native tabs on iOS,
  2. special effects support for tabs on Android,
  3. support for synchronous state updates (behind a feature flag),
  4. quite few more.

⚠️ This release also removes long-deprecated native-stack v5 code from the repository.

See the full change set below 👇🏻

Improvements

  • feat: Remove native-stack v5 from screens repo by @kmichalikk in #3433
  • feat(iOS, Tabs): add bottomAccessory support by @kligarski in #3288
  • feat(Android, Tabs): Add special effects to bottom tabs on Android by @Ubax in #3337
  • feat(iOS, SplitView): Add support for primaryBackgroundStyle prop by @t0maboro in #3320
  • feat(Stack): Add support for synchronous state updates on fabric for native stack by @t0maboro in #3282
  • feat(iOS, SafeAreaView): use synchronous state updates by @kligarski in #3335
  • feat(iOS, SplitView): Add an option for changing number of columns dynamically by @t0maboro in #3339
  • feat(iOS, SplitView): Migrate to new invalidate method by @t0maboro in #3364
  • feat(iOS, Tabs): add prop to hide the tab bar by @kligarski in #3343
  • fix(iOS, Stack): handle icon rendering modes for bar button items by @kligarski in #3347
  • feat(Android, Tabs): add prop to hide the tab bar by @kligarski in #3344
  • feat: Bring back gestureResponseDistance on iOS 26 by @kmichalikk in #3353
  • feat(iOS, Stack): Add controller invalidating to new stack impl by @t0maboro in #3219
  • feat: add snapshotAfterUpdates property to RNSScreenView by @bartlomiejbloniarz in #3296
  • feat(iOS, Stack, Tabs, experimental): add prop to override user interface style by @kligarski in #3342
  • fix(Android, Stack): Moving formsheet above keyboard by @t0maboro in #3248
  • chore: Update installation steps in docs by @t0maboro in #3391
  • feat(iOS): add missing features to bar button items by @Ubax in #3396
  • feat(Tabs): special effects refactor by @kligarski in #3440
  • chore: bump FabricExample & lib to react-native@0.83 by @t0maboro in #3456
  • refactor: Remove codegen-related deep imports by @t0maboro in #3458

Bug fixes

  • fix(iOS, SplitView): Track visible columns from delegate by @t0maboro in #3319
  • fix(iOS): Verify that ScrollView gesture hasn't begun when triggering pan gesture by @kmichalikk in #3271
  • fix(iOS, SplitView): Remove tracking presentation layer in favor of sync state update by @t0maboro in #3285
  • fix(iOS, Tabs): fix problems with dynamically changing title, icon, systemItem by @kligarski in #3333
  • fix(iOS, FormSheet): Always use absolute positioning by @t0maboro in #3351
  • fix(Android, Stack): Make MountingCoordinator vector access thread safe by @t0maboro in #3363
  • fix(iOS, Stack): Prevent overriding invalidate callback on Fabric by @t0maboro in #3359
  • fix: RCTViewComponentViewProtocol -> RCTComponentViewProtocol by @t0maboro in #3365
  • fix(iOS, FullWindowOverlay): Show overlay when app returns from background by @t0maboro in #3369
  • fix(iOS): load header items icons synchronously when feasible by @johankasperi in #3355
  • fix(JS, Stack): consider default value for stackPresentation and headerConfig.hidden in ScreenStackItem by @kligarski in #3374
  • fix(iOS, FullWindowOverlay): Move show logic to didMoveToWindow by @t0maboro in #3379
  • fix(Android, Stack): Fix flex-end positioning in formSheet by @t0maboro in #3346
  • fix: circular import in src/types.tsx by @kligarski in #3394
  • fix: Disable interactions on minimal required subroot by @kmichalikk in #3311
  • fix(Android, SAV+Tabs+Stack v4): fix CustomToolbar's insets handling to use insets received from ancestor views by @kligarski in #3240
  • fix(iOS): fix header height in modal, add TestHeaderHeight by @kligarski in #3393
  • fix(Android, Stack): Fix FormSheet - SafeAreaView integration by @t0maboro in #3336
  • fix(Android, Tabs): Fix tabs icons loading in release mode by @t0maboro in #3413
  • fix(Android, Stack): incorrect header height values by @kligarski in #3402
  • fix(iOS, Tabs): remove incorrect warning on none environment in Bottom Accessory by @kligarski in #3416
  • fix(iOS): Distinguish horizontal and vertical scroll in gesture failure requirements by @kmichalikk in #3420
  • fix(Android): layout shift on orientation change by @kmichalikk in #3295
  • fix(iOS, Tabs): tab screen height when tabs are rendered dynamically by @kligarski in #3425
  • fix(iOS, Stack): delay setting navigation bar visibility to mitigate bar button bug on iOS 26 by @kligarski in #3422
  • fix(Android, Stack): Constraint FormSheet height by top inset by @t0maboro in #3404
  • fix(SplitView, Android & Web): move split view warnings to components by @Ubax in #3431
  • fix(examples): Stop triggering CPU intensive tasks in top level scope in example apps by @kkafar in #3432
  • chore: fix imports in bottom accessory by @kligarski in #3439
  • fix(iOS, FormSheet): Add fallback for searching ScrollView which is inside SAV by @t0maboro in #3479
  • fix(Android, FormSheet): Fix pressables with TextInput for Fabric by @t0maboro in #3435
  • fix(JS, stack): Fix push fail after 3rd screen in JS stack by @kmichalikk in #3450
  • fix(Android, Stack, Fabric): Fix jumping content in nested stack for Fabric by @t0maboro in #3442
  • fix(iOS, Tabs): overrideScrollViewContentInsetAdjustmentBehavior in managed tabs by @kligarski in #3441
  • fix(iOS, Stack, Fabric): Pressable hitSlop in header subviews on Fabric by @kligarski in #3446
  • fix(iOS 26, Stack): center view inside bar button item by @kligarski in #3449
  • fix(iOS, Tabs): bottom accessory opacity on appearance change by @kligarski in #3467
  • fix(iOS, FormSheet): Allow handling dynamic content size in FormSheet since 0.82 with synchronous updates enabled by @t0maboro in #3454
  • fix(iOS, Stack): Fix enum conversion for landscape right by @t0maboro in #3474
  • fix(Android): crash on hot reload when FabricUIManagerBinding is null by @kimchi-developer in #3475

Misc

Read more

4.18.0

22 Oct 15:31
f6be5f3

Choose a tag to compare

Minor release with important changes in bottom tabs icons API, recently added header items API and few more.

What's Changed

🟢 Improvements / Changes

  • refactor(Tabs): Refactor APIs for icons by @t0maboro in #3214
  • fix(iOS): accept multiple attributes for menu items by @satya164 in #3308
  • refactor(iOS): add type to header bar button items by @johankasperi in #3306
  • refactor(iOS): rename label -> title in context of header items API by @kkafar in #3318
  • refactor!(iOS): move changesSelectionAsPrimaryAction to menu button item by @kkafar in #3331

🐞 Bug fixes

  • fix(iOS, Tabs): use default UITabBarItem's title font as a base for font configuration by @kligarski in #3310
  • fix(iOS, Tabs): tabBarTintColor on iPadOS by @kligarski in #3314
  • fix: prevent freeze from unmounting native components by @kkafar in #3324
  • fix(iOS): handle variable icons in header items by @johankasperi in #3323

🔢 Misc

  • chore: Remove orientation settings in BottomTabsTest by @kmichalikk in #3312
  • chore: use label instead of title in example using react-navigation by @kkafar in #3329
  • release: 4.18.0 by @kkafar in #3332

Full Changelog: 4.17.1...4.18.0

4.17.1

15 Oct 22:34
b3267df

Choose a tag to compare

Patch release with fix for failing iOS build in release mode.

What's Changed

  • fix(iOS): build error in release mode - imageLoader not defined by @kkafar in #3300

Full Changelog: 4.17.0...4.17.1

4.17.0

15 Oct 17:09
69d37f3

Choose a tag to compare

Minor release including:

  • 👉🏻 Important patches for iOS 26 behaviour
  • 👉🏻 New API for specifying native header items on iOS by @johankasperi,
  • 👉🏻 New experimental safe area component handling native header / bottom tabs, etc.,
  • 👉🏻 Support for UIScrollEdgeEffect,
  • 👉🏻 Support for "glassy" form sheets on iOS 26,
  • 👉🏻 Many other important patches & improvements.

See the full list of PRs below 👇🏻

What's Changed

🟢 Improvements

  • feat(iOS): support UIBarButtonItem in header by @johankasperi in #2987
  • feat(iOS): add support for using native behavior in hideNavigationBar, obscureBackground props in SearchBar by @kligarski in #3211
  • feat: safe area component PoC by @kligarski in #3208
  • feat(iOS): safe area component for iOS by @kligarski in #3209
  • feat(iOS): Handle interactiveContentPopGesture for iOS 26 by @kmichalikk in #3173
  • feat(iOS): Add scroll edge effects by @kmichalikk in #3212
  • feat(Android, Tabs): Update approach for loading external sources for tab icons by @t0maboro in #3216
  • feat(Android, Tabs): safe area component for Android by @kligarski in #3215
  • feat(iOS): Bring back fullScreenSwipeEnabled prop by @kmichalikk in #3242
  • feat(iOS): Support UITabBarController.Mode for iPad sidebar feature by @douglowder in #3236
  • feat(iOS, SplitView): SplitView synchronous updates by @t0maboro in #3274
  • feat: move SafeAreaView component from /private to /experimental by @kkafar in #3286

🐞 Bug fixes

  • fix(iOS): fix possible build issues for Mac Catalyst due to implicit conversions by @kkafar in #3202
  • fix(iOS): Prevent delay when dismissing transparentModals by @kmichalikk in #3189
  • fix(iOS, Stack v4): ensure consistent defaults for obscureBackground and hideNavigationBar by @kligarski in #3199
  • fix(iOS 26, Stack v4): remove workaround for content under header in modal by @kligarski in #3206
  • fix(iOS, Tabs): Implement missing method from RNSViewControllerInvalidating protocol for Screen by @t0maboro in #3227
  • fix(iOS, Stack): Deduplicate contentStyle on Screen and ScreenContentWrapper by @t0maboro in #3228
  • fix(Android): header config shadow node has wrong origin when translucent == true by @maxencehenneron in #3239
  • fix(iOS, Stack v4): use SafeAreaView in Stack v4 to fix content rendering under UINavigationBar on iOS 26 by @kligarski in #3231
  • fix(Android, Stack v4): fix canceling search on Android by @kligarski in #3255
  • fix(Android, Fabric, Stack v4): add autoFocus to SearchBar Fabric spec file by @kligarski in #3258
  • fix(Android, Tabs): tab label flashing on tab change in labeled visbility mode by @kligarski in #3260
  • fix(iOS, Stack v4): add systemDefault option to autoCapitalize prop in SearchBar by @kligarski in #3251
  • fix(Android, Stack): Add logic for reattaching mounting override delegate by @t0maboro in #3241
  • feat!(Android, Stack v4): remove native code/deps related to props deprecated by edge-to-edge enforcement by @kligarski in #3264
  • fix(iOS): Fix content pop with horizontal scroll by @kmichalikk in #3265
  • fix(Android, SplitView): Add fallback for SplitView import error by @t0maboro in #3277
  • fix(Android,Tabs): fix usage of transitive R class attr:colorError with material:1.13.0 by @Ubax in #3280
  • fix(iOS): Clear _shouldUpdateScrollEdgeEffects flag in RNSScreen.finalizeUpdates by @kmichalikk in #3283
  • Fix custom screen swipe transitions by @piaskowyk in #3254
  • fix(iOS, Tabs): change whiteColor to systemBackgroundColor in tabs background workaround by @kligarski in #3279
  • fix(Android, FormSheet): Add fallback for undefined corner radius by @t0maboro in #3291
  • fix(Android): crash API 25 when going back from screen with flat list by @maciekstosio in #2964
  • fix(iOS, Tabs): update tab bar item only when necessary by @kligarski in #3290

🔢 Misc

  • chore: create react-native-screens/experimental submodule by @kkafar in #3222
  • chore: move gamma symbols into experimental package by @kkafar in #3223
  • docs: fix testimonial name by @ferrannp in #3194
  • Update README.md by @sharifhh in #3201
  • chore(deps): bump brace-expansion from 1.1.11 to 1.1.12 in /Example by @dependabot[bot] in #3151
  • chore(iOS): remove outdated SDK version checks (iOS < 15.1) by @kligarski in #3204
  • refactor: review 3097 - make split screen controller & component the frame correction provider by @kkafar in #3179
  • chore: Configure OIDC for nightly builds by @kmagiera in #3220
  • chore(deps): bump rexml from 3.3.9 to 3.4.2 in /FabricExample by @dependabot[bot] in #3225
  • refactor: move types related to ScreenStackHost & StackScreen to separate files by @kkafar in #3224
  • chore: move gamma components into dedicated directories by @kligarski in #3243
  • chore: Move ScrollEdgeEffectApplicator to helpers/scroll-view, backport by @kmichalikk in #3253
  • chore(Example, Tabs): use SAV in BottomTabsContainer by @kligarski in #3256
  • chore: bump FabricExample & lib to react-native@0.82 by @kligarski in #3259
  • fix(Android): sync architectures after bump to react-native@0.82 by @kligarski in #3261
  • chore(deps): bump rexml from 3.3.9 to 3.4.2 in /TVOSExample by @dependabot[bot] in #3262
  • chore: Move BottomTabs props configuration outside of BottomTabsContainer by @kmichalikk in #3246
  • chore: Uncomment tabBarMinimizeBehavior config in TestSafeAreaViewIOS by @kmichalikk in #3247
  • chore(deps): bump rexml from 3.3.9 to 3.4.2 in /Example by @dependabot[bot] in #3267
  • chore(iOS): Add test case for scrollEdgeEffects by @kmichalikk in #3244
  • feat(iOS): Implement ScrollViewProviding protocol by @kmichalikk in #3238
  • test(iOS, SplitView): Add example for testing performance by @t0maboro in #3287
  • refactor(Android, Tabs): Move image loader logic to TabsImageLoader by @t0maboro in #3292

New Contributors

Full Changelog: 4.15...4.17.0