Skip to main content
Back to changelog

POS UI extensions can now print directly to hardware receipt printers

POS UI Extensions 2026-07 introduces the Printing API (shopify.printing), which enables extensions to discover hardware printers with getPrinters() and send documents directly to a connected receipt printer with print().

The Printing API supersedes shopify.print, which is now deprecated. No immediate action is required; plan to migrate when you adopt 2026-07.

What changed

  • shopify.printing.getPrinters() returns the hardware printers available to the device. Each printer includes an id, name, and connected status.
  • shopify.printing.print(src, options?) prints the document at src. If you omit options.printer, the system print dialog opens. If you pass a printer returned by getPrinters(), the document prints directly to that printer with no dialog.

The src must be either a relative path appended to your app’s application_url, or a full URL on the same origin. The document is fetched using the extension’s session token.

Receipt printers can render HTML and images directly. PDFs require the system print dialog: if you pass a printer when src points to a PDF, shopify.printing.print throws an error. For PDFs, always omit options.printer and rely on the system print dialog.

Previously, shopify.print could only open the system print dialog, which cannot target dedicated receipt printers. Earlier POS UI Extensions API versions are unchanged.


Note

Hardware printer discovery requires Shopify POS version 11.11.0 or later. On earlier versions, getPrinters() returns an empty array, even when a receipt printer is paired. This does not affect the system print dialog, which remains available.


Always handle the empty-array case by falling back to the system print dialog. This also covers merchants without a receipt printer:

const printers = await shopify.printing.getPrinters();
const receiptPrinter = printers.find((printer) => printer.connected);

if (receiptPrinter) {
await shopify.printing.print('/print/receipt', {printer: receiptPrinter});
} else {
await shopify.printing.print('/print/receipt');
}

The Printing API is available on all POS UI extension targets. To verify direct printing, test on a development store with POS 11.11.0 or later and a paired receipt printer. Call shopify.printing.print with a printer from getPrinters(); if the job prints without a dialog, direct printing is working.

Related docs

Was this page helpful?