Badging for App Icons
What is the Badging API?
The Badging API allows installed web apps to set an application-wide badge, shown in an operating-system-specific place associated with the application (such as the shelf or home screen).
Badging makes it easy to subtly notify the user that there is some new activity that might require their attention, or to indicate a small amount of information, such as an unread count.
Badges tend to be more user-friendly than notifications, and can be updated with a much higher frequency, since they don’t interrupt the user. And, because they don’t interrupt the user, they don't need the user's permission.
Possible use cases
Examples of sites that may use this API include:
- Chat, email, and social apps, to signal that new messages have arrived, or to show the number of unread items.
- Productivity apps, to signal that a long-running background task (such as rendering an image or video) has completed.
- Games, to signal that a player action is required (e.g., in Chess, when it is the player's turn).
Current status
Step | Status |
---|---|
1. Create explainer | Complete |
2. Create initial draft of specification | Complete |
3. Gather feedback & iterate on design | In progress |
4. Origin trial | In progress |
5. Launch | Not started |
See it in action
- Using Chrome 73 or later on Windows or Mac, open the Badging API demo.
- When prompted, click Install to install the app, or use the Chrome menu to install it.
- Open it as an installed PWA. Note, it must be running as an installed PWA (in your task bar or dock).
- Click the Set or Clear button to set or clear the badge from the app icon. You can also provide a number for the Badge value.
Note: While the Badging API in Chrome requires an installed app with an icon that can actually be badged, we advise against making calls to the Badging API dependent on the install state. The Badging API can apply to anywhere a browser might want to show a badge, so developers shouldn’t make any assumptions about situations where the browser will display them. Just call the API when it exists. If it works, it works. If not, it simply doesn’t.
How to use the Badging API
Starting in Chrome 73, the Badging API is available as an origin trial for Windows (7+) and macOS.
Origin trials allow you to try out new features and give feedback on usability, practicality, and effectiveness to us, and the web standards community. For more information, see the Origin Trials Guide for Web Developers.
Note: Android is not supported because it requires you to show a notification, though this may change in the future. Chrome OS support is pending implementation of badging on the platform.
Register for the origin trial
- Request a token for your origin.
- Add the token to your pages, there are two ways to provide this token on
any pages in your origin:
- Add an
origin-trial
<meta>
tag to the head of any page. For example, this may look something like:<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
- If you can configure your server, you can also provide the token on pages
using an
Origin-Trial
HTTP header. The resulting response header should look something like:Origin-Trial: TOKEN_GOES_HERE
- Add an
Alternatives to the origin trial
If you want to experiment with the Badging API locally, without an origin trial,
enable the #enable-experimental-web-platform-features
flag in chrome://flags
.
Using the Badging API during the origin trial
Dogfood: During the origin trial, the API will be available via
window.ExperimentalBadge
. The code below is based on the current design,
and will change before it lands in the browser as a standardized API.
To use the Badging API, your web app needs to meet Chrome’s installability criteria, and users must add it to their home screens.
The ExperimentalBadge
interface is a member object on window
. It contains
two methods:
set([number])
: Sets the app's badge. If a value is provided, set the badge to the provided value otherwise, display a plain white dot (or other flag as appropriate to the platform).clear()
: Removes app's badge.
For example:
// In a web page
const unreadCount = 24;
window.ExperimentalBadge.set(unreadCount);
ExperimentalBadge.set()
and ExperimentalBadge.clear()
can be called from
a foreground page, or potentially in the future, a service worker. In either
case, it affects the whole app, not just the current page.
In some cases, the OS may not allow the exact representation of the badge, in this case, the browser will attempt to provide the best representation for that device. For example, while the Badging API isn’t supported on Android, Android only ever shows a dot instead of a numeric value.
Note: Don’t assume anything about how the user agent wants to display the badge.
We expect some user agents will take a number like "4000" and rewrite it as
"99+". If you saturate the badge yourself (for example by setting it to "99")
then the "+" won’t appear. No matter the actual number, just set
Badge.set(unreadCount)
and let the user agent deal with displaying it
accordingly.
Feedback
We need your help to ensure that the Badging API works in a way that meets your needs and that we’re not missing any key scenarios.
We’re also interested to hear how you plan to use the Badging API:
- Have an idea for a use case or an idea where you'd use it?
- Do you plan to use this?
- Like it, and want to show your support?
Share your thoughts on the Badging API WICG Discourse discussion.
Helpful Links
- Public explainer
- Badging API Demo | Badging API Demo source
- Tracking bug
- ChromeStatus.com entry
- Request an origin trial token
- How to use an origin trial token
- Blink Component:
UI>Browser>WebAppInstalls