├── .pr-preview.json ├── tidyconfig.txt ├── LICENSE.md ├── w3c.json ├── .github ├── CODE_OF_CONDUCT.md ├── workflows │ ├── tidy.yml │ └── auto-publish.yml ├── PULL_REQUEST_TEMPLATE.md └── CONTRIBUTING.md ├── ECHIDNA ├── README.md ├── images ├── monochrome-icon-tinted.svg ├── monochrome-icon-plain.svg ├── monochrome-icon-gradient.svg ├── icon-mask-windows.svg ├── icon-safe-zone.svg ├── icon-mask-android-circle.svg ├── icon-mask-android-roundsquare.svg ├── icon-mask-ios.svg ├── icon-mask-android-squircle.svg ├── icon-plain.svg ├── independent_policies.svg ├── manifest-src-directive.svg └── safe-zone.svg └── explainer.md /.pr-preview.json: -------------------------------------------------------------------------------- 1 | { 2 | "src_file": "index.html", 3 | "type": "respec" 4 | } 5 | -------------------------------------------------------------------------------- /tidyconfig.txt: -------------------------------------------------------------------------------- 1 | char-encoding: utf8 2 | indent: yes 3 | indent-spaces: 2 4 | wrap: 80 5 | tidy-mark: no 6 | custom-tags: yes 7 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | All documents in this Repository are licensed by contributors 2 | under the 3 | [W3C Software and Document License](https://www.w3.org/Consortium/Legal/copyright-software). -------------------------------------------------------------------------------- /w3c.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": [ 3 | "114929" 4 | ], 5 | "contacts": [ 6 | "siusin" 7 | ], 8 | "shortName": "manifest", 9 | "repo-type": "rec-track" 10 | } 11 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | All documentation, code and communication under this repository are covered by the [W3C Code of Ethics and Professional Conduct](https://www.w3.org/Consortium/cepc/). 4 | -------------------------------------------------------------------------------- /ECHIDNA: -------------------------------------------------------------------------------- 1 | index.html?specStatus=WD&shortName=appmanifest respec 2 | images/manifest-src-directive.svg 3 | images/icon-mask-android-circle.svg 4 | images/icon-mask-android-roundsquare.svg 5 | images/icon-mask-android-squircle.svg 6 | images/icon-mask-ios.svg 7 | images/icon-mask-windows.svg 8 | images/icon-plain.svg 9 | images/icon-safe-zone.svg 10 | images/safe-zone.svg 11 | images/monochrome-icon-gradient.svg 12 | images/monochrome-icon-plain.svg 13 | images/monochrome-icon-tinted.svg 14 | -------------------------------------------------------------------------------- /.github/workflows/tidy.yml: -------------------------------------------------------------------------------- 1 | name: Tidy document 2 | on: 3 | workflow_dispatch: {} 4 | push: 5 | branches: 6 | - main 7 | paths: 8 | - index.html 9 | 10 | jobs: 11 | tidy: 12 | name: Tidy up 13 | runs-on: macos-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | - run: brew install tidy-html5 17 | - run: tidy -config tidyconfig.txt -o index.html index.html 18 | - uses: peter-evans/create-pull-request@v6 19 | with: 20 | title: "Tidied up document using tidy-html5" 21 | commit-message: "chore: tidy up index.html" 22 | branch: html-tidy 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This repository is the home of the :star: **[Web Application Manifest](https://www.w3.org/TR/appmanifest/)** :star: specification being worked on by 2 | the [Web Applications Working Group](https://www.w3.org/2019/webapps/). 3 | 4 | ## Useful links 5 | * [Explainer](https://github.com/w3c/manifest/blob/gh-pages/explainer.md) 6 | * [The Web Application Manifest specification](https://www.w3.org/TR/appmanifest/) 7 | * [Manifest incubations](https://github.com/WICG/manifest-incubations) 8 | * [App Information supplement](https://github.com/w3c/manifest-app-info) 9 | * [Use cases and requirements](https://w3c-webmob.github.io/installable-webapps/) 10 | * [The Web Applications WG homepage](https://www.w3.org/2019/webapps/) 11 | -------------------------------------------------------------------------------- /.github/workflows/auto-publish.yml: -------------------------------------------------------------------------------- 1 | name: Node CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: {} 8 | 9 | jobs: 10 | validate-and-publish: 11 | name: Validate and Publish 12 | runs-on: ubuntu-latest # only linux supported at present 13 | steps: 14 | - uses: actions/checkout@v2 15 | - uses: w3c/spec-prod@v2 16 | with: 17 | TOOLCHAIN: respec 18 | VALIDATE_LINKS: false 19 | VALIDATE_PUBRULES: false 20 | GH_PAGES_BRANCH: gh-pages 21 | W3C_API_KEY: ${{ secrets.W3C_API_KEY }} 22 | W3C_ECHIDNA_TOKEN: ${{ secrets.ECHIDNA_TOKEN }} 23 | W3C_WG_DECISION_URL: "https://lists.w3.org/Archives/Public/public-webapps/2014JulSep/0627.html" 24 | W3C_NOTIFICATIONS_CC: "${{ secrets.CC }}" 25 | W3C_BUILD_OVERRIDE: | 26 | specStatus: WD 27 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Closes #??? 2 | 3 | This change (choose at least one, delete ones that don't apply): 4 | 5 | * Breaks existing normative behavior (please add label "breaking") 6 | * Adds new normative requirements 7 | * Adds new normative recommendations or optional items 8 | * Makes editorial changes (changes informative sections, or changes normative sections without changing behavior) 9 | * Is a "chore" (metadata, formatting, fixing warnings, etc). 10 | 11 | Implementation commitment (delete if not making normative changes): 12 | 13 | * [ ] WebKit (https://bugs.webkit.org) 14 | * [ ] Chromium (https://bugs.chromium.org/) 15 | * [ ] Gecko (http://bugzilla.mozilla.org) 16 | 17 | If change is normative, and it adds or changes a member: 18 | 19 | * [ ] [updated JSON schema](https://github.com/SchemaStore/schemastore/blob/master/src/schemas/json/web-manifest.json) 20 | 21 | Commit message: 22 | 23 | (Fill in. If making normative changes, describe exactly what the behavioral 24 | difference will be.) 25 | 26 | Person merging, please make sure that commits are squashed with one of the following as a commit message prefix: 27 | 28 | * chore: 29 | * editorial: 30 | * BREAKING CHANGE: 31 | * And use none if it's a normative change 32 | -------------------------------------------------------------------------------- /images/monochrome-icon-tinted.svg: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /images/monochrome-icon-plain.svg: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /images/monochrome-icon-gradient.svg: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Everyone is welcome to contribute to this specification. 4 | 5 | Any simple editorial contribution can simply be done with a GitHub Pull Request. 6 | You can even do an inline edit of the file on GitHub. 7 | 8 | For more substantial contributions, please first [file an issue](https://github.com/w3c/manifest/issues/new) here on Github. 9 | 10 | Note: Contributions to this repository are intended to become part of Recommendation-track documents governed by the 11 | [W3C Patent Policy](https://www.w3.org/Consortium/Patent-Policy-20040205/) and 12 | [Software and Document License](https://www.w3.org/Consortium/Legal/copyright-software). To make substantive contributions to specifications, you must either participate 13 | in the relevant W3C Working Group or make a non-member patent licensing commitment. 14 | 15 | If you are not the sole contributor to a contribution (pull request), please identify all 16 | contributors in the pull request comment. 17 | 18 | To add a contributor (other than yourself, that's automatic), mark them one per line as follows: 19 | 20 | ``` 21 | +@github_username 22 | ``` 23 | 24 | If you added a contributor by mistake, you can remove them in a comment with: 25 | 26 | ``` 27 | -@github_username 28 | ``` 29 | 30 | If you are making a pull request on behalf of someone else but you had no part in designing the 31 | feature, you can remove yourself with the above syntax. 32 | 33 | 34 | # Style guide to contributors 35 | 36 | - the spec uses [ReSpec](https://www.w3.org/respec/) 37 | - the spec is tidied using [HTML5 Tidy](https://github.com/w3c/tidy-html5). For 38 | instructions on running HTML5 tidy, see below. 39 | - put comments in front of sections, for better readability with 40 | syntax coloring editors. 41 | 42 | 43 | # Running HTML5 Tidy 44 | 45 | Please make sure you have HTML5 tidy installed, instead of 46 | the the one that ships with *nix systems. You can confirm this by running: 47 | 48 | ```bash 49 | tidy --version #HTML Tidy for HTML5 (experimental) for ... 50 | ``` 51 | 52 | Once you have confirmed (make sure you have committed your changes before 53 | running tidy, as the changes are destructive ... in a good way:)): 54 | 55 | ```bash 56 | tidy -config tidyconfig.txt -o index.html index.html 57 | ``` 58 | -------------------------------------------------------------------------------- /images/icon-mask-windows.svg: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /images/icon-safe-zone.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /images/icon-mask-android-circle.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /images/icon-mask-android-roundsquare.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /images/icon-mask-ios.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /images/icon-mask-android-squircle.svg: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /images/icon-plain.svg: -------------------------------------------------------------------------------- 1 | 25 | -------------------------------------------------------------------------------- /images/independent_policies.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /images/manifest-src-directive.svg: -------------------------------------------------------------------------------- 1 | 2 | 76 | -------------------------------------------------------------------------------- /images/safe-zone.svg: -------------------------------------------------------------------------------- 1 | 37 | -------------------------------------------------------------------------------- /explainer.md: -------------------------------------------------------------------------------- 1 | ## Manifest? Eh? What? Why? 2 | 3 | [Many of us](https://github.com/w3c/manifest/graphs/contributors) who work on the web are actively working to narrow "the gap" between native applications and web applications. 4 | 5 | But what is that gap? Just a few years ago, that gap was largely technological. If you wanted access to a device’s GPS, you had to write a native app. Nowadays, the situation is improving somewhat: we can now access devices' sensors like GPS, camera, and orientation sensors – though we still have a long way to go. Thanks to recent advances in the web platform we now have a platform that can compete with native applications on a more equal footing. 6 | 7 | Nowadays, the primary gaps between native and web is not so much technological. It’s user experience. Users prefer to install apps, which live snugly on the homescreen (or possibly even the desktop, on desktop-class browsers). 8 | 9 | Furthermore, native apps work offline by default, and integrate with the facilities provided by the underlying operating system: consider being able to see installed applications in the task switcher. Or being able to control an app’s privacy settings in the same place as apps installed from an app store. In browser land, we are still fumbling around trying to find opened tabs and having to type long and boring URLs to get anything done. 10 | 11 | What we need is a method of "installing" web apps so they are indistinguishable from any other app installed on a user’s device. But at the same time, we don’t want to lose the powerful features that are central to the web platform: linkability, view source, and the ability to host our own stuff. 12 | 13 | This is generally what we, in the web community, refer to as a "[progressive web app](https://en.wikipedia.org/wiki/Progressive_web_app)". 14 | 15 | ## What is "installation"? 16 | 17 | At its most basic, "installation" of a web app means "bookmarking" the web application to the homescreen or adding it to an application launcher. There are some pretty obvious things that you, as a developer, would need to provide to the browser so that it can treat your website as an app: the name, icons, etc. There are then more advanced features that you would need, like being able to indicate the preferred orientation and if you want your app to be fullscreen. 18 | 19 | The Manifest specification aims to give you a standardised way to do this using JSON. In the HTML page to be "installed", simply link to a manifest file, thus: 20 | 21 | ```HTML 22 | 23 | ``` 24 | 25 | But what’s in this mysterious manifest file? Glad you asked! 26 | 27 | ## A very simple manifest 28 | 29 | A very simple manifest might just include a name and one or more icons. 30 | 31 | ```JSON 32 | { 33 | "name": "Super Racer 3000", 34 | "icons": [{ 35 | "src": "icon/lowres.png", 36 | "sizes": "64x64" 37 | }] 38 | } 39 | ``` 40 | 41 | ## A typical manifest 42 | 43 | A typical manifest might look something like the following. The names of the members should be fairly self evident, but we describe their usage in detail below. 44 | 45 | ```JSON 46 | { 47 | "lang": "en", 48 | "dir": "ltr", 49 | "name": "Super Racer 3000", 50 | "description": "The ultimate futuristic racing game from the future!", 51 | "short_name": "Racer3K", 52 | "icons": [{ 53 | "src": "icon/lowres.webp", 54 | "sizes": "64x64", 55 | "type": "image/webp" 56 | },{ 57 | "src": "icon/lowres.png", 58 | "sizes": "64x64" 59 | }, { 60 | "src": "icon/hd_hi", 61 | "sizes": "128x128" 62 | }], 63 | "scope": "/racer/", 64 | "start_url": "/racer/start.html", 65 | "display": "fullscreen", 66 | "orientation": "landscape", 67 | "theme_color": "aliceblue", 68 | "background_color": "red", 69 | "screenshots": [{ 70 | "src": "screenshots/in-game-1x.jpg", 71 | "sizes": "640x480", 72 | "type": "image/jpeg" 73 | },{ 74 | "src": "screenshots/in-game-2x.jpg", 75 | "sizes": "1280x920", 76 | "type": "image/jpeg" 77 | }] 78 | } 79 | ``` 80 | 81 | ## Application name 82 | 83 | The application needs a real name or set of names (which is usually not the same as the title element of a document). For this you use the `name` and the `short_name` members. 84 | 85 | ```JSON 86 | { 87 | "name": "My totally awesome photo app", 88 | "short_name": "Photos" 89 | } 90 | ``` 91 | 92 | The `short_name` serves as the name for the application when displayed in contexts with constrained space (e.g., under an icon on the homescreen of a phone). 93 | The `name` can then be a bit longer, fully capturing the name of the application. 94 | This also provides an alternative way for users to search your app on their phone. 95 | So, typing ‘awesome’ or ‘photo’ would find the application on a user’s device. 96 | 97 | If you omit the name, the browser can fall back to using ``, and failing that, the `