Printing
Printing
The POS printing system supports thermal receipt printers and kitchen ticket printers using EscPos JSON format, with flexible routing through the Print Bridge, browser-native device connections, and cloud print services.
Print Architecture
EscPos JSON Format
All print jobs use a structured JSON format that maps to EscPos commands:
{
"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 | Delivered by |
|---|---|---|
| Network | Ethernet/WiFi printer (IP:Port) | Print Bridge |
| USB | USB-connected printer | Print Bridge or browser (WebUSB) |
| Bluetooth | Bluetooth printer | Browser (WebBluetooth) |
| Cloud | Cloud print service (Epson ePOS, Star CloudPRNT, webhook) | Menuraq server |
| Cloud pull | Star CloudPRNT-style pull endpoint hosted by Menuraq | Menuraq server |
| Wi-Fi (browser direct) | Vendor HTTP API on the LAN (epson://, star://, bixolon://) | Browser tab |
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 |
Delivery Paths
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)
The bridge runs as a small desktop binary (menuraq-bridge-linux-x64, downloaded from POS > Settings > Printers). It claims jobs for network, usb, bluetooth and cloud targets — but never cloud_pull or browser_http targets, which are owned by the server and browser respectively.
Browser-native connection (WebUSB / WebBluetooth)
Chrome and Edge can connect receipt printers directly from the browser — no bridge computer:
- Open POS > Settings > Printers and tap Connect a printer.
- Tap Find printers — the native USB chooser opens, then the Bluetooth chooser.
- Test the device, then Save as printer. The saved target uses a
webusb:orwebble:address. - Toggle Receive print jobs in this browser — the tab polls for jobs and delivers them to connected devices while it stays open.
WebUSB and WebBluetooth are not available on Safari or iPadOS.
Wi-Fi printer (browser direct)
Any browser — including iPad Safari — can deliver jobs straight to a Wi-Fi printer over its vendor HTTP API. No bridge computer, no driver:
- Open POS > Settings > Printers and tap Connect a printer.
- In the Wi-Fi printer (HTTP) section, enter a scheme-prefixed address:
epson://192.168.1.50:8008— Epson ePOS-Print JSON APIstar://192.168.1.60:80— Star HTTP APIbixolon://192.168.1.70:8080— Bixolon raw ESC/POS HTTP
- Tap Test to print a test receipt, then Save as printer.
- Toggle Receive print jobs in this browser to start delivering jobs.
The printer must be reachable from the device running the browser. Mixed-content note: if the POS is served over HTTPS, browsers block plain-HTTP requests to the printer — use a printer that supports HTTPS, or serve Menuraq over HTTP on the local network.
Cloud push (Epson ePOS / Star CloudPRNT / webhook)
Menuraq's server sends jobs directly to a cloud print endpoint — no bridge, works from any device including tablets:
- Epson ePOS Print: endpoint
https://api.epson.com/epos/printer/{device_id}/print, API key field = device ID. - Star CloudPRNT: endpoint
https://api.star.jp/cloudprnt/{printer_serial}, API key sent as a Bearer token. - Custom webhook: any HTTP endpoint accepting a POST with a JSON body (the full EscPos JSON payload).
Cloud pull (Menuraq-hosted CloudPRNT)
For Star printers with CloudPRNT support, Menuraq hosts the CloudPRNT endpoint — the printer polls Menuraq for jobs over the internet, so it works from anywhere with no bridge and no inbound firewall rules:
- Add a printer with connection type Cloud pull and save it.
- Edit the printer and tap Generate pull URL.
- Copy the URL (shown once — it contains the printer's secret token) and paste it into the printer's CloudPRNT settings.
- The printer polls Menuraq; jobs are delivered automatically. Regenerating the URL rotates the token and immediately invalidates the old URL.
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, Cloud, Cloud pull, or Wi-Fi (browser direct)
- Connection address: IP address and port (for network), scheme-prefixed address (for Wi-Fi direct), or device path/MAC (for USB/Bluetooth)
- 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
iPad / AirPrint note
Menuraq does not ship an HTML receipt renderer, so AirPrint is not a supported delivery path today. On iPads, use one of these instead:
- Wi-Fi printer (browser direct) — works in iPad Safari for Epson/Star/Bixolon printers on the same network.
- Cloud push or Cloud pull — works from any device with an internet connection.
Related Documentation
Was this page helpful?