← v147

v147 · proposed IWA API · member reference

Web Printing API

The Web Printing API is proposed for enumerating local printers, reading capabilities, and submitting PDF jobs. It requires a tightly restricted Isolated Web App context; IWA prerequisite context is not this API’s canonical feature identity. It is not window.print() and is not currently a generally available browser API.

Proposal and implementation differ from the old overviewChromeStatus currently records this API as Proposed, not shipped. This reference follows the current WICG IDL and Chromium source; test in the intended IWA configuration and feature-detect rather than relying on the v147 label.

Syntax

window.printing.getPrinters();

Correction: current normative IDL exposes window.printing, not navigator.printing. Its print method is submitPrintJob(), not printJob(). The old names are retained only as stable local route labels where relevant.

Inputs

See the member routes below. The only accepted document format presently enumerated is application/pdf.

Outputs

Enumeration resolves printers; submission resolves a WebPrintJob, not completion.

Errors

Operations may synchronously throw or asynchronously reject DOMExceptions; inspect both paths.

Context and permission

The IDL requires a secure, isolated context. The specification also defines the web-printing Permissions Policy with default allowlist self; Chromium additionally checks an isolated context and cross-origin isolation before getPrinters(). The current proposal requires express, origin-specific consent triggered by enumeration. The exact chooser scope, persistence, and whether a later operation prompts again remain user-agent UX, not a settled web contract.

Lifecycle, cancellation, and cleanup

Enumeration yields handles with a small cached attribute set. Fetching replaces that cache. A job starts as preliminary; terminal state and event delivery are discussed on the job pages. No retry or cleanup guarantee beyond the current objects is specified.

Examples

if (!("printing" in window)) throw new Error("Web Printing API unavailable");
const printers = await window.printing.getPrinters();
console.log(printers.map((printer) => printer.cachedAttributes().printerName));

Browser compatibility

Current public compatibility evidence (checked 2026-07-26)
RuntimeStatusEvidence
Chrome (general)Proposed and not released. ChromeStatus lists I2S desktop target 147, which is not release proof. Do not infer general desktop Chrome support.ChromeStatus
Current Chromium serviceImplemented only when built with IS_CHROMEOS && USE_CUPS; otherwise getPrinters() has no service and throws SecurityError.Chromium manager implementation
Android / mobileChromeStatus Android is null; no public mobile release exists. The current ChromeOS+CUPS-only service path does not expose the service on Android.ChromeStatus; implementation guard
FirefoxNo signal; no BCD member record found.ChromeStatus position; BCD API data
SafariNo signal; no BCD member record found.ChromeStatus position; BCD API data
webstatus.devNo feature entry found for this query; this is not proof of absence from browsers.webstatus query

Security and privacy

Printer names, IDs, capabilities and state can fingerprint a device and reveal printing activity. A compromised IWA could create unwanted jobs or denial of service. Minimize enumeration and polling, do not expose attributes to untrusted content, validate documents before submitting, and offer an app-level confirmation/audit trail. The spec requires isolation and consent; it does not make printer information non-sensitive.

Demo and canonical sources

Open the canonical chrome-platform-showcase demo. Its platform behavior is governed by that project's own conformance contract.

Sources

See the source-fidelity critique for corrections and unresolved source differences, including the Chrome Intent to Ship.

Inventory and local routes

Current source-derived surface
SurfaceLocal reference
Window.printingnormative Window entry point (WindowOrWorkerGlobalScope is a Chromium implementation divergence; worker usability is unknown)
WebPrintingManager.getPrinters()getPrinters()
WebPrinter; cachedAttributes()interface; cached attributes
fetchAttributes()fetchAttributes()
submitPrintJob()print-job submission
WebPrintJob, state, event and cancelinterface; attributes(); jobstatechange; cancel()
Printer attribute shapeWebPrinterAttributes
Print request shapeWebPrintJobTemplateAttributes
Job output and valuesWebPrintJobAttributes and states; WebPrintingMediaSizeDimension shared-value index; range; resolution; media-size-dimension; media-size; media-collection; requested-media-size; requested-media-collection; mime; handling; orientation; resolution-units; sides; quality; color-mode; printer-state; printer-state-reason