POS Hardware Bridge¶
Print receipts, kitchen tickets and A4 invoices from any POS — on any thermal printer. A free, open-source tray app for Windows, macOS and Linux.
Browsers can't talk to USB receipt printers or card terminals. POS Hardware
Bridge runs on the shop computer, sets the printers up for you, and gives your
POS a simple HTTP API on http://127.0.0.1:9191. Your POS sends a receipt;
the bridge prints it.
Download Your first print in 5 minutes
-
Sharp receipts on any printer
Receipts are sent line by line and printed with the printer's own fonts — never as a blurry picture. Works with any ESC/POS or Star printer, 58mm or 80mm.
-
Plug and play
Plug in a USB receipt printer and it's ready in seconds. Network printers are found with one click. Your POS never configures a printer.
-
Many printers, one computer
Front counter, kitchen and A4 invoice printers side by side. The POS picks one by name:
receipt,kitchen,invoice. -
Every device in the shop
Phones, tablets and other tills print here too — over the shop Wi-Fi, or from anywhere through your POS backend.
-
Clear status
The tray icon and the API say whether each printer is ready, and tell the cashier exactly what to do when it isn't.
-
Made for developers
A documented HTTP API, an npm SDK with TypeScript types, and an open print station protocol.
How it works¶
flowchart LR
POS["Your POS<br/>(web, desktop, tablet)"] -- "HTTP: POST /print/receipt" --> Bridge["POS Hardware Bridge<br/>on the shop computer"]
Bridge -- "ESC/POS · Star" --> R["Receipt printer"]
Bridge -- "ESC/POS · Star" --> K["Kitchen printer"]
Bridge -- "OS driver" --> A["A4 printer"]
Print a receipt¶
import { BridgeClient, ReceiptBuilder } from 'pos-hardware-bridge';
const bridge = new BridgeClient({ token: '<access token>' });
await bridge.printReceipt(
new ReceiptBuilder()
.center('MY SHOP', { bold: true, size: 'large' })
.rule()
.item({ name: 'Latte', qty: 2, total: '9.00' })
.rule('double')
.total('TOTAL', '9.00')
.qr('https://myshop.example/r/1042', 'Scan for your e-receipt'),
);
curl -X POST http://127.0.0.1:9191/print/receipt \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"blocks": [
{ "type": "text", "text": "MY SHOP", "align": "center", "bold": true, "size": "large" },
{ "type": "rule" },
{ "type": "row", "left": "2 x Latte", "right": "9.00", "bold": true },
{ "type": "rule", "style": "double" },
{ "type": "row", "left": "TOTAL", "right": "9.00", "bold": true, "size": "tall" },
{ "type": "qr", "data": "https://myshop.example/r/1042", "label": "Scan for your e-receipt" }
]
}'
The bridge wraps the text for the paper — 32 characters on 58mm, 42 or 48 on 80mm — so the same receipt prints correctly everywhere.
Open source¶
POS Hardware Bridge is MIT licensed. Issues, printer reports and pull requests are welcome — see Contributing.