Printing issues
Receipt printing breaks more often than anything else in a retail stack — printers go offline, OS updates change the default, USB devices reshuffle on a reboot. This page walks through the symptoms in roughly the order they happen, with the actual fix for each.
Before you start
Three things to confirm before diving in:
- You’re on the desktop app (Tauri), not the web app. ESC/POS thermal printing requires direct hardware access. The web app downloads a PDF instead — see ESC/POS printers for the full backend list.
- The printer is on, has paper, and the cover is closed. Lid switches kill print jobs silently.
- The printer’s path is set in Settings → Printer. An empty path falls through to the OS default, which is plain text — it can’t render barcodes or do ESC/POS formatting.
The receipt doesn’t print at all
Nothing happens when I press Print
Check 1 — desktop or web? The web build can’t open a USB device. If the cashier hits Print and a PDF downloads instead, that’s the web app behaving correctly — install the desktop app on the till machine.
Check 2 — Settings → Printer → Test Print If Test Print fails, the path is wrong. Re-pick the printer from the discovered list and save. On a fresh USB plug, the vendor:product pair sometimes changes between reboots.
Check 3 — Tauri logs
Open the desktop app’s log file (~/.config/Fexl Lite/logs/ on Linux, ~/Library/Logs/Fexl Lite/ on macOS, %APPDATA%\Fexl Lite\logs\ on Windows). The line you’re looking for is [Receipt] Printing receipt for invoice: .... If it’s there but no paper came out, the printer is the issue. If it’s missing, the click didn’t reach Tauri — usually a permissions issue.
The receipt prints, but it’s blank
Cause — paper is upside-down, or the printer is in graphic-mode receiving plain text. Fix — re-load the paper roll right-side up. Run the printer’s self-test (usually hold Feed while powering on); if the self-test prints fine, it’s a paper issue, not the printer.
”USB printer not found” toast
Cause — the vendor:product ID at the saved path no longer matches a connected USB device. Common after a reboot, OS update, or unplug-replug cycle. Fix — Settings → Printer → re-pick the same printer from the discovered list. Save. Try Test Print.
The receipt prints, but looks wrong
Garbled characters or wrong language (especially Arabic)
Cause — code page mismatch. Fexl Lite emits UTF-8 bytes; the printer is in CP437 (default) or some other legacy encoding. Fix — change the printer’s code page in its self-test menu or web admin:
- English-only stores — CP437 or PC850 is fine, but the printer must match.
- Arabic stores — set the printer to CP864 or Windows-1256 depending on the model. Test the change with a few Arabic line items before you trust the till to it.
- Mixed Arabic/English —
UTF-8mode if the printer supports it; otherwise pick the encoding that handles the language with the worst-looking characters and accept that the other will be a little off.
Receipt prints sideways or cuts off the right edge
Cause — paper width mismatch. Fexl Lite’s ESC/POS path uses RECEIPT_WIDTH = 48 (characters per line, designed for 80mm rolls). If your printer is loaded with 58mm paper, every line wraps wrong.
Fix — Settings → Printer → set Paper width to match the roll. The 58mm setting uses 32 characters per line and rebalances the columns.
Prices and totals are misaligned
Cause — using a non-monospace font on the OS default fallback path, or the printer is doing automatic font substitution. Fix — for ESC/POS path, the receipt always uses the printer’s monospace ROM font; if it’s still off, the printer’s “compressed” mode is on — turn it off in the self-test menu. For OS default, switch to ESC/POS by configuring the path properly.
A wall of escape codes prints (^[!@, ^[!a, etc.)
Cause — the OS default fallback is sending ESC/POS escape sequences to a printer driver that doesn’t speak ESC/POS, so the bytes print literally. Fix — either configure the ESC/POS path explicitly (USB or network), or switch the OS printer driver to “Generic / Text Only”.
The cut doesn’t fire
Receipt prints, paper feeds, but doesn’t cut
Cause 1 — printer model doesn’t support a cutter. Many cheap thermal printers are tear-bar only. Cause 2 — auto-cut is disabled in firmware or in Settings → Printer.
Fix — turn Auto-cut off in Settings → Printer if your model lacks the cutter; tear by hand. If your model does have one, run the printer’s self-test with cut enabled to confirm the blade still works (paper jams or worn blades can fail silently).
Wrong content on the receipt
”Serial Number: 1689” instead of the real IMEI
Cause — pre-v1.6.100 regression: the BE enricher was stringifying serialized_items.id (a database primary key) and emitting it as if it were a serial number.
Fix — update to v1.6.100 or later. #62 v1.6.100 The fix re-fetches the invoice by ID before printing so the real identifier field renders.
Change Due shows on a card-paid receipt
Cause — pre-v1.6.100 bug: the change-due line was emitted on every cash-tendered field non-zero, even when the payment was card-only.
Fix — update to v1.6.100 or later. #58 v1.6.100 Card payments suppress the Change Due block on customer-print and thermal alike.
Split-payment rows don’t sum to the total
Cause — pre-v1.6.100 bug: split-payment rows printed pro-rated values that drifted from the gross paid.
Fix — update to v1.6.100 or later. #59 v1.6.100 Each method now prints its net amount; per-method rows sum to the invoice total exactly.
Logo doesn’t print
Cause — logo image format unsupported (most thermal printers want monochrome BMP at the right resolution), or the logo isn’t uploaded. Fix — Settings → General → upload a 256×128 monochrome BMP or PNG. The receipt builder dithers automatically; very small or very large source images can come out muddy. If your printer doesn’t support raster images at all (some entry-level models), the logo silently drops.
Network-printer-specific issues
Network printer disappears after a reboot
Cause — DHCP lease expired and the printer got a new IP. Fix — pin the printer’s MAC to a static IP in your router. Update the IP in Settings → Printer.
Network printer hangs for 10–30 seconds, then errors
Cause — wrong port (Fexl Lite defaults to 9100; some printers use 515 or 631), firewall blocks outbound 9100, printer is on a different VLAN than the till.
Fix — verify the port via the printer’s web admin (most have one at http://printerIP/). Open port 9100 outbound on the till’s firewall. For VLAN issues, the till and the printer need to be on the same broadcast domain.
Network printer prints, but slowly
Cause — congested wifi, large image (logo) flooding the link. Fix — wired the printer if you can. Resize the logo to a smaller monochrome BMP. If the printer is shared between multiple tills, expect a queue.
Things that aren’t a printer problem
”Printing isn’t loading” — the dialog won’t open
This is a frontend issue, not a printer issue. Check the browser console (web) or the desktop app’s logs (Tauri). Most likely the invoice payload failed to load — a sync issue, not a print issue. See Sync issues.
”It prints, but the customer says the receipt is wrong”
The receipt reflects the current state of the invoice. If the customer received a refund since the original sale, the re-printed receipt shows the refunded total — that’s correct. To see the original sale’s amounts, look at the JE block on the General Ledger, or print the invoice detail PDF (which can show line history).
Still stuck?
- Try the OS default fallback. Clear the printer path in Settings → Printer, hit Test Print. If a plain-text receipt comes out, your printer is fine and the ESC/POS path needs configuring. If even the OS default fails, the OS or the printer is the issue.
- Check the ESC/POS printers page for the full path-discovery flow and supported drivers.
- Open a support ticket with: (a) printer model, (b) connection type (USB / network), (c) the exact path string from Settings → Printer, and (d) the last 50 lines of the desktop app log.
Related
- ESC/POS printers — full setup walkthrough and backend reference
- Settings → Printer — the configuration page
- Print A4 / Thermal — picking between A4 PDF and thermal receipt
- Sync issues — when the invoice itself didn’t load
- Connection issues — when the desktop can’t reach its server at all