Printing
The POS printing system supports thermal receipt printers and kitchen ticket printers using EscPos JSON format, with flexible routing through the Print Bridge.
Print Architecture
EscPos JSON Format
All print jobs use a structured JSON format that maps to EscPos commands:
```json
{
"version": 1,
"format": "escpos-json",
"paper_width": "80mm",
"generated_at": "2026-07-24T12:00:00Z",
"target": {
"id": "printer-1",
"name": "Kitchen Printer",
"role": "kitchen_ticket",
"connection_type": "network",
"connection_address": "192.168.1.100:9100"
},
"commands": [
{ "type": "init" },
{ "type": "align", "value": "center" },
{ "type": "bold", "value": true },
{ "type": "size", "width": 2, "height": 2 },
{ "type": "text", "value": "Order #42" },
{ "type": "bold", "value": false },
{ "type": "feed", "lines": 1 },
{ "type": "line", "value": "--- Items ---" },
{ "type": "text", "value": "1x Burger" },
{ "type": "text", "value": "1x Fries" },
{ "type": "feed", "lines": 2 },
{ "type": "cut", "mode": "full" }
]
}
```
Supported Commands
| Command | Parameters | Description |
init | , | Initialize printer |
align | left, center, right | Text alignment |
bold | true, false | Bold text on/off |
size | width (1-2), height (1-2) | Text size multiplier |
text | value | Print text |
line | value (optional) | Print line of text or separator |
feed | lines | Feed paper N lines |
cut | full, partial | Cut paper |
Print Job Types
Kitchen Tickets
When an order is placed, kitchen tickets are automatically generated:
- KitchenTicketPayload includes:
- Station ID and name
- Order ID and number
- Itemized list with quantities, modifiers, and notes
- EscPos commands for printing
Tickets can be routed to specific kitchen stations based on item assignments.
Customer Receipts
Customer receipts are generated after payment:
- StoredBranchReceipt captures:
- Branch and order information
- Receipt number
- Full receipt data (JSON)
- HTML snapshot for digital viewing
- Print timestamp
Receipts include:
- Business name and logo
- Order items with prices
- Subtotal, tax, service charge
- Payment method and amount
- Order number and date
- QR code for digital receipt access
Printers
Printer Types
| Type | Description |
| Thermal | Standard thermal receipt printers |
| Impact | Impact/dot-matrix printers |
| Label | Label printers for barcode/label printing |
Connection Types
| Connection | Description |
| Network | Ethernet/WiFi printer (IP:Port) |
| USB | USB-connected printer |
| Bluetooth | Bluetooth printer |
| Cloud | Cloud-based print service |
Printer Target Roles
| Role | Purpose |
customer_receipt | Print receipts for customers |
kitchen_ticket | Print orders for the kitchen |
bar_ticket | Print drink orders for the bar |
label_printer | Print labels for packaging |
expo_ticket | Print tickets for the expo/pass |
Print Bridge
The Print Bridge connects the POS to physical printers. It:
- Receives EscPos JSON print jobs from the POS
- Converts them to raw EscPos commands
- Sends commands to the printer over the configured connection
- Reports print success/failure back to the POS
Print Bridge supports:
- Network printers (TCP/IP socket)
- USB printers (via serial/USB-to-serial)
- Cloud print services (HTTP API)
Printer Configuration
Manage printers at POS > Settings > Printers (/pos/[branchId]/settings/printers):
- Click Add Printer.
- Configure:
- Name: Friendly name for the printer
- Type: Thermal, Impact, or Label
- Target role: Kitchen ticket, receipt, bar ticket, etc.
- Connection type: Network, USB, Bluetooth, or Cloud
- Connection address: IP address and port (for network)
- Paper width: 58mm or 80mm
- Save the configuration.
Receipt Configuration
Configure receipt formatting at POS > Settings > Receipts (/pos/[branchId]/settings/receipts):
- Header text
- Footer text
- Logo placement
- Item format (compact vs detailed)
- Include QR code
- Include barcode
- Paper size