Skip to content

manifest: file_handlers support

Published

manifest: file_handlers — The file_handlers member registers an installed PWA with the operating system as a handler for specific file types, so the OS can launch the PWA when the user opens a matching file. The app receives the file via window.launchQueue.

  • Legend
  • Yes
  • Partial
  • Flag
  • No
  • Unknown
Browser / PlatformSupportVersionsConfidenceSourceNotes
Chrome (Desktop)Yes102highsource—
Chrome (Android)No—highsource1
Edge (Desktop)Yes102highsource2
Firefox (Desktop)No—highsource3
Firefox (Android)No—highsource45
Safari (macOS)No—highsource6
Safari (iOS)No—highsource78
Samsung InternetNo—highsource910
WebView (Android)No—highsource1112
  1. No Chrome Android support is recorded in browser-compat-data.
  2. Derived by browser-compat-data mirroring from Chrome.
  3. No Firefox support is recorded in browser-compat-data.
  4. No Firefox for Android support is recorded in browser-compat-data.
  5. Derived by browser-compat-data mirroring from Firefox.
  6. No Safari support is recorded in browser-compat-data.
  7. No Safari on iOS support is recorded in browser-compat-data.
  8. Derived by browser-compat-data mirroring from Safari.
  9. No Samsung Internet support is recorded in browser-compat-data.
  10. Derived by browser-compat-data mirroring from Chrome Android.
  11. No WebView Android support is recorded in browser-compat-data.
  12. Derived by browser-compat-data mirroring from Chrome Android.

Source data: /compatibility/manifest-file-handlers.json · Global usage: 37 % (StatCounter 2026-05)

Source: spec · MDN · Last verified 2026-10-03 · Confidence: high (computed from sources)

Per Chrome for Developers, file handling “is limited to desktop operating systems” in Chromium’s implementation — do not rely on it to register file associations on Android.

Per MDN’s file_handlers reference, the app receives the launched file through window.launchQueue.setConsumer():

async function playSong(fileHandle) {
const blob = await fileHandle.getFile();
const url = URL.createObjectURL(blob);
new Audio(url).play();
}
function supportsFileHandling() {
return "launchQueue" in window && "files" in LaunchParams.prototype;
}
if (supportsFileHandling()) {
window.launchQueue.setConsumer(({ files }) => {
if (files && files.length) {
playSong(files[0]);
}
});
}

Per Chrome for Developers, feature detection for File Handling checks two conditions — "launchQueue" in window and "files" in LaunchParams.prototype — since launchQueue alone doesn’t confirm the files parameter shape the app depends on. Guard the consumer with both checks, and give users an in-app way to open a file when that OS launch path isn’t available:

if (supportsFileHandling()) {
window.launchQueue.setConsumer(({ files }) => {
if (files && files.length) {
playSong(files[0]);
}
});
} else {
// No file-handling support here — fall back to a manual <input type="file"> picker
// in the UI instead of relying on OS-level file association.
document.getElementById("open-file-input").hidden = false;
}
  • file_handlers is desktop-only in Chromium, per Chrome for Developers — do not expect the OS-level “Open with” flow to reach the app on Android.
  • Feature-detect with both "launchQueue" in window and "files" in LaunchParams.prototype, per Chrome for Developers — checking launchQueue alone doesn’t confirm the files parameter shape setConsumer() callbacks depend on.
  • Firefox and Safari do not implement file_handlers, per the compatibility data above — always ship an in-app file picker that doesn’t depend on OS registration.

← Back to the Compatibility explorer.