Skip to content

[$1500] Introduce a Bottom Tab Navigator for Top-Level Navigation #85260

Description

@mountiny

Coming from this proposal

Background

The application consists of several tabs:
• Home
• Inbox
• Reports
• Workspaces
• Account
Each of these tabs (without home) has its own nested navigation flow implemented using stack navigators.
Some tabs contain heavy screens, particularly Inbox, Reports, and Workspaces, where complex views and large datasets are rendered.
Currently, navigation uses a root stack navigator, where each top-level tab is pushed as a screen. As a result, switching between tabs repeatedly mounts and unmounts entire navigators, because every time we navigate to a tab, we are pushing a new screen.
This introduces unnecessary overhead and makes tab switching slower than expected, especially when moving frequently between heavy screens.

Problem

When users switch between tabs, the stack-based architecture recreates navigators and screens.
This leads to:
• unnecessary mounting and unmounting
• increased navigation latency
• reduced perceived responsiveness when switching between heavy screens

Solution

Introduce a Bottom Tab Navigator inside the root stack navigator to represent the main application areas.
The root stack navigator remains, and continues to handle global flows such as:
• modals
• RHP screens
• other global navigation states
Inside the root stack we introduce a Bottom Tab Navigator that contains the main areas of the app.

Navigation structure

Root Stack Navigator
│
├─ Bottom Tab Navigator
│   ├─ Home Stack
│   ├─ Inbox Stack
|      ├─Report
│   ├─ Reports Stack
│   ├─ Workspaces Stack
|      ├─Workspace initial page
│   └─ Settings Stack
│
├─ RHP Screens
└─ Modal ScreensEach tab keeps its existing stack navigator.

Because tab navigators keep screens mounted, switching between tabs does not recreate navigators, which significantly reduces navigation work.
Additional Improvements
This approach also allows us to:
• freeze screens when they lose focus to prevent background work
• centralize the top-level tab bar in one place
• reduce navigation overhead between heavy screens
• make tab transitions more predictable and consistent

Measured Improvements
Web: ~40% faster tab switching
iOS: ~80% faster tab switching
Android: ~80% faster tab switching

Result

This aligns the navigation architecture better with how the application is structured:
• tabs represent top-level areas of the app
• tab switching becomes significantly faster
• heavy screens (Inbox, Reports, Workspaces) no longer remount unnecessarily
• background screens are frozen when blurred
• navigation UI becomes more consistent
Overall, this should significantly improve responsiveness when switching between tabs.

Here is a draft PR. Please feel free to generate an ad-hoc build and test it. Tab switching should already be working. There are still some bugs that we are currently working on, but during testing you can focus mainly on verifying the tab switching.

Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~022032516596565029852
  • Upwork Job ID: 2032516596565029852
  • Last Price Increase: 2026-05-26
Issue OwnerCurrent Issue Owner: @sumo-slonik

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionBugSomething is broken. Auto assigns a BugZero manager.ExternalAdded to denote the issue can be worked on by a contributorWeeklyKSv2

Type

No type
No fields configured for issues without a type.

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions