![Pete LePage](https://web.dev/images/authors/petelepage.jpg) Pete LePage [X](https://twitter.com/petele) [GitHub](https://github.com/petele) [Mastodon](https://techhub.social/@petele) [Homepage](https://petelepage.com/)

<br />

Chrome 89 is rolling out to stable now.

[Video](https://www.youtube.com/watch?v=O-gv6zLZHKw)

Here's what you need to know:

- [WebHID, WebNFC, and Web Serial](https://developer.chrome.com/blog/new-in-chrome-89.md.txt#hardware) have graduated from their origin trials and are now available in stable.
- We're closing a loophole a few developers used to skirt the [PWA installability checks](https://developer.chrome.com/blog/new-in-chrome-89.md.txt#installability).
- [Web Share, and Web Share Target](https://developer.chrome.com/blog/new-in-chrome-89.md.txt#webshare) arrive on the desktop.
- And, there's [plenty more](https://developer.chrome.com/blog/new-in-chrome-89.md.txt#more).

I'm [Pete LePage](https://petelepage.com/), working, and shooting
from home, let's dive in and see what's new for developers in Chrome 89!

## WebHID, WebNFC, and Web Serial

I'm really excited about WebHID, WebNFC, and Web Serial. They open up new
scenarios for users that were never possible before, interacting with real
world hardware.

They allow makers to connect to fun, quirky hardware, video conferencing apps
to use the dedicated telephony buttons on specialized speakers. Or any number
of other use cases.

Using Web Serial, and about 60 lines of code,
[@AndreBan](https://twitter.com/andreban/status/1355212228618813440) created a page that can interact with
the MicroPython REPL on a [Raspberry Pi Pico](https://www.raspberrypi.org/products/raspberry-pi-pico/). Web Serial is also
used by Espruino in their [web based IDE](https://www.espruino.com/ide/).

At CDS 2019, Francois wrote a fun, memory-style game using Web NFC.
You had to tap the phone to the right card, in the right order.

![StreamDeck with Daft Punk Drum Pad](https://developer.chrome.com/static/blog/new-in-chrome-89/image/streamdeck-daft-punk-dru-93cbead6c08b7.png)

And my favorite, [@bramus](https://twitter.com/bramus/status/1360005151394832388) used WebHID to connect to a
StreamDeck, building a [Daft Punk drum pad](https://webhid-elgato-stream-deck-daft-punk-soundboard.netlify.app/). If you don't have
a StreamDeck, check out his [demo video](https://www.youtube.com/watch?v=BcRyAlT5xtg) on YouTube, and
check out the [code on GitHub](https://github.com/bramus/webhid-elgato-stream-deck-daft-punk-soundboard).

Whether it's your site that interacts with your hardware, or your hardware
that can interact with lots of sites, users win because they don't need to
install special drivers, or software.

You can learn more about some of the devices you can connect to at
[web.dev/devices](https://web.dev/explore/devices), or check out the getting started
guides for [WebHID](https://developer.chrome.com/docs/capabilities/hid.md.txt), [WebNFC](https://developer.chrome.com/docs/capabilities/nfc.md.txt),
and [Web Serial](https://developer.chrome.com/docs/capabilities/serial.md.txt).

## PWA installability criteria changes

Offline support has been a key part of the Progressive Web App criteria for
installability since the beginning. As with other installed app, users
expect it to work reliably. It should be fast, and, they should never see
the offline dino!

Later this year, we plan to close a loophole that allowed a few sites to
pass the installability criteria, without an offline experience. **If your
PWA already has an offline experience, you're all set. There's no
action required, but, if you don't, it's time to add one!**

Starting in Chrome 89, if your PWA doesn't provide a valid response when
offline, you'll see a warning in DevTools under the Issues tab, and Lighthouse
will indicate there's an issue. And, enforcement will start in Chrome 93,
later this year.
![DevTools showing warning message in Console.](https://developer.chrome.com/static/blog/new-in-chrome-89/image/devtools-showing-warning-37c8af7e4928c.png) Warning message in the Chrome DevTools Console. ![DevTools showing warning message in Application tab.](https://developer.chrome.com/static/blog/new-in-chrome-89/image/devtools-showing-warning-45a9b6dbf81e3.png) Warning message in Application tab \> Manifest \> Installability.

You can decide what kind of offline experience you want to provide. Ideally,
you should provide as much of your experience as possible. But, at a minimum,
it can be as simple as an [offline fallback page](https://web.dev/offline-fallback-page/).

You can find more details about the change, and why we're making it in
[Improving Progressive Web App offline support detection](https://developer.chrome.com/blog/improved-pwa-offline-detection.md.txt).

If you're not sure where to get started, check out [Workbox](https://developers.google.com/web/tools/workbox). It has
a set of libraries that can power a production-ready service worker for your
PWA. Or, for a simple offline fallback page, the article
[Create an offline fallback page](https://web.dev/offline-fallback-page/) has all the code you
need, and you can copy and paste directly in to your site.

## Web Share and Web Share Target for Desktop

If your site allows users to create, edit, or interact with files, you should
be using the Web Share and Web Share Target APIs. These APIs have been
available on mobile for some time but are now supported on ChromeOS and
Windows.

Web Share makes it possible for users to send files or data to other
installed apps on their device, for example, sharing a photo from Google
Photos to Twitter.

```javascript
async function share(title, text, url) {
  try {
    await navigator.share({title, text, url});
    return true;
  } catch (ex) {
    console.error('Share failed', ex);
    return false;
  }
}
```

To register as a target so other apps can share files or data with you,
you'll want to use the Web Share Target API.

```json
"share_target": {
  "action": "/?share-target",
  "method": "POST",
  "enctype": "multipart/form-data",
  "params": {
    "files": [
      {
        "name": "file",
        "accept": ["image/*"],
      },
    ],
  },
},
```

Check
[Integrate with the OS sharing UI with the Web Share API](https://web.dev/articles/web-share)
and
[Receiving shared data with the Web Share Target API](https://web.dev/articles/web-share-target)
for getting started guides.

## And more

And of course there's plenty more.

Chrome now allows top level `await` within JavaScript modules.

![New omnibox install icon for PWAs](https://developer.chrome.com/static/blog/new-in-chrome-89/image/new-omnibox-install-icon.png)

To reduce confusion for users, we've updated the icon shown in the omnibox for
installable PWAs.

<br />

And, if you've used a Trusted Web Activity to make your PWA available in the
Play Store for ChromeOS, you can sign up for the
[Digital Goods API origin trial](https://developer.chrome.com/blog/new-in-chrome-88.md.txt#play-billing).

## Further reading

This covers only some of the key highlights. Learn more about changes in
Chrome 89.

- [What's new in Chrome DevTools (89)](https://developer.chrome.com/blog/new-in-devtools-89.md.txt)
- [Chrome 89 deprecations \& removals](https://developer.chrome.com/blog/deps-rems-89.md.txt)
- [ChromeStatus.com updates for Chrome 88](https://www.chromestatus.com/features#milestone%3D89)
- [What's new in JavaScript in Chrome 88](https://v8.dev/blog/v8-release-89)
- [Chromium source repository change list](https://chromium.googlesource.com/chromium/src/+log/88.0.4324.98..89.0.4389.75)

## Subscribe

Want to stay up to date with our videos, then [subscribe](https://goo.gl/6FP1a5)
to our [Chrome Developers YouTube channel](https://www.youtube.com/user/ChromeDevelopers/),
and you'll get an email notification whenever we launch a new video.