Testing

Web Serial API: Browser Support, Features, Limits

The Web Serial API works in Chrome 89+, Edge 89+, and Opera 76+ on desktop, plus Chrome 148 beta on Android. Safari and stable Firefox do not support it.

Author

Prince Dewani

May 1, 2026

The Web Serial API is a JavaScript API from the Web Platform Incubator Community Group at the W3C that lets web pages talk to serial devices over USB, Bluetooth, and physical RS-232 ports. It supports Chrome 89+, Edge 89+, and Opera 76+ on desktop, while Chrome 148 beta added Android support in April 2026, and Safari, Samsung Internet, and stable Firefox releases do not support it.

This guide covers what the Web Serial API is, which browsers support it, the key features, how to connect to a serial device, and the known issues to plan around before shipping.

What is the Web Serial API?

The Web Serial API is a JavaScript API on the navigator.serial object that lets a web page open a bidirectional channel with a serial device. The Web Platform Incubator Community Group at the W3C edits the spec, with Reilly Grant at Google as editor. Chrome 89 first shipped the API in March 2021 to let web apps talk to Arduinos, microcontrollers, 3D printers, and other hardware that uses a serial port over USB or Bluetooth.

Which browsers does the Web Serial API support?

Chromium-based desktop browsers ship the Web Serial API by default, while Safari, stable Firefox, Samsung Internet, and most mobile browsers leave it out, so global browser support sits at about 72% as of April 2026.

Loading browser compatibility data...

Web Serial API compatibility in Chrome

Chrome supports the Web Serial API from Chrome 89, released March 2, 2021, on Windows, macOS, Linux, and ChromeOS. Chrome 78 to 88 had it disabled by default behind the chrome://flags/#enable-experimental-web-platform-features flag. Chrome 4 to 77 did not support it. Chrome 148 beta added Android support in April 2026.

Web Serial API compatibility in Edge

Microsoft Edge supports the Web Serial API from Edge 89, released March 4, 2021, on Windows, macOS, and Linux. Edge 79 to 88 had the API behind the Chromium experimental web platform features flag. Pre-Chromium EdgeHTML 12 to 78 never added support. Admins can gate the API by URL with the SerialAskForUrls policy.

Web Serial API compatibility in Firefox

Firefox does not support the Web Serial API in stable releases on Windows, macOS, Linux, or Android. Firefox Nightly 151 added experimental Web Serial behind an add-on-gated flag in April 2026, reversing Mozilla's earlier harmful standards position. The feature is not yet on by default in any channel.

Web Serial API compatibility in Safari

Safari does not support the Web Serial API on macOS, iPadOS, or iOS in any version, including iOS 26.5. Apple WebKit has an opposed position on the spec, citing fingerprinting concerns, so a stable Safari release is unlikely soon.

Web Serial API compatibility in Opera

Opera supports the Web Serial API from Opera 76, released April 14, 2021, on Windows, macOS, and Linux, and tracks every Chromium release after that. Opera 65 to 75 had the API disabled by default. Opera 9 to 64 did not support it. Opera Mobile and Opera Mini do not expose Web Serial in any version.

Web Serial API compatibility in Samsung Internet

Samsung Internet does not support the Web Serial API on Galaxy phones or tablets. Samsung Internet is built on Chromium, but Samsung disables the Web Serial feature flag in its Android builds. There is no setting inside the app that turns it on.

Web Serial API compatibility in Android Browser

Chrome on Android shipped Web Serial in Chrome 148 beta in April 2026, but Firefox for Android and the stock Android Browser still do not support it. Chrome for Android 4 to 147 did not expose navigator.serial. Wrap a serial-aware web app in a Trusted Web Activity for broader coverage.

Web Serial API compatibility in Internet Explorer

Internet Explorer does not support the Web Serial API in any version. The API depends on Chromium device service plumbing that EdgeHTML and Trident never had. Move serial-dependent web apps to Chromium-based Edge or Chrome for any new work.

What are the key features of the Web Serial API?

The Web Serial API gives a web page low-level access to serial input and output streams without a native driver, while keeping the user in control of every device handshake. The main features focus on permissions, stream-based I/O, and event-based device updates.

  • navigator.serial.requestPort: Pops a browser device chooser on a click. The user picks a port from a filter of USB vendor and product IDs, and the page only sees the device the user chose.
  • navigator.serial.getPorts: Returns ports the user has already approved for the origin. The page never gets a free pass to enumerate hardware.
  • SerialPort.open and SerialPort.close: Open and close the port. The open call takes baud rate plus optional data bits, stop bits, parity, flow control, and buffer size.
  • SerialPort.readable and SerialPort.writable: Show the port as a ReadableStream and WritableStream, so pages chain TransformStream pipelines to decode text or parse frames.
  • SerialPort.setSignals and SerialPort.getSignals: Drive and read DTR, RTS, RI, DSR, and CD control lines for manual hardware flow control.
  • connect and disconnect events: Fire on navigator.serial when an approved port is plugged in or unplugged, so pages react to cable changes without polling.
  • SerialPort.forget: Revokes the page's permission for that port. Chrome 103 added this method.
  • BYOB readers: Chrome 106 added Bring-Your-Own-Buffer reader support, letting pages reuse a Uint8Array across reads to cut allocation pressure.
...

How do you connect to a serial device with the Web Serial API?

You connect to a serial device by feature-detecting navigator.serial, calling requestPort from a user gesture, opening the port at the right baud rate, and reading from port.readable. Every step has to run on a click or keypress because requestPort requires user activation.

Use the filters argument to narrow the chooser to your hardware. A filter can match usbVendorId and usbProductId, and the browser shows every device that matches at least one filter.

Paste this snippet into the DevTools console of Chrome, Edge, or Opera. Click anywhere on the page once and the device chooser opens.

// Paste this into the DevTools console of Chrome, Edge, or Opera to detect Web Serial and open a port.
if ("serial" in navigator) {
  console.log("Web Serial API is available.");

  document.body.addEventListener("click", async () => {
    const port = await navigator.serial.requestPort();
    await port.open({ baudRate: 9600 });
    console.log("Opened port at 9600 baud:", port.getInfo());

    const reader = port.readable.getReader();
    try {
      const { value, done } = await reader.read();
      if (done) return;
      console.log("Got bytes:", new Uint8Array(value));
    } finally {
      reader.releaseLock();
    }
  }, { once: true });
} else {
  console.log("Web Serial API is not supported in this browser.");
}

If the console prints "Web Serial API is not supported in this browser", you are on Safari, stable Firefox, Samsung Internet, or a mobile browser. Fall back to a native helper app or a Trusted Web Activity for those visitors.

Note

Note: The Web Serial API breaks across Safari, stable Firefox, and most mobile browsers. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the known issues with the Web Serial API?

The Web Serial API has a small browser footprint, and most sharp edges sit at the boundary between the page and the host OS. Painful cases tend to land on Mozilla's harmful position, Apple's opposed stance, mobile gaps, and the user-gesture rule.

  • Stable Firefox does not support it: Firefox Nightly 151 added an add-on-gated build in April 2026, but stable Firefox 153 still has no Web Serial. Guide Firefox users to Chrome or Edge.
  • WebKit calls the spec harmful: Apple has an opposed standards position citing fingerprinting risk. Safari on macOS, iPadOS, and iOS lack support in every version, so iPad and iPhone visitors need a native app.
  • Mobile coverage is thin: Chrome 148 Android shipped in beta in April 2026. Firefox for Android, Samsung Internet, and Opera Mobile do not support it.
  • requestPort must run on a user gesture: Chrome throws a SecurityError if you call requestPort from a setTimeout, fetch callback, or page-load handler. Wire it to a click or keypress.
  • One tab owns the port: Once a tab opens a port, no other tab can open it until the first tab calls close. Plan UX so two pages do not race onto the same Arduino.
  • HTTPS only: navigator.serial is undefined on http:// pages outside of localhost. Ship over HTTPS or use mkcert for local development.
  • Bluetooth ports need OS pairing first: The browser only sees Bluetooth serial devices the OS has already paired. Pair the device in Windows, macOS, or ChromeOS settings first.
  • BYOB readers and forget arrived late: SerialPort.forget needs Chrome 103+, BYOB readers need Chrome 106+. Older Chromium builds may lack these even though they ship the base API.

In my experience, the trickiest failure is the user-gesture rule paired with React. A useEffect that calls requestPort on mount throws every time, because the browser loses the activation token before the effect runs. Wire requestPort to an onClick handler on a real button and the issue disappears.

...

Citations

All Web Serial API version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests