Appearance
Printers
Overview
Printers are used to print order receipts, kitchen tickets, and customer receipts. Configure receipt printers for different purposes and locations.
Key Purpose: Configure and manage receipt printers.
Purpose
This page lets you add, configure, and manage receipt and kitchen printers so that order tickets and customer receipts are automatically routed to the correct device at each location.
Key Concepts
- Printer Type: Printers are classified as receipt (customer-facing thermal receipts), kitchen (order preparation tickets), or label (packaging labels), and this type determines what content is printed.
- Connection Type: Printers connect via USB, network (IP/Ethernet), Bluetooth, or cloud; network printers require a valid IP address and default to port 9100.
- Category Routing: Kitchen printers can be assigned specific menu categories so that only items from those categories are printed on that device, enabling station-based ticket splitting.
- Star Micronics Cloud Integration: Cloud printers authenticate via Star Micronics using OAuth 2.0 with PKCE, granting scopes for printer configuration, device management, and receipt printing.
- Printer Token: Unlike kiosk and KDS devices that use activation codes, printer devices receive a secure token at creation time for authentication.
Actions
Add a Printer
Create a new printer device, specifying its name, type, connection method, location, and paper width; the system generates a secure token automatically for authentication.
Configure Category Routing
Assign specific menu categories to a kitchen printer so that only items belonging to those categories appear on its tickets, enabling multi-station kitchen workflows.
Connect a Star Micronics Cloud Printer
Initiate the OAuth 2.0 authorization flow with Star Micronics Cloud, complete the callback to obtain access tokens, and link the cloud printer to a location.
Assign a Printer Profile
Link a printer profile to the device to control receipt layout options such as logo printing, auto-cut behavior, and number of copies.
Location
- Backoffice Route:
/devices/printers - Backend Controller:
app/Http/Controllers/Api/PrinterController.php - Vue Component:
src/views/devices/printers/index.vue
Fields
Printer Name
| Property | Value |
|---|---|
| Field ID | name |
| Label | Printer Name |
| Type | Text |
| Required | Yes |
| Validation | max: 50 characters |
Description: Identifier for this printer.
Examples:
- "Kitchen Printer"
- "Receipt Printer - Counter"
- "Bar Printer"
- "Kiosk Receipt"
Printer Type
| Property | Value |
|---|---|
| Field ID | type |
| Label | Printer Type |
| Type | Select |
| Options | receipt, kitchen, label |
| Default | receipt |
Description: Type of printer and its purpose.
Types:
- Receipt: Customer receipts (thermal)
- Kitchen: Kitchen order tickets
- Label: Label printing (for packaging)
Connection Type
| Property | Value |
|---|---|
| Field ID | connection_type |
| Label | Connection |
| Type | Select |
| Options | usb, network, bluetooth, cloud |
| Required | Yes |
Description: How the printer connects.
Options:
- USB: Direct USB connection to device
- Network: IP/Ethernet connection
- Bluetooth: Bluetooth connection
- Cloud: Cloud printing service
IP Address
| Property | Value |
|---|---|
| Field ID | ip_address |
| Label | IP Address |
| Type | Text |
| Required | Yes (if network) |
| Validation | Valid IP address |
| Depends On | connection_type = network |
Description: Network IP address of the printer.
Examples:
- "192.168.1.100"
- "10.0.0.50"
Port
| Property | Value |
|---|---|
| Field ID | port |
| Label | Port |
| Type | Number |
| Default | 9100 |
| Required | No |
| Depends On | connection_type = network |
Description: Network port for printer communication.
Assigned Location
| Property | Value |
|---|---|
| Field ID | location_id |
| Label | Location |
| Type | Select |
| Required | Yes |
Description: Which location this printer belongs to.
Print Categories
| Property | Value |
|---|---|
| Field ID | category_ids |
| Label | Categories |
| Type | Multi-select |
| Required | No |
| Default | All categories |
Description: Which menu categories print to this printer (for kitchen routing).
Use Cases:
- Grill printer: Only burger/steak categories
- Bar printer: Only drinks category
- Main kitchen: All food categories
Paper Width
| Property | Value |
|---|---|
| Field ID | paper_width |
| Label | Paper Width |
| Type | Select |
| Options | 58mm, 80mm |
| Default | 80mm |
Description: Width of thermal paper roll.
Auto-Cut
| Property | Value |
|---|---|
| Field ID | auto_cut |
| Label | Auto-Cut Paper |
| Type | Toggle |
| Default | true |
Description: Automatically cut paper after printing.
Print Logo
| Property | Value |
|---|---|
| Field ID | print_logo |
| Label | Print Logo |
| Type | Toggle |
| Default | true |
Description: Include logo on receipts.
Copies
| Property | Value |
|---|---|
| Field ID | copies |
| Label | Number of Copies |
| Type | Number |
| Default | 1 |
| Validation | min: 1, max: 5 |
Description: Number of copies to print.
Enabled
| Property | Value |
|---|---|
| Field ID | enabled |
| Label | Enabled |
| Type | Toggle |
| Default | true |
Description: Whether this printer is active.
Print Jobs
Customer Receipt
Printed after successful payment.
Contents:
- Logo
- Business name & address
- Order number
- Date/time
- Items with prices
- Modifiers
- Subtotal
- Discounts
- Tax breakdown
- Total
- Payment method
- VAT number
Kitchen Ticket
Printed for kitchen preparation.
Contents:
- Order number (large)
- Time
- Channel (Online, Kiosk, etc.)
- Dining option (Pickup, Delivery, Dine-in)
- Items with modifiers
- Special instructions
- Customer name (for pickup)
Order Summary
Summary ticket for expo/assembly.
Contents:
- Order number
- All items
- Delivery/pickup info
- Customer details
Business Logic
Print Routing
Order confirmed
│
▼
For each printer at location:
├── Is printer enabled? No → Skip
│
├── Is printer type = receipt?
│ └── Print customer receipt
│
├── Is printer type = kitchen?
│ └── For each item in order:
│ ├── Item category in printer categories?
│ │ └── Yes → Add to print job
│ └── No → Skip item
│ └── Print kitchen ticket (if items)
│
└── Continue to next printerCategory Routing Example
Order: Burger, Fries, Beer, Dessert
Kitchen Printer (categories: Burgers, Sides, Desserts):
- Prints: Burger, Fries, Dessert
Bar Printer (categories: Drinks):
- Prints: Beer
Receipt Printer:
- Prints: Full order receiptCustomer Impact
Receipt Quality
- Clear, readable receipts
- Logo for branding
- All order details
- Tax compliance info
Kitchen Efficiency
- Orders routed to correct stations
- Clear item display
- Special instructions visible
Relations
Depends On
- Locations: Printers assigned to locations
- Categories: For kitchen routing
Affects
- Transactions: Receipts printed
- KDS: Alternative to digital display
- Kiosk: Receipt printing
Related Features
Business Rules
- Printer devices do not require a Stripe subscription, unlike kiosk and KDS devices; they are created with a secure token instead of an activation code.
- When an order is confirmed, the system iterates over all enabled printers at the location: receipt-type printers produce a full customer receipt, while kitchen-type printers only print items whose categories match the printer's assigned categories.
- Star Micronics cloud OAuth tokens are cached for 10 minutes during the PKCE authorization flow; if the callback is not completed within that window, authorization must be restarted.
- Each printer must be assigned to exactly one location; the location determines which orders are routed to that printer.
- A kitchen printer with no categories assigned (empty list) receives tickets for all items in every order at its location, acting as a catch-all station printer.
FAQs
- "How do I split kitchen tickets across multiple printers?" Assign different menu categories to each kitchen printer; the system will automatically route only the relevant items to each device per order.
- "What is the difference between a printer token and an activation code?" Printers use a one-time secure token generated at creation for authentication, while kiosk and KDS devices use a short-lived activation code that must be entered on the physical device.
- "Can I use a cloud printer without Star Micronics?" Currently the cloud printing integration is specifically built for Star Micronics Cloud; other cloud printing providers are not supported.
- "Why does my kitchen printer print every item?" If no specific categories are assigned to the printer, it defaults to printing all categories; assign only the relevant categories to restrict the output.
- "How many copies can a printer produce per order?" The copies setting supports 1 to 5 copies per print job; this is validated on save and defaults to 1.
Troubleshooting
Problem: Printer not printing
Causes:
- Printer offline/disconnected
- Wrong IP address
- Paper out
- Printer disabled
Solutions:
- Check printer power and connection
- Verify IP address
- Refill paper
- Enable printer in settings
Problem: Partial printing (cut off)
Causes:
- Wrong paper width setting
- Content too wide
- Printer malfunction
Solutions:
- Set correct paper width (58mm/80mm)
- Adjust receipt template
- Test printer hardware
Problem: Kitchen tickets going to wrong printer
Causes:
- Category routing incorrect
- Multiple printers with same categories
- Printer assignment wrong
Solutions:
- Review category assignments
- Make categories exclusive
- Check printer location assignment
Problem: Logo not printing
Causes:
- Print logo disabled
- Logo not uploaded
- Logo format incompatible
Solutions:
- Enable print logo setting
- Upload logo in branding
- Use compatible format (BMP, PNG)
Examples
Single Printer Setup
json
{
"printers": [
{
"name": "Main Printer",
"type": "receipt",
"connection_type": "network",
"ip_address": "192.168.1.100",
"port": 9100,
"location_id": "loc-123",
"paper_width": "80mm",
"auto_cut": true,
"print_logo": true,
"copies": 1,
"enabled": true
}
]
}Multi-Printer Kitchen Setup
json
{
"printers": [
{
"name": "Receipt Printer",
"type": "receipt",
"connection_type": "network",
"ip_address": "192.168.1.100",
"category_ids": [],
"enabled": true
},
{
"name": "Grill Station",
"type": "kitchen",
"connection_type": "network",
"ip_address": "192.168.1.101",
"category_ids": ["burgers", "steaks", "chicken"],
"copies": 1,
"enabled": true
},
{
"name": "Fryer Station",
"type": "kitchen",
"connection_type": "network",
"ip_address": "192.168.1.102",
"category_ids": ["fries", "appetizers"],
"copies": 1,
"enabled": true
},
{
"name": "Bar",
"type": "kitchen",
"connection_type": "network",
"ip_address": "192.168.1.103",
"category_ids": ["drinks", "cocktails"],
"copies": 1,
"enabled": true
}
]
}Kiosk with Printer
json
{
"kiosk": {
"name": "Kiosk 1",
"printer_id": "printer-kiosk-1"
},
"printer": {
"name": "Kiosk 1 Receipt",
"type": "receipt",
"connection_type": "usb",
"paper_width": "80mm",
"auto_cut": true,
"print_logo": true
}
}Receipt Template
[LOGO]
MARIO'S RESTAURANT
123 Main Street
Amsterdam, 1012 AB
Tel: +31 20 123 4567
─────────────────────────
Order #1234
15 Jan 2024 12:45
─────────────────────────
1x Margherita Pizza €12.50
- Large +€3.00
1x Garlic Bread €4.50
2x Cola €5.00
─────────────────────────
Subtotal €25.00
Delivery Fee €3.50
─────────────────────────
VAT 9% €2.36
─────────────────────────
TOTAL €30.86
─────────────────────────
Paid: iDEAL
VAT Nr: NL123456789B01
Thank you for your order!