Downloads
One till, every device.
Version 1.11.11 · Apple Silicon · .dmg
Download for macOSOn 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
Install the free plugin
The foundation everything connects to. In your dashboard: Plugins → Add New, then search “WCPOS”.
WCPOSFree · GPL
Latest 1.11.10 · WordPress 5.6+ · WooCommerce 5.3+ · PHP 7.4+
- 2
Pick your device
All free, all in sync. Grab the one we detected up top, or any of these.
Desktop app
iOS & iPadBeta
AndroidBeta
- 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 plugin releases. Desktop builds are numbered separately.
1.11.10LatestNov 7, 2026
- A store running a plugin that returns nothing from WordPress's REST dispatch filter syncs its whole catalogue again. WP Activity Log's Redirection sensor does this; the POS asked for every product id, got one page of ten, and silently never finished syncing.
- PDF receipts cap images at 128 MB on every host. The limit used to follow the host's memory_limit, so the same receipt image rendered on one host and showed a broken-image placeholder on another.
- Stripe's card form shows on the POS payment page with WooCommerce Stripe 11.1.1 or later. On older Stripe versions the script stays off the page, because it blocks every other payment method there.
- A guest sale can be paid by card through WooCommerce Stripe. It used to fail with "Missing required customer field: email", so the cashier had to attach a customer first.
- A sale with two coupons on a line whose price includes tax now totals exactly as WooCommerce does.
- The legacy PHP receipt's Total includes tax on stores that display prices excluding tax. It used to print the pre-tax amount.
- Reloading the POS no longer raises an "unknown tax rate" warning before the store's tax rates have been read.
- A sale with a miscellaneous product no longer crashes on stores running MyParcel 6.x.
- A store that is slow to answer when connecting is no longer reported as blocking WCPOS.
- A 1.11 till that meets a store already on WCPOS 2.0 is told to sync before updating, with a link to the upgrade guide.
- Developers: the app's translations come from the 2026.11.1-card tag.
1.11.9Nov 1, 2026
- Fixed POS sales saving with no tax on stores that calculate tax by the customer shipping address -- a regression in 1.11.8. A sale with no shipping address is taxed at the customer billing address, else at the shop base address, as WooCommerce does; the till showed the right tax all along. Orders saved by 1.11.8 with no tax are corrected with Recalculate on the order's edit screen.
- PHP 8.5 no longer logs a deprecation notice on every POS request from the bundled login-token library.
- Developers: the bundled Sentry error-reporting library is updated to 4.34.0.
1.11.8Nov 1, 2026
- New sales start from WooCommerce's own "Calculate tax based on" setting (shop base address, customer billing address or customer shipping address) instead of always the shop base address. A sale with no customer address is still taxed at the shop base address, as in WooCommerce.
- The Extensions screen and its menu badge no longer announce an extension update that needs a newer WCPOS than this site runs.
- The refund window is titled with the order number, not the order's database id.
- Developers: translations updated to 2026.11.0.
1.11.7Oct 28, 2026
- Reading an order from the POS no longer saves it on stores using WooCommerce's High-Performance Order Storage. The first read of a web or admin order could attribute it to the cashier who opened it and make the till's next change to that order fail as out of date.
- A line added to a sale that already has a coupon re-applies the coupon, so the coupon's discount matches the order total (a 10% coupon on a $50 sale stayed at 5.00 after a second $50 line).
- A receipt printed for an order that still needs payment no longer shows a "PAID" row; the Invoice template shows "Amount due" instead. The bundled Detailed Receipt template is updated.
- Variations load correctly on WooCommerce 11.3. A change in how WooCommerce 11.3 applies its on-sale filter dropped variations from the POS's catalogue read, and the till treated them as removed.
- A sale is no longer marked paid when the store's payment check answers with an order that has no status. The pay page's fallback check now waits for a real order status.
- A receipt opened from the device's own data for an order that still needs payment no longer prints a "PAID" row. Offline, or before the store's receipt data arrives, a pending or open order printed "PAID" and the Invoice template hid its "Amount due".
- The loading screen's progress bar is readable on a device in dark mode.
- Developers: the translation template (POT) is updated; Electron desktop runtime 43.8.1.
1.11.6Oct 21, 2026
- Thermal receipts no longer break words in the middle ("devolucione / s") when printed through the print dialog, as a PDF, or as a full-receipt image. Text now wraps at word boundaries, as it does on a receipt printer.
- Receipts open sooner after payment on sites with a heavy theme. The payment window's "paid" signal no longer waits for the theme's styles and scripts to load.
- Saving a product barcode, a cloud-print order, a negative fee's tax or a receipt template no longer saves the record twice. Each write now runs once inside WooCommerce's own save, so other plugins' save hooks fire once, and a cloud print problem no longer leaves an "Error during status transition" note on the order.
- The receipt screen warns when what prints will differ from the template you chose. A thermal template with no receipt printer prints its on-screen preview through the print dialog; an HTML template on a receipt printer prints the built-in layout; an HTML template on a Star CloudPRNT or Epson cloud printer prints nothing.
- Automatic receipt printing no longer waits for the on-screen preview to load when the printer does not use it: receipt printers, cloud printers and already-rendered templates.
- Card terminals and other non-cash gateways open the receipt as soon as the payment completes, instead of waiting for the order to sync.
- A receipt that could not be downloaded in time is reported as that, not as a printer that did not answer.
- Desktop: Epson network printers on port 9100 start printing up to 16 s sooner.
- Guest sales on a store that taxes by shipping address are taxed at the till again. With no shipping address the till now falls back to the billing address, then to the shop address, as WooCommerce does.
- The login screen says the app needs updating when the store's plugin no longer supports it, instead of offering "Re-authenticate" and "No stores found".
- Logs: a catalogue change the store refused is always reported, and switching store mid-sync no longer leaves a row in the other store's log.
- Translations updated to 2026.10.8.
1.11.5Oct 20, 2026
- Web-store sales no longer re-save the product when they reduce stock. This fixes a checkout error and a doubled stock deduction on bank-transfer orders that a few stores saw, and keeps product descriptions exactly as you wrote them.
- Developers: the
woocommerce_product_set_stock/woocommerce_variation_set_stocklistener andProducts::product_set_stock()are removed; WooCommerce has bumped the product's modified date on every save since 3.4.0.