Skip to content

Release v1.10.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 07:47
d227ce2

WCPOS 1.10.0

The biggest release since we rebuilt WCPOS in React Native back in 2023. Your store now syncs through a proper change log: the POS asks the server what changed since it last checked, instead of re-downloading your catalogue and hoping it landed. Nearly everything below follows from that.

⚠️ Please don't update lightly. This is a major update — update when your store is quiet and you have time to check everything over, and be ready to roll back if you hit a problem.

Sync and performance

  • The sync engine has been rebuilt end to end, on a new server API (wcpos/v2). Your store now syncs through a change log: the POS asks what changed since it last checked instead of re-downloading the catalogue. This is the foundation the offline queue and Store Health below are built on.
  • Product search matches inside words, so compound-word languages work correctly — searching "saippua" now finds "Kuorintasaippua".
  • Customer search matches every word, so full names like "John Smith" work against the server.

Offline and reliability

  • Browsing, cart building and saving orders keep working offline. The sync engine queues the changes you make — customers, coupons, stock and price edits (Pro), and receipt emails — and replays them on reconnect.
  • Taking payment still needs a connection. Checkout renders a server-hosted payment page, so the payment step cannot complete offline. Offline checkout, starting with cash, is the focus of 1.11.
  • Anything the server rejects lands in a recovery list with the reason, and can be edited and resent.
  • Unreadable local storage now blocks checkout with a reload prompt instead of losing the sale; barcode scans fail loudly in that state rather than going quiet.
  • The crash screen's "Try again" no longer discards unsent sales.
  • Web: cross-tab leader election, so multiple tabs share one writer and can't produce phantom orders.
  • Order write conflicts auto-recover once and surface if they can't.
  • Store switching is transactional — hydrate, then commit, with errors surfaced.

Prevent overselling (new, off by default)

  • Enable in Checkout settings. The cart blocks quantities beyond available stock and shows what's left.
  • The server independently refuses the order (wcpos_insufficient_stock, HTTP 400, every failing line listed), so a stale or bypassed device can't oversell either.
  • Backorders (allow/notify) never block. Variation stock aggregates to the parent stock owner. Draft and cart syncs always succeed — only checkout is gated.
  • Variation stock shown in the picker; out-of-stock variations can be hidden.

Barcode scanning

  • Camera scanning on every platform, in a resizable panel below the filters.
  • New transports: USB serial and HID-POS (Web Serial / WebHID), Bluetooth SPP, and Bluetooth LE via vendor GATT. Electron gains a device chooser; Android gains a native key interceptor.
  • Keyboard-wedge detection now requires a scanner-like burst, so fast typing doesn't register.
  • Scanner Setup Wizard and a test panel that measures your scanner and suggests fixes.
  • UPC-A barcodes resolve to the digits printed on the package.
  • Barcode field defaults to GTIN (_global_unique_id); _sku and custom meta_data: mappings selectable. Changing the field rebuilds the catalogue's barcode index.
  • Optional scan sounds with themes. Scans route to the search field on the Orders screen.
  • Online fallback with auto-add for barcodes not in the local catalogue.

Store Health (new)

  • Database — what's on the device vs. what's on the server, real storage usage, variation totals, server clock-skew detection, per-collection "check for changes now".
  • Performance — measured actuals, live tuning dials, trend charts.
  • Logs — flat ledger with duration and status columns, level filters, expandable rows, infinite scroll. Every sync warning carries a registry error code with a copyable value and a link to its explanation in the docs.

Money and tax

  • Cash change and card cashback render in the order's currency rather than the site default.
  • Receipts print the currency symbol rather than the ISO currency code.

Printing and receipts

  • Star CloudPRNT negotiates media types properly, with a text/plain fallback.
  • Receipts can be rendered server-side as PNG for printers that can't decode StarPRNT.
  • Auto-print rules can trigger on order creation or only once paid, and can print multiple copies.
  • Offline receipts render in the correct language — the store payload now ships a label dictionary.
  • Retried print failures no longer stay stuck in "Needs attention".
  • Thermal fixes: mbstring fallback, wider Star width table, shared text layout, preview and print clamp out-of-range attributes identically.
  • Templates are labelled "Thermal" rather than "ESC/POS".

Access and permissions

  • Cashiers can create and edit products by default. Deleting stays opt-in.
  • Catalogue and coupon writes are checked against real WordPress capabilities; a rejected edit reverts locally and shows the server's reason.
  • Capability toggles on the Access screen are grouped by task.

Platform

  • Expo SDK 57 / React Native 0.86. Desktop app on Electron 43, with the Node stack retired from the main process.
  • Native local storage moved to the Expo filesystem engine.
  • Fixed dropdowns not opening on iPad.
  • Fixed language changes not reaching every part of the app.
  • New transport fallbacks for restrictive hosts: query-parameter JWT, ?rest_route= mode, a header echo probe, and an opt-in response-body envelope for hosts that strip headers.
  • Settings redesigned; Settings and Store Health open as panels rather than modals.

⚠️ Changes that may affect you Only things that differ from released 1.9.17. Internal contracts that changed during 1.10 development are not listed — they were never in a shipped build.

  • Legacy API\Settings controller methods are removed (get_general_settings(), update_access_settings(), get_general_endpoint_args(), remove_license_transient() and others). The class alias survives; the methods do not. Third-party code calling or overriding them needs updating.
  • The StarPRNT fixed-layout output adapter has been removed. Templates using it need switching to another output.
  • Default cashier capabilities changed — catalogue create and edit are now granted by default. Deleting stays opt-in.
  • The POS product grid now defaults to name ascending, replacing the previous default order.

For integrators

  • New wcpos/v2 REST namespace. Syncing lives here, and the shared POS services previously served from wcpos/v1 are now wcpos/v2 pass-throughs. The wcpos/v1 routes still register and still work — they are frozen, and the POS no longer calls them.
  • New public endpoints: wcpos/v2/site (discovery), wcpos/v2/ping (reachability), wcpos/v2/echo (header probe).
  • POS line-item pricing storage is now documented for third-party sync compatibility.

Upgrading Don't update while your store is busy. Pick a time when you have some free time to check everything over, and be ready to roll back if you run into a problem.


Full Changelog: v1.9.17...v1.10.0