# description manifest member

> The description member explains what a web app does; Chrome 88 and Edge 88 show it in the richer install dialog, Firefox and Safari parse it and do nothing.

`description` is a single string that says what the web app does. The W3C Application
Information registry defines it as store-listing metadata; Chromium additionally shows it to
the user in the richer install dialog, next to the `screenshots`, and exposes it as the
accessible description of the installed app.

Chrome 88, Edge 88, Samsung Internet 15.0, and Android WebView 88 read the member (BCD
`html.manifest.description`). Firefox 157 and Safari 27 parse it without error and display it
nowhere; on Firefox for Android the property has no effect at all.

## Member

- **Type**: string. Plain text; HTML is not interpreted and line breaks are collapsed in the
  install dialog.
- **Default**: absent. With no `description` Chrome's install dialog shows only the name,
  origin, and icon, and a store listing falls back to whatever text the packager asks for.
- **Example value**: `"Track your habits and build streaks, even offline."`.

A value that is not a string is dropped with the parser's generic message, `property
'description' ignored, type string expected.`. There is no length limit in the format, but
Chrome's install surfaces truncate, and DevTools warns once the string passes 300
characters. Write the first sentence to stand alone.

The member is the default-language text. `description_localized` (see the localization entry)
carries per-language variants keyed by BCP 47 tag; Chromium falls back to `description` when no
variant matches the UI language.

:::observed
Chrome 155 on macOS 26 (English UI), DevTools > Application > Manifest: a `description` of 301
or more characters adds the line `Description may be truncated.` under **Errors and warnings**
(the threshold is `description.length > 300` in DevTools' `AppManifestView.ts`). The
**Identity** section shows the full string under **Description** regardless.
:::

## Examples

Both examples ship the same text; they differ in where it is read.

### Writing a description that survives truncation

Put the differentiator in the first clause and keep the whole string well under 300
characters. The second sentence is safe to lose.

```json
{
  "name": "Habit Ledger",
  "short_name": "Habits",
  "description": "Track daily habits and build streaks, fully offline. Export to CSV, sync when you are back online, no account needed.",
  "screenshots": [
    { "src": "/shots/narrow-1.png", "sizes": "1080x1920", "type": "image/png", "form_factor": "narrow" }
  ]
}
```

Chrome 94 on Android and Chrome 105 on desktop render this text in the richer install dialog
only when at least one screenshot is present; without `screenshots` the plain dialog omits the
description.

### Checking the shipped description from a deployment test

No API reports whether the browser or a store used the text. What a test can do is assert that
the deployed manifest carries a non-empty string within the truncation budget. The fallback
branch handles contexts with no document (a Node test runner).

```js
export async function describedManifest(manifestUrl = '/manifest.webmanifest') {
  const manifest = await fetch(manifestUrl).then((r) => r.json());
  const text = manifest.description;
  if (typeof text !== 'string' || text.trim() === '') {
    return { ok: false, reason: 'description missing' };
  }
  if (text.length > 300) {
    return { ok: false, reason: `description is ${text.length} chars; Chrome truncates past 300` };
  }
  return { ok: true, text };
}
```

Run it against the production URL after each deploy; a CDN that strips or rewrites the
manifest shows up here before it shows up in the install dialog.

## See also

- [categories manifest member](/reference/manifest/categories/)
- [screenshots manifest member](/reference/manifest/screenshots/)
- [lang, dir, and *_localized manifest members](/reference/manifest/localization/)
- [Richer install UI: enriching the install prompt with description and screenshots](/reference/installation/richer-install-ui/)
- [Web App Manifest - Application Information: description member](https://w3c.github.io/manifest-app-info/#description-member) (w3c.github.io)
- [Provide a custom install experience](https://web.dev/articles/customize-install) (web.dev)