Skip to content

Settings — Label printer, scale, cash drawer

import { Aside } from ‘@astrojs/starlight/components’;

DeviceWhen to usePathSource
Label printerShelf / barcode labels/point-of-sale/settings/label-printersettings-label-printer-page.tsx
Weighing scaleWeighted goods (produce, meat, fish)/point-of-sale/settings/scale (<DeviceSettings hardwareFocus="scale">)DeviceSettings.tsx
Cash drawerAuto-open on cash tender/point-of-sale/settings/cash-drawer (<DeviceSettings hardwareFocus="cash-drawer">)DeviceSettings.tsx

Label printer — Electron workbench Image: label printing workbench — pick template (price_left / boxed_price_per_lb), system printer, preview area, Print button. Spec owner: cashier-screenshots.spec.ts → "settings — label printer (workbench)".

Weighing scale — device config Image: scale config — USB Serial / HID, “Local ready” badge when the config is valid. Spec owner: cashier-screenshots.spec.ts → "settings — scale".

Cash drawer — device config Image: cash drawer — subtype of the receipt printer, “Local ready” badge, test popup. Spec owner: cashier-screenshots.spec.ts → "settings — cash drawer".

Print shelf / barcode labels for new products or after a stocktake. Common in grocery, mini-mart, cosmetics.

  1. Settings → Label printer (/point-of-sale/settings/label-printer) — Vendor Desktop only.
  2. Make sure an active store is selected on the top bar — otherwise the form is hidden and you only see the “Pick store” message.
  3. Pick a label template (templateKey):
    • price_left — price in a square box on the left, content on the right.
    • boxed_price_per_lb — content inside a frame, for items priced per pound.
  4. Pick a system printer (printerName) from the systemPrintersQuery dropdown — Electron calls electronApi.listPrinters(). Leave blank to print via the OS default printer.
  5. Fill price + 2 content lines + copies (1–100). Click Print to use Electron printHtml, or Print with dialog to open the browser’s print dialog (fallback).

Source: settings-label-printer-page.tsx. Constants:

LABEL_PAPER_WIDTH_IN = 3.5; // ~ 89mm
LABEL_PAPER_HEIGHT_IN = 1.1; // ~ 28mm
LABEL_PRINTER_MIN_COPIES = 1;
LABEL_PRINTER_MAX_COPIES = 100;
LABEL_PRINTER_MAX_CONTENT_LINE_LENGTH = 64;
LABEL_PRINTER_MAX_PRICE_LENGTH = 24;

Toast “Print command sent” when Electron prints successfully. On failure, the fallback print dialog opens and an error toast with the reason (printFailedWithReason) is shown.

SymptomFix
Form hidden, only the “Pick store” message showsNo active store selected on the top bar
No printers in the dropdownVendor Desktop lacks permission to access system printers — grant in OS
Toast Print failed: …Read the reason in the toast; try Print with dialog
Label cut off at the edgeDriver may not support the 3.5in × 1.1in paper size

Stores sell by weight — produce, meat, fish. Each time the cashier scans a weighted SKU, the system reads kg from the scale and multiplies by the unit price.

  1. Settings → Scale (/point-of-sale/settings/scale).
  2. Click + Add device → choose Weighing scale (weighing_scale).
  3. Pick a connect method:
    • USB Serial (RS-232 over USB) — default baud rate from pos-scale-serial.constants.ts.
    • USB HID — no driver needed, plug-and-play.
  4. Pick a scale model (model) — USB Serial presets use isUsbSerialScaleModelPreset(...). Enable the device.

Source: device-scale-settings-form.tsx, pos-scale-serial-config.ts.

localScaleReady === true when:

  • Valid USB Serial model + valid scaleConfig JSON + valid baud rate.

The card shows a green “Local ready” pill + a “Local hint” — scales don’t need bridge pairing.

SymptomFix
Scale not respondingCheck cable / USB port; try another port
Weight doesn’t update when you place an itemScale may not be in data-send mode — see the scale’s manual
“Local ready” pill never turns greenMissing baud rate / scaleConfig — re-check the form

After a cash tender the drawer pops open so the cashier can give change.

  1. Settings → Cash drawer (/point-of-sale/settings/cash-drawer).
  2. The drawer is a subtype of receipt printer — configure the receipt printer first (CASH_DRAWER_PRINTER_TYPE).
  3. Connect the drawer to the receipt printer via an RJ12 cable (common).
  4. Click Test on the drawer card — the drawer popping means it’s good.

localCashDrawerReady === true when the config is valid + paired with a receipt printer.

SymptomFix
Drawer doesn’t open after cash tenderCheck the RJ12 cable; enable “Open on cash tender” in the form
Manual test works, real sale doesn’tThe tender must be cash — card doesn’t open the drawer
Drawer opens but closes immediatelyLikely a mechanical jam — service the drawer