Navigation management into installed PWAs

Demián Renzulli
Demián Renzulli
Dan Murphy
Dan Murphy
Dibyajyoti Pal
Dibyajyoti Pal
Vincent Scheib
Vincent Scheib

Published: August 19, 2025

Navigation management encompasses the methods for controlling how a Progressive Web App (PWA) handles user navigation. A critical component of this is navigation capturing, the browser process that determines whether clicking a link should launch the installed PWA or open a new browser tab.

This guide covers the new version of navigation capturing, available from Chrome 139. While the browser's default behavior is suitable for most cases, a deeper understanding of these management techniques and their related APIs is essential if you want to create the smoothest experience for your users.

The Developer controls section shares how to customize navigation to deliver the best possible launching experience for your PWA.

The new default behavior

To align with user preferences and reduce friction, Chrome is standardizing how it handles links. Previously, the behavior was inconsistent across platforms. Mobile devices typically prioritized launching installed apps, while desktop browsers would first open a link in a tab before signaling that an app could handle it.

The new, unified approach for navigation capturing, automatically opens links in their corresponding installed PWA. Links will only fall back to a browser tab if the PWA isn't installed or if the user has opted out. This new behavior is available from Chrome 139 for Windows, Mac, and Linux, with ChromeOS support coming in a future release.

Clicking a link selects the installed PWA if available otherwise opens the target in a browser tab.
The new navigation capturing behavior that prioritizes launching installed PWAs is available from Chrome 139.

Navigation capturing is part of the navigation management process. This process covers the entire flow, from the user's initial action to the browser's decisions and the resulting behaviors configured by the developer:

  • User actions: Includes interactions such as clicking or tapping on links.
  • Browser decisions: includes tasks and decisions managed by the browser, such as default behaviors, like navigation capturing.
  • Developer controls: Includes web APIs that let developers instruct the browser on how to handle specific tasks.

The interplay of these elements determines whether the PWA opens in a standalone window or a browser tab.

Navigation management is the result of user actions, browser decisions and developer controls.

A fundamental navigation management use case is when a user clicks or taps a link to the installed PWA from another page in the browser. The following example walks through the case of a user that has installed the Google Chat PWA and clicks on a link to it from a Google Calendar invite.

The user clicks on a link to chat.google.com (installed as a PWA) from calendar.google.com.

User actions

Every user action consists of three key elements: the event (such as a click or tap), the surface where it takes place (like a webpage or desktop shortcut), and the link type being activated (like an HTTPS URL). For example, a user's action could be clicking a link to https://chat.google.com/meeting_room_id within the scope of the Google Chat PWA from a webpage on calendar.google.com.

Browser decisions

Upon a user action, like the user clicking in the previous step, the browser runs the navigation capturing process to decide whether links should be open in a browser tab or in an installed PWA. It consists of the following steps:

  1. Determine if the navigation is capturable: In general, a navigation is considered capturable if it creates a new frame and does not open in an auxiliary browsing context.
  2. Identify a controlling PWA: If the navigation is capturable, the browser tries to find a PWA that "controls" the URL (falls within the scope defined in its Web App Manifest).
  3. Verify user preference: If a controlling PWA is found, the browser checks user preference. If the user hasn't opted out in the app settings, the PWA launches; otherwise, the link opens in a new browser tab.
  4. Launch the PWA: The browser launches the PWA using the Launch Handling Algorithm. You can influence this using the Launch Handler API, covered next.

The following diagram summarizes this process:

image
Navigation Capturing: Steps performed by the browser to determine whether to open links in a browser tab or launch a PWA upon a user action.

Developer controls

While the navigation process primarily relies on browser defaults and user settings, you can use various APIs to manage specific aspects of it. Following the recent navigation capturing update, some long-standing web APIs have become more relevant.

Launch Handler API

This API comes into play when the browser decides to launch the PWA, letting you control how it is launched—for example, in a new or an existing window.

PWA can be launched by focusing an existing window or opening a new window.
Launch Handler API: Lets you determine how the PWA will be launched.

Define how the PWA launches through the launch_handler member in the Web App Manifest, which includes a subfield called client_mode. This subfield determines whether a new or existing window should be used and whether it should navigate. The allowed values for client_mode are:

  • focus-existing: To handle the link in an existing app window, like a PWA that is already running in standalone mode.
  • navigate-existing: In this option the most recently interacted with, browsing context in a web app window is navigated to the launch's target URL.
  • navigate-new: With this option a new browsing context is created in a web app window to load the launch's target URL.

Use the launchQueue API to provide additional parameters and handle special cases. The Launch Handler API is available from Chrome 110, but becomes much more useful with the navigation capturing update. You can learn more about it in the Launch Handler API documentation.

Other related APIs

Besides launch handling, other APIs can also play a role in this process, depending on your app's specific needs. These include URL Protocol Handlers, which allow a web app to register its ability to handle URL schemes beyond the standard http and https (for example, standard protocols like mailto: or custom ones like web+music). Also, the Web App Scope Extensions API (currently under development) lets you extend the scope of your PWA to capture links from other origins, including subdomains, so that when a user clicks on a link from an associated origin, the PWA can be launched. Covering them in depth is out of the scope of this article, but you can check out the corresponding links to know more.

To wrap up, learn how the different pieces work together in the example of clicking on a Google Calendar link to a Google Chat room, for a user that has already installed the Google Chat PWA.

Before navigation capturing

In the following video, a user creates a Google Calendar meeting and invites three guests. The Calendar app automatically generates a Google Chat link that includes all participants. When the user clicks this link, the chat room opens in a new browser tab. An icon in the address bar then signals that a corresponding PWA is installed, but it requires the user to launch it manually. This was the behavior before the navigation capturing update:

After navigation capturing

The following video shows the same user workflow, but now with the new navigation capturing behavior. In this version, clicking the Google Chat link from Google Calendar opens the corresponding chat room directly in the installed PWA. Furthermore, the Google Chat team has implemented Launch Handling by adding a launch_handler attribute to the Web App Manifest. By setting its client_mode to focus-existing, they ensure that the link opens in an existing instance of the PWA, if one is already running. By removing the latency involved in opening a new browser tab and then triggering a page load, the effective 'time to user interactivity' can be, by design, faster. In fact, Google Chat significantly improved the navigation latency by removing the need for a new app launch.

Conclusion and next steps

This article explored the new default navigation capturing behavior available from Chrome 139, focusing on a common use case of a user clicking an HTTPS link within the scope of an installed PWA. You can find more information and use cases in Navigation Management into Installed PWAs. The following diagram shows the full breakdown of use cases, including user events, surfaces and protocols, with their corresponding outcomes:

The different steps described in the article.
Navigation capturing diagram (full version)

Navigation management is a crucial, yet often overlooked, aspect of your app's UX, as it controls its entry point. The features and links covered in this article can help you achieve the best possible app-like experience for your PWA.