Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: software-mansion/react-native-screens
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 4.21.0
Choose a base ref
...
head repository: software-mansion/react-native-screens
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 4.22.0
Choose a head ref
  • 8 commits
  • 18 files changed
  • 5 contributors

Commits on Feb 2, 2026

  1. feat(Android, Stack v5): nested stack uses childFragmentManager of pa…

    …rent container (#3597)
    
    ## Description
    
    Closes
    <software-mansion/react-native-screens-labs#921>
    
    `StackScreen` implements now `FragmentProviding` interface. This causes
    `StackContainer` of nested stack to use `childFragmentManager` of parent
    container instead of reusing `supportFragmentManager`.
    
    ## Changes
    
    N/A
    
    ## Visual documentation
    
    N/A
    
    ## Test plan
    
    Not a fix or change in behavior, this is just new behavior.
    To verify you need to attach a debugger in `StackContainer` and verify
    that it uses
    `childFragmentManager` of parent container.
    
    I've added test example for this use case that I'll likely follow
    developing in
    next PRs.
    kkafar authored Feb 2, 2026
    Configuration menu
    Copy the full SHA
    b6d053c View commit details
    Browse the repository at this point in the history
  2. chore(deps): bump tar from 7.5.6 to 7.5.7 (#3604)

    Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.6 to 7.5.7.
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/isaacs/node-tar/commit/4a37eb9a1cf1137df4eb70c5c7f849f412ff3cdb"><code>4a37eb9</code></a>
    7.5.7</li>
    <li><a
    href="https://github.com/isaacs/node-tar/commit/f4a7aa9bc3d717c987fdf1480ff7a64e87ffdb46"><code>f4a7aa9</code></a>
    fix: properly sanitize hard links containing ..</li>
    <li>See full diff in <a
    href="https://github.com/isaacs/node-tar/compare/v7.5.6...v7.5.7">compare
    view</a></li>
    </ul>
    </details>
    <details>
    <summary>Maintainer changes</summary>
    <p>This version was pushed to npm by <a
    href="https://www.npmjs.com/~isaacs">isaacs</a>, a new releaser for tar
    since your current version.</p>
    </details>
    <br />
    
    
    [![Dependabot compatibility
    score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tar&package-manager=npm_and_yarn&previous-version=7.5.6&new-version=7.5.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
    
    Dependabot will resolve any conflicts with this PR as long as you don't
    alter it yourself. You can also trigger a rebase manually by commenting
    `@dependabot rebase`.
    
    [//]: # (dependabot-automerge-start)
    [//]: # (dependabot-automerge-end)
    
    ---
    
    <details>
    <summary>Dependabot commands and options</summary>
    <br />
    
    You can trigger Dependabot actions by commenting on this PR:
    - `@dependabot rebase` will rebase this PR
    - `@dependabot recreate` will recreate this PR, overwriting any edits
    that have been made to it
    - `@dependabot merge` will merge this PR after your CI passes on it
    - `@dependabot squash and merge` will squash and merge this PR after
    your CI passes on it
    - `@dependabot cancel merge` will cancel a previously requested merge
    and block automerging
    - `@dependabot reopen` will reopen this PR if it is closed
    - `@dependabot close` will close this PR and stop Dependabot recreating
    it. You can achieve the same result by closing it manually
    - `@dependabot show <dependency name> ignore conditions` will show all
    of the ignore conditions of the specified dependency
    - `@dependabot ignore this major version` will close this PR and stop
    Dependabot creating any more for this major version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this minor version` will close this PR and stop
    Dependabot creating any more for this minor version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this dependency` will close this PR and stop
    Dependabot creating any more for this dependency (unless you reopen the
    PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the
    [Security Alerts
    page](https://github.com/software-mansion/react-native-screens/network/alerts).
    
    </details>
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored Feb 2, 2026
    Configuration menu
    Copy the full SHA
    523a736 View commit details
    Browse the repository at this point in the history
  3. fix(Android, Stack v5): update stack model after native pop (#3599)

    ## Description
    
    Currently when doing native pop, the `stackModel` stored in
    `StackContainer`
    is never updated, therefore leading to an incorrect state held (natively
    dismissed fragments are never removed from the state).
    
    This PR changes that.
    
    ## Changes
    
    Currently I remove them from the state in `onFragmentDestroyView`,
    and it seems to work, however I'm not sure, this is the perfect
    place timing-wise. This callback is called only after fragment's
    view is destroyed, which might be pretty late in component
    lifecycle, and we might execute container operations still taking
    into consideration possibly removed screens. We need to look into
    that later.
    
    ## Before & after - visual documentation
    
    N/A
    
    ## Test plan
    
    Only sensible way to test this is to add logging in `StackContainer`
    and dismiss few screens natively, and see that the state is updated
    (with this fix).
    
    ## Checklist
    
    - [x] Ensured that CI passes
    kkafar authored Feb 2, 2026
    Configuration menu
    Copy the full SHA
    ec86230 View commit details
    Browse the repository at this point in the history
  4. chore(examples): fix import path for tests in apps/App.tsx (#3605)

    After
    <#3528>
    The commented import is no longer up to date. This PR fixes it.
    kkafar authored Feb 2, 2026
    Configuration menu
    Copy the full SHA
    c3f7cb1 View commit details
    Browse the repository at this point in the history
  5. feat(Android, Stack v5): allow for native navigation in nested stacks (

    …#3601)
    
    ## Description
    
    This commit refactors *StackContainer* code. Achieved functional effect
    boils down to support for native-pop in nested stack, and in outer stack
    after closing the nested one.
    
    Closes
    software-mansion/react-native-screens-labs#821
    
    ## Changes
    
    I've added abstraction over *FragmentManager* operations. This is done
    mostly to structure and better manage container update code complexity.
    The *FragmentManager* facing code is now moved into
    `FragmentOperationExecutor` class.
    
    Now *FragmentManager* reference is cleaned up in `onDetachedFromWindow`.
    
    The *StackContainer* is now `OnBackStackChangedListener`. This is done
    to better time & detect that a screen has been dismissed. This callback
    is invoked mid-transaction execution by fragment manager, not after all
    animations finish & the UI disappears. It seems like much more
    appropriate place to keep the *StackContainer* possibly up-to-date.
    
    Please note, that *StackScreen* still emits `onDismiss` event much
    later, after the UI hides & fragment is destroyed. I've changed it a bit
    here. Earlier it has been emitted in `onDestroyView`, now I emit it in
    `onDestroy`. I've changed that to prevent incorrect emitting when
    fragment moves to *STARTED* lifecycle state but is not detached from
    fragment manager - such situation might happen when we use
    `FragmentTransaction.detach`, which is planned.
    
    This commit also adds basic *primaryNavigationFragment* management. This
    is necessary for native navigation in nested stacks to work. If we do
    not set it correctly, then *childFragmentManager* (used by nested stack)
    won't handle `backPressed` at all. This responsibility will be delegated
    to the *supportFragmentManager* and whole nested stack will be popped
    immediately, instead of only single screen. Important thing to note here
    is that we need to run additional fragment manager operations when we
    detect that a fragment has been natively popped.
    `FragmentManager.primaryNavigationFragment` state seems to not be
    updated automatically once written to, hence unless we update it, we
    will encounter a crash where *FragmentManager* attempts to delegate back
    handling to already detached fragment.
    
    ## Visual documentation
    
    Push, Pop, Native pop work nicely, even when popping nested stack. The
    same action via JS popping should not work yet & will be handled
    separately.
    
    
    https://github.com/user-attachments/assets/43f6f3e4-35f7-4bfc-bd23-674d97ceca76
    
    There is no "before" video. This is initial implementation.
    
    ## Test plan
    
    TestStackNesting
    
    ## Checklist
    
    - [ ] Included code example that can be used to test this change.
    - [ ] Updated / created local changelog entries in relevant test files.
    - [ ] For visual changes, included screenshots / GIFs / recordings
    documenting the change.
    - [ ] For API changes, updated relevant public types.
    - [ ] Ensured that CI passes
    kkafar authored Feb 2, 2026
    Configuration menu
    Copy the full SHA
    82ce103 View commit details
    Browse the repository at this point in the history

Commits on Feb 3, 2026

  1. fix(iOS): Respect all screen orientations on iPad (#3609)

    ## Description
    
    On iPad, SDK 55 router app would remain in landscape layout when the
    iPad was turned upside down. This was because `RNSScreen.mm` had the
    `UIInterfaceOrientationMaskAllButUpsideDown` set for allowed screen
    rotations.
    
    ## Changes
    
    Detect when running on iPad, and change the allowed screen orientations
    to `UIInterfaceOrientationMaskAll`. On non-iPad devices, behavior is
    unchanged.
    
    ## Test plan
    
    Tested on iPad simulator.
    
    ---------
    
    Co-authored-by: Kacper Kafara <kacperkafara@gmail.com>
    douglowder and kkafar authored Feb 3, 2026
    Configuration menu
    Copy the full SHA
    ac6d8e3 View commit details
    Browse the repository at this point in the history
  2. fix: updateSelectedTab removing unowned fragments (#3608)

    ## Description
    
    Fixes `updateSelectedTab` removing unowned fragments (fragments that
    were created by other libraries)
    
    ## Changes
    
    - Made sure that the code will only remove `TabScreenFragment` 
    
    ## Test plan
    
    This change was tested using the new Expo template in the preview
    version of Expo Go.
    Before, the `react-native-screens` removed the fragment created by
    `expo-dev-menu`. With this fix, everything seems to work.
    lukmccall authored Feb 3, 2026
    Configuration menu
    Copy the full SHA
    441e1d8 View commit details
    Browse the repository at this point in the history
  3. release: 4.22.0 (#3610)

    This release brings some additional fixes for downstream solutions.
    Additionally, we've landed further development PRs for native stack v5
    kkafar authored Feb 3, 2026
    Configuration menu
    Copy the full SHA
    8f80ca3 View commit details
    Browse the repository at this point in the history
Loading