Learn Measure Blog About
mobile device with app panel open

Is your native app installed? getInstalledRelatedApps() will tell you!

The getInstalledRelatedApps() method allows your web app to check whether your native app is installed on a user's device, and vice versa.

Pete LePage
Pete LePage

This API is part of the capabilities project.

What is the getInstalledRelatedApps() API?

A web app using getInstalledRelatedApps() to determine if its related native app is already installed.

As the capability gap between web and native gets smaller, it gets easier to offer the same experience for both web and native users. This may lead to cases where users have both web and native versions of the same app installed on the same device. Apps should be able to detect this situation.

The getInstalledRelatedApps() method allows your web app to check if your native app is installed on a user's device, and vice versa. With getInstalledRelatedApps(), you can disable some functionality of one app if it should be provided by the other app instead.

If getInstalledRelatedApps() looks familiar, it is. The Chrome team originally announced this feature in April 2017, when it first went through its first origin trial. After the origin trial ended, they took stock of the feedback and iterated on the design.

Suggested use cases

  • Checking for the native version of an app and switching to it
  • Disabling notifications in the web app when the native app is installed
  • Not prompting users to install the web app if the native app is installed

Current status

Step Status
1. Create explainer Complete
2. Create initial draft of specification Complete
3. Gather feedback and iterate on design Complete
4. Origin trial Complete
5. Launch Chrome 80

See it in action

  1. Using Chrome 79 or later on Android, open the getInstalledRelatedApps() demo.
  2. Install the demo app from the Play store and refresh the demo page. You should now see the app listed.

How to use getInstalledRelatedApps()

To use getInstalledRelatedApps(), you must first create a relationship between between the web and native versions of your app. This relationship prevents other apps from using the API to detect if your app is installed and prevents sites from collecting information about the apps you have installed on your device.

Define the relationship to your native app

In your web app manifest, add a related_applications property. The related_applications property is an array containing an object for each app that you want to detect. Each app object includes:

  • The platform on which the app is hosted
  • The unique identifier for your app on that platform
  • The URL where your app is hosted (optional)

For example:


"related_applications": [{
"platform": "play",
"id": "<package-name>",
"url": "https://example.com",


The url property is optional, and the API works fine without it. On Android, the platform value must be play. On other devices, the platform value will be different.

Define the relationship to your web app

Each platform has its own method of verifying a relationship. On Android, the Digital Asset Links system defines the association between a website and an application. On other platforms, the way you define the relationship will differ slightly.

In AndroidManifest.xml, add an asset statement that links back to your web app:


<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />


Then, in strings.xml, add the following asset statement, updating site with your domain. Be sure to include the escaping characters.

<string name="asset_statements">
\"relation\": [\"delegate_permission/common.handle_all_urls\"],
\"target\": {
\"namespace\": \"web\",
\"site\": \"https://example.com\"

Test for the presence of your native app

Once you've updated your native app and added the appropriate fields to the web app manifest, add code to check for the presence of your native app to your web app. Calling navigator.getInstalledRelatedApps() returns a promise that resolves with an array of your apps that are installed on the user's device.

.then((relatedApps) => {
relatedApps.forEach((app) => {
console.log(app.id, app.platform, app.url);

Like most other powerful web APIs, the getInstalledRelatedApps() API is only available when served over HTTPS.


Did you find a bug with Chrome's implementation? Or is the implementation different from the spec?

  • File a bug at https://new.crbug.com. Include as much detail as you can, provide simple instructions for reproducing the bug, and enter Mobile>WebAPKs in the Components box. Glitch works great for sharing quick and easy repros.

Show support for the API

Are you planning to use the getInstalledRelatedApps() API? Your public support helps the Chrome team to prioritize features and shows other browser vendors how critical it is to support them.

  • Share how you plan to use the API on the WICG Discourse thread.
  • Send a Tweet to @ChromiumDev with the #getInstalledRelatedApps hashtag and let us know where and how you're using it.

Helpful links

Last updated: Improve article