Downloads

One till, every device.

macOSDetected

Version 1.11.3 · 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.11.5 · 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 plugin releases. Desktop builds are numbered separately.

1.11.5LatestOct 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_stock listener and Products::product_set_stock() are removed; WooCommerce has bumped the product's modified date on every save since 3.4.0.
1.11.4Oct 20, 2026
  • A failed translation download no longer slows every POS and admin request. It is retried after an hour instead of on every request -- stores whose host cannot reach the translation CDN were waiting minutes for the POS to load; English stores were not affected.
  • Checkout and refunds no longer stop working after the browser tab or desktop window wakes with sync requests still in flight. Every later request to the store failed until the page was reloaded.
  • A completed order no longer logs "a change on this device clashed with an edit in your store". The first retry of a save was reported as a conflict even though the order had saved.
  • Logs and toasts alarm only when there is something for you to do. A retry the app handles itself is now an information row; a warning names the record, says what happened and links to where it is fixed.
  • A sale that times out while sending is reported as "still on its way", not as failed, so it is not entered twice.
  • A refund whose result could not be confirmed says so and tells you to check the order before trying again.
  • A storage error whose text happened to contain "409" or "CONFLICT" is no longer reported as a clash with your store. The real error is shown instead.
  • Web: the first download is a fifth smaller. Error reporting and date-format languages load only when they are needed.
  • Translations updated to 2026.10.7.
1.11.3Oct 17, 2026
  • Couponed sales no longer come back as "different totals" on stores with tax-inclusive prices or compound tax rates. Each discount and its tax are now rounded the way WooCommerce rounds them.
  • Sync no longer stalls silently when the store never answers a request. A request left unanswered for a minute is given up and retried instead of holding its sync lane until the app is restarted.
  • The 1.11.1 memory fix now covers large catalogues and idle tills. The sync's stock-existence checks kept every page of the product list in memory, and background re-syncs rewrote rows that had not changed.
  • Enter Demo Store works on web when the browser blocks popups. The demo signed in through the fallback redirect, but the result was never picked up, so nothing opened.
  • iOS: the cart quantity no longer shows the previous value after a quick run of taps. The order was right; only the field lagged.
  • Centred and right-aligned receipt text prints in the right place on Star CloudPRNT and ESC/POS cloud printers. Text was aligned twice and landed right of the logo; the preview was already correct.
  • Retrying a payment after a declined attempt no longer leaves Process Payment spinning. A gateway that showed the same error again was read as nothing new, so the button stayed busy for ten seconds.
  • Developers: the native and desktop apps send an X-WCPOS-Instance header identifying the installation on every store request, web sends it once a per-site probe confirms the header passes, and the integrity drift-rebuild counter is kept per till by it (falling back to user and store), so several tills can no longer trigger a rebuild together; X-WCPOS-Instance joins the CORS allow list; translations updated to 2026.10.3.
1.11.2Oct 15, 2026
  • The POS no longer grows in memory through a cashier day. Background sync reads, the search index's start-up reads and the storage engine's change history were each kept for the life of the page; an all-day till on web, desktop and mobile now holds steady.
  • Desktop no longer adds a listener on every sync poll. Each change check left one more abort handler on the store's connection, thousands over a day.
  • Process Payment stops spinning when the store's pay page blocks a sale. A third-party gateway script that vetoes the submit is reported back with the store's notice instead of leaving the button busy.
  • Cash and Card tenders submit the pay form directly, so another gateway's checkout script can no longer cancel them.
  • Stripe's checkout script stays off the POS payment page on stores with an older saved script list. The shipped removals are now a floor that a saved list adds to, and they show as always removed in Checkout Settings.
  • The pay page always has a payment method preselected. A default gateway that was disabled or removed now falls back to the first enabled one instead of failing with "Invalid payment method".
  • Receipt PDFs keep Greek and other non-Latin text instead of printing "?" for labels, dates and payment methods.
  • The plugin download is a third smaller. Template gallery previews load from a CDN and unused PDF fonts are no longer bundled.
  • Developers: translations updated to 2026.10.0; a site can host its own gallery previews with the woocommerce_pos_template_gallery_preview_base_url filter.
1.11.1Oct 15, 2026
  • Cash and card payments work again on stores running WooCommerce Stripe 11.1.0. Stripe's checkout script now stays off the POS payment page, where since Stripe 11.1.0 it blocked every other payment method with "Payment failed. Please try again."
  • A payment page for an order that no longer exists answers "not found" instead of crashing inside another gateway's code.
  • Free sites offer Cash and Card at the till consistently. The free-tier gateway rule applied only to the settings screen; it now applies wherever the POS reads its gateways, and falls back to an enabled gateway rather than a disabled default.
  • POS login lockouts are keyed by account and connecting device. Forwarded address headers are no longer trusted, and five wrong passwords from one place no longer lock the cashier out everywhere.
  • The POS login page only redirects to known origins. A sign-in link can no longer hand the cashier's tokens to another site.
  • A failed sign-in no longer leaves a phantom session in the Sessions list.
  • Developers: the uninstall cleanup definitions load on their own so Pro can reuse them; CI fails when the vendored worker's RxDB moves inside a published plugin lane.
1.11.0Oct 14, 2026
  • Sync now finishes its check for records deleted on the store. Tills on some stores rejected that check and never removed orders or customers deleted in WooCommerce.
  • A guest customer entry no longer stops customer sync. A change recorded for the Guest customer could stall the customer lane on a till.
  • Long product searches no longer fail on variable products. Searches of more than ten words, or a long scanned barcode, now return results instead of an error.
  • Orders no longer go missing from search. A background index cleanup could restore an order's older text, so a sale stopped matching its own order number.
  • Checkout failures show one error, not two. A failed sale reported the same error twice; it now shows once, with the store's reason when one is given.
  • Adding a customer whose email already exists now says so. The store's message, such as "an account is already registered with this email", replaces a generic error.
  • A cashier who is signed out in another tab now sees why sync is paused. The till recovers on its own as soon as another tab renews the session.
  • Stores behind a caching host can connect again. A host cache that replayed old responses no longer blocks connecting; the app works around it.
  • Damaged local sync data repairs itself. A damaged row in a till's record of which orders exist on the store is now dropped and re-checked with the store, instead of being refused on every launch.
  • The app no longer rebuilds its local storage indexes on every launch. A storage check mistook normal edits for damage and rebuilt the indexes each time the app reopened.
  • A payment page that fails to load on Android now offers Retry. Process Payment no longer spins forever when the store's payment page cannot load.
  • Typing quickly in Android search no longer logs sync errors. A search cancelled by the next keystroke is now treated as cancelled.
  • Opening the POS page no longer signs out a till that is already open. A page load now reuses the browser's live session instead of revoking it.
  • The POS survives a plugin update in progress. A request that lands mid-update retries instead of failing, and Site Health checks the plugin's files against the published checksums.
  • PrintNode and Star cloud printing stop retrying a bad key or account. A 401, 403 or 404 fails once with a clear message.
  • Cloud printing explains that it needs HTTPS. Sites without HTTPS get a clear message instead of a relay error.
  • A shop manager can no longer list or end an administrator's POS sessions. On multisite this includes administrators of archived or deactivated network sites.
  • The order-pay coupon form requires the order key, as the pay form already does.
  • Refunds stay attached to matched orders on HPOS stores.
  • POS Only products are hidden from ID-listing queries and related products.
  • The old /wcpos-login/ page is retired, and lookalike paths no longer serve the sign-in form.
  • Order paid dates follow one rule for all three payment-complete answers.
  • Developers: storage engine updated to RxDB 17.6.0; clearer error reports for failed pushes and checkout timeouts; Guest (customer id 0) never enters the sync journal; the order-meta receipt snapshot is no longer written and existing rows are cleaned up; a query-string token signs in REST requests only; the scheduled integrity digest rebuild retries on database contention; updated translations template.

Full history on GitHub — Free · Desktop