Self-hosted · Open source you own

Print from the browser. To any printer, scale, or scanner.

PrintTrays is a small background app that gives your web pages a secure, signed local bridge to OS printers, thermal/label printers, and USB, HID, or serial devices — without a plugin, and without a browser print dialog ever appearing.

How it works

Install once per machine. Every page on your site can print from then on.

Install PrintTrays

One installer, runs quietly in the system tray, starts automatically at login. Nobody has to think about it again.

Include the SDK

A small JS module, no bundler or build step required. Three lines to connect and print.

Print silently

PDF, HTML, raw ESC/POS or ZPL — straight to the printer, with full control over duplex, paper size, and orientation.

What it does

One background app, one JS include, full local device access.

Aa

Standard printing

Send PDF or HTML straight to any installed OS printer, silently, with full control over duplex, orientation, paper size, margins, and color.

▤

Thermal & label printers

Write raw ESC/POS or ZPL directly to receipt and label printers over USB, serial, or IP — bypassing the OS spooler entirely.

◈

Scales, scanners & USB devices

Read and write raw bytes over serial, HID, or direct USB endpoints — including control transfers — for scales, barcode scanners, card readers, and signature pads.

✓

Verified, not just trusted

Every response from the bridge is RSA-signed and pinned client-side, so a page can confirm it's really talking to your PrintTrays install — not an impostor on the same port.

●

Runs quietly

Lives in the system tray, starts with the OS, and shows live connection status — nothing for staff to open or manage day to day.

◎

Cross-platform by design

One codebase. Windows and Linux are both built and functionally verified end-to-end today; macOS is on the roadmap.

Why run your own bridge

The honest comparison, not a sales pitch.

PrintTraysA third-party closed-source bridge
Source codeFully in-house, fully readableClosed — you can't see what it does
Fixing an issueYour team ships a fix the same dayWait on the vendor's release schedule
Extending itAdd whatever your workflow needsLimited to what the vendor exposes
Security reviewFully auditable, line by lineYou're trusting a third party's binary
Branding & certificateYour own name, your own local certificateVendor-branded

Where it fits

Any web app that needs to print without asking the customer to.

$

Point of sale & retail

Print receipts to a thermal printer the instant an order completes — no dialog, no delay at the counter.

▦

Warehouse & logistics

Send ZPL straight to a label printer for shipping labels, bin tags, and barcodes as orders are picked.

◐

Photo & print kiosks

Drive large-format or specialty printers directly from a browser-based ordering flow, with full page-setup control.

✎

Forms, checklists & back-office

Print PDFs and documents from internal tools without ever routing staff through a browser print dialog.

Three lines of code

That's the whole integration.

import { PrintTrays } from "./printtrays.js";

const pp = new PrintTrays();
await pp.connect();
await pp.print("EPSON TM-T88", "\x1bHello world\x1b", { type: "escpos" });

Ready to print without the dialog?

Install PrintTrays once, then include the SDK anywhere you need to print.