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.
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.
| PrintTrays | A third-party closed-source bridge | |
|---|---|---|
| Source code | Fully in-house, fully readable | Closed — you can't see what it does |
| Fixing an issue | Your team ships a fix the same day | Wait on the vendor's release schedule |
| Extending it | Add whatever your workflow needs | Limited to what the vendor exposes |
| Security review | Fully auditable, line by line | You're trusting a third party's binary |
| Branding & certificate | Your own name, your own local certificate | Vendor-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" });