![Demián Renzulli](https://web.dev/images/authors/demianrenzulli.jpg) Demián Renzulli [X](https://twitter.com/drenzulli) [GitHub](https://github.com/demianrenzulli) ![Dan Murphy](https://web.dev/images/authors/danmurphy.jpg) Dan Murphy [X](https://twitter.com/danity_project) [LinkedIn](https://www.linkedin.com/in/daniel-murphy-09961314) ![Dibyajyoti Pal](https://web.dev/images/authors/dibyajyotipal.jpg) Dibyajyoti Pal [LinkedIn](https://www.linkedin.com/in/dpal1996) ![Vincent Scheib](https://web.dev/images/authors/vincentscheib.jpg) Vincent Scheib [LinkedIn](https://www.linkedin.com/in/vincentscheib)

<br />


Published: August 19, 2025

<br />

*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](https://developer.chrome.com/docs/capabilities/pwa-navigation-management#developer-controls) section shares how
to customize navigation to deliver the best possible launching experience for
your PWA.
Prefer to watch a video? Check out [Navigation management in PWAs: Techniques and best practices](https://www.youtube.com/watch?v=OFH9TfrqZCY) on YouTube.

## 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.](https://developer.chrome.com/static/docs/capabilities/pwa-navigation-management/image/fig1.png) The new navigation capturing behavior that prioritizes launching installed PWAs is available from Chrome 139.

## The navigation management process

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.
![](https://developer.chrome.com/static/docs/capabilities/pwa-navigation-management/image/fig2.png) 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.
![](https://developer.chrome.com/static/docs/capabilities/pwa-navigation-management/image/fig3.png) The user clicks on a link to [chat.google.com](https://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](https://developer.chrome.com/docs/capabilities/pwa-navigation-management/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](https://developer.mozilla.org/docs/Web/Progressive_web_apps/Manifest/Reference/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](https://developer.chrome.com/docs/capabilities/pwa-navigation-management#launch-handler-api), covered next.

The following diagram summarizes this process:
![image](https://developer.chrome.com/static/docs/capabilities/pwa-navigation-management/image/fig4.png) 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.](https://developer.chrome.com/static/docs/capabilities/pwa-navigation-management/image/fig5.png) 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](https://developer.chrome.com/docs/web-platform/launch-handler).

### 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](https://developer.chrome.com/docs/web-platform/best-practices/url-protocol-handler),
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](https://developer.chrome.com/docs/capabilities/scope-extensions) (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.

## Use-case: Capturing Google Chat links in the Chat PWA

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](https://goo.gle/navigation-capturing).
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.](https://developer.chrome.com/static/docs/capabilities/pwa-navigation-management/image/fig6.png) 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.