Downloads

One till, every device.

macOSDetected

Version 1.9.9 · Apple Silicon · .dmg

Download for macOS

On an Intel Mac? Get the Intel build

Every app connects to the free WordPress plugin — install it first.

How it fits together

One store at the centre. Every till in sync.

  • One plugin is the only setupThe free plugin adds a secure REST API to your WooCommerce store. That’s the whole install — nothing to host or configure per device.
  • Every app reads and writes the same storeRing up a sale on the desktop, refund it on your phone — one set of products, orders and customers, updating in real time.
  • Offline-first, so the till never stopsEach device keeps working without a connection and re-syncs the moment it’s back online.

What stays in sync

  • Products & prices
  • Stock levels
  • Orders
  • Customers
  • Tax & receipts

Get started

Three steps to your first sale

It takes about two minutes, start to finish.

  1. 1

    Install the free plugin

    The foundation everything connects to. In your dashboard: Plugins → Add New, then search “WCPOS”.

    WCPOSFree · GPL

    Latest 1.9.17 · WordPress 5.6+ · WooCommerce 5.3+ · PHP 7.4+

  2. 2

    Pick your device

    All free, all in sync. Grab the one we detected up top, or any of these.

  3. 3

    Want more? Go Pro

    A licensed plugin that adds terminal payments, refunds and stock control on the same foundation.

    Unlock the full till

    Payments, refunds, stock & pricing, order management, end-of-day reports, multi-store and priority Discord support.

Release history

What’s new

Recent changes — every app shares one version line.

1.9.17LatestAug 7, 2026

What's Changed

  • Smaller plugin package — the download is around 2.4 MB smaller (optimized template gallery images, removed unused bundled files). This also shrinks the Pro package and resolves installation failures on hosts with restrictive upload or disk limits. (#1538)
  • Fixed Pro update downloads using a stale licence key — changing or re-activating a WCPOS Pro licence now clears WordPress's cached update information, so the next update download always uses the current licence key. (#1444, #1480)
  • Fixed duplicate cashier identity on multisite — on multisite networks a cashier could be assigned two different internal IDs depending on which endpoint served them, splitting one user into two identities in the POS. All endpoints now serve a single ID per user. (#1465)
  • Hardened the orders API against malformed metadata — a malformed metadata entry in a batch create/update could cause a server error partway through the batch, risking duplicate orders on retry. Malformed entries are now safely skipped and invalid IDs rejected up front. (#1473)
  • POS audit metadata is now server-authoritative — order metadata recording which cashier and store created an order is now stamped by the server and can no longer be altered by the client. Cash amounts are also validated more strictly. (#1464)
  • Internal cloud print improvements — consolidated printer-provider handling; the server now reports which template engines each print provider supports. (#1463)

Full Changelog: https://github.com/wcpos/woocommerce-pos/compare/v1.9.16...v1.9.17

1.9.16Aug 4, 2026

Bug fix

Fixed stale price ranges on variable products. The POS product grid could show an outdated price or price range for a variable product even after variation prices changed — and clearing local data did not help — because the freshly recomputed range was discarded in favour of an old stored value when building the server response. Responses now always serve the current values, so the displayed range matches the live variation prices. The price charged at checkout was always correct; this fixes what the grid displays. Server-side fix — no app update needed.


Full changelog: https://github.com/wcpos/woocommerce-pos/blob/v1.9.16/readme.txt

1.9.15Aug 4, 2026

Security patch

Custom thermal receipt templates can no longer run PHP. A user with POS management access (eg: a shop manager) could embed PHP in a custom thermal receipt template and have it execute when a receipt was rendered, because the thermal engine fell through to the legacy PHP renderer. Thermal templates now render exclusively through the safe Mustache/XML pipeline, which discards embedded PHP; malformed markup fails closed. If you use custom receipt templates, please update.

More reliable thermal receipt rendering. Thermal render failures are now logged so a broken template is diagnosable, and browser-printed HTML receipts are constrained to the configured paper width so wide rows no longer overflow the roll.


Full changelog: https://github.com/wcpos/woocommerce-pos/blob/v1.9.15/readme.txt

1.9.14Jul 31, 2026

Fixed

  • Receipt timestamps now respect your WordPress time format. Receipts could force 12-hour AM/PM times even when your site is set to a 24-hour clock. The receipt date formatter now follows the time format configured under Settings → General, while the store locale continues to control the date language.
  • Hardened cloud-print job handling. Bulk-cancelling print jobs now verifies it is acting on actual print jobs (a POS-level user could previously trigger status changes on unrelated posts), and cancelling is refused for jobs that are not waiting — so a failed job keeps its payload and stays retryable. Also adds regression coverage proving receipt text cannot inject printer control bytes into thermal output (a protection already shipped in earlier releases).

Changed

  • PHP 8.4+ build hardening. The bundled PDF engine now calls PHP 8.4's new functions directly instead of relying on runtime compatibility shims. Installs that loaded the shims were already protected, but a bootstrap that missed them (e.g. a partial plugin update) could fatal when rendering PDF receipts — that failure class is now gone entirely. The same issue broke PDF receipts on WCPOS Pro on PHP 8.4+, fixed separately in Pro 1.9.14.
  • Updated translations.
1.9.13Jul 26, 2026

Fixed

  • Garbled prints on Star CloudPRNT printers. After 1.9.12, receipts sent to Star CloudPRNT printers (the TSP100 line) could print the plain text lines followed by a metre of garbage characters, because cashier-initiated prints were still rendered as ESC/POS — which no Star CloudPRNT printer can decode. WCPOS now serves these printers native StarPRNT for cashier prints too, and automatically corrects the stored printer language on existing installs on the next settings sync (no reconfiguration needed). Other cloud printers are unaffected.

This is the print-path follow-up to 1.9.12's TSP100 StarPRNT fix.

1.9.12Jul 24, 2026

Patch release fixing Cloud Print on Star TSP100 printers and making customer receipt downloads opt-in.

  • Fixed cloud printing to Star TSP100 printers — StarPRNT-native Star printers (the TSP100/TSP100IV line) rejected Cloud Print jobs with a "510 Incompatible Media Type" error and never printed, because WCPOS sent them ESC/POS. WCPOS now serves these printers native StarPRNT, so Cloud Print works on the whole TSP100 family. Other cloud printers are unaffected.
  • Customer receipt downloads are now opt-in — the Receipt button on My Account → Orders (added in 1.9.11) is now off by default and turned on under Settings → General → Customers, with an optional picker to choose which template customers get. Stores that want it must enable it; the [wcpos_receipt] shortcode is unaffected.
  • Fixed the Cloud Print printer name being squeezed — a long or translated status label (eg: French "En attente de l'imprimante") no longer shrinks the editable printer-name field to a few characters; the status now sits on its own row.
  • Fixed receipt template selection for downloaded receipts — gallery templates now resolve correctly for customer receipt links, and the storefront receipt uses the template you selected.
  • Updated translations.

Full history on GitHub — Free · Desktop