# PWAs on Samsung Internet

> How Samsung Internet installs PWAs: the manual Add to Home screen menu and the ambient-badging plus icon triggered by a standalone or fullscreen manifest.

**In one line:** per Samsung Internet's own developer documentation, the browser
supports installing a PWA through a manual "Add shortcut on Home screen" menu
item, and separately shows a "+" ambient-badging icon in the URL bar when it
detects an installable PWA whose manifest `display` is `standalone` or
`fullscreen`.

## Where it is supported

Samsung Internet's developer docs describe two related but distinct install
signals rather than one:

- **Manual add.** The user can open the menu and choose "Add shortcut on Home
  screen"; if the manifest declares icons, "the chosen icon will appear on the
  home screen along with the chosen short name."
- **Ambient badging.** Samsung's docs state Samsung Internet "will dynamically
  display a plus icon in the URL bar" when it detects a PWA, and that this "+"
  icon "requires that the web app will be displayed as a standalone app,
  without the URL bar" — i.e. the manifest's `display` member set to
  `standalone` or `fullscreen`. Web App Manifest support itself "arrived in
  Samsung Internet v4," and ambient badging "was introduced in Samsung Internet
  5.2."
- **Samsung DeX.** The docs also state that "in Samsung Internet running on
  Samsung DeX, web apps can be added to the desktop."

## How to use it

```json
{
  "name": "My App",
  "short_name": "App",
  "display": "standalone",
  "icons": [{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }]
}
```

## How to detect it at runtime

Samsung's documentation does not describe a JavaScript API, event, or property
for querying whether the ambient-badging icon is currently shown, or for
triggering the manual "Add shortcut" menu item programmatically. Separately,
per MDN, the CSS `display-mode` media feature "can be used to test whether a
web app is being displayed in a normal browser tab or in some alternative way,
such as a standalone app or fullscreen mode." MDN also notes that the
`fullscreen` value matches when the page "has been put in fullscreen mode by
the Fullscreen API or by using the `fullscreen` value of the `display` member
of the Web App Manifest" — so an ordinary web page that calls the Fullscreen
API on its own can match `(display-mode: fullscreen)` too, which makes that
value unreliable as an install signal on its own. The check below only treats
`standalone` as an install indicator for that reason:

```js
function isRunningInstalled() {
  if (!('matchMedia' in window)) {
    // Fallback: no way to query display-mode here; assume not installed.
    return false;
  }
  // Only `standalone` is used here: `fullscreen` also matches a plain web
  // page that entered fullscreen through the Fullscreen API, so matching it
  // would misreport an uninstalled page as installed.
  return window.matchMedia('(display-mode: standalone)').matches;
}

if (!isRunningInstalled()) {
  // Show in-page copy pointing at the browser's own menu, since there is no
  // documented way to detect or trigger Samsung Internet's install UI directly.
  document.getElementById('install-hint').hidden = false;
}
```

## Practical checklist

- Set the manifest `display` to `standalone` or `fullscreen` — per Samsung's
  docs, ambient badging's plus icon depends on this value.
- Provide manifest `icons` for the manual "Add shortcut on Home screen" path —
  per the docs, that icon (and the chosen short name) is what appears on the
  home screen.
- A registered service worker does not by itself mean the page is cached for
  offline use. Samsung's docs describe a service worker as "like a network
  proxy that runs in your browser" that "could return a response from a cache"
  — offline caching only happens if your fetch handler actually implements it.
- Serve over HTTPS — per Samsung's docs, "Service Workers are restricted to
  secure contexts."
- Don't assume the ambient-badging icon and the manual home-screen menu item
  are the same signal — Samsung's docs describe them as two separate paths to
  installation.

## Where to go next

- [PWAs on Chrome and Android (WebAPK, TWA)](/reference/platforms/chrome-android/) —
  another Chromium-based install flow with its own manifest-driven UI.
- [Service Worker caching strategies](/reference/service-worker/caching-strategies/) —
  the caching behavior a service worker only provides once you implement it in
  a fetch handler.