PluginProbe
WCPOS – Point of Sale (POS) plugin for WooCommerce / 1.10.21
WCPOS – Point of Sale (POS) plugin for WooCommerce v1.10.21
1.10.24 1.10.23 1.10.22 1.10.21 1.10.20 1.10.19 1.10.18 1.10.17 1.10.16 1.10.15 1.10.13 1.10.14 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 untagged-3d9b7ccddc54df87c672 1.10.7 1.10.6 1.10.5 1.10.3 1.10.4 1.10.2 1.10.1 All 168 releases
← All changes | readme.txt +223 -124 1.10.0 → 1.10.21 View file →
@@ -2,9 +2,9 @@
2 2 Contributors: kilbot
3 3 Tags: ecommerce, point-of-sale, pos, inventory, woocommerce
4 4 Requires at least: 5.6
5 5 Tested up to: 7.1
6 -Stable tag: 1.10.0
6 +Stable tag: 1.10.21
7 7 License: GPL-3.0
8 8 License URI: http://www.gnu.org/licenses/gpl-3.0.html
9 9
10 10 Turn any device into a register for your WooCommerce store — same catalog, stock and prices, online or off.
@@ -112,10 +112,17 @@
112 112 = Where do I get help? =
113 113 Browse the documentation at [docs.wcpos.com](https://docs.wcpos.com), or reach the community and Pro priority support on [Discord](https://wcpos.com/discord).
114 114
115 115 = What data does WCPOS send outside my site? =
116 -WCPOS keeps your data in your own WooCommerce database, unless you turn on a feature that relies on an outside service. It contacts outside services to: load the POS web bundle, other interface assets, and translations from a CDN (jsDelivr); send anonymous usage analytics to wcpos.com **if you opt in** (withdraw any time in settings); validate your license key, site identifier (`site_uuid`), and anonymous identifier (`anon_id`) with wcpos.com when you activate Pro; and relay cloud print jobs through the WCPOS Cloud Print relay at cloudprint.wcpos.com **if you use cloud printing** — your site registers with the relay automatically when you open the Cloud Print settings, and each print job for a relay-addressed printer is then passed through the relay to your configured cloud printer, so the receipt contents (which include order details) leave your site (developers can opt out with the `woocommerce_pos_cloud_print_relay_enabled` filter). Full details are in our [privacy policy](https://wcpos.com/privacy).
116 +Your products, orders and customers stay in your own WooCommerce database. WCPOS only talks to outside services for a few specific reasons:
117 117
118 +* **To load the app.** The POS interface, its assets and translations are served from a CDN (jsDelivr), like any web app.
119 +* **To find and fix bugs — only if you opt in.** With your permission, WCPOS sends us anonymous usage data (which features are used, on what kind of setup) and anonymous error reports from the POS and from the WCPOS plugin on your server (what went wrong, on which version and platform). This is how we spot problems before you have to write in, fix them faster, and decide what to build next. It never includes customer details, order contents, prices or your site address, and you can change your mind any time in POS > Settings > General.
120 +* **To activate Pro.** Your license key, site identifier (`site_uuid`) and anonymous identifier (`anon_id`) are validated with wcpos.com.
121 +* **To print through the WCPOS Cloud Print relay — only if you use cloud printing.** Your site registers with the relay at cloudprint.wcpos.com when you open the Cloud Print settings, and print jobs for relay-addressed printers are passed through it to your printer, so those receipt contents (which include order details) leave your site. Developers can opt out with the `woocommerce_pos_cloud_print_relay_enabled` filter.
122 +
123 +Full details are in our [privacy policy](https://wcpos.com/privacy).
124 +
118 125 == Screenshots ==
119 126
120 127 1. WCPOS main screen
121 128
@@ -120,154 +127,246 @@
120 127 1. WCPOS main screen
121 128
122 129 == Changelog ==
123 130
124 -= 1.10.0 - 2026/08/25 =
131 += 1.10.21 - 2026/10/06 =
125 132
126 -**A new sync engine.** The biggest update since we rebuilt WCPOS in React Native back in 2023. Your store now syncs through a change log -- the POS asks what changed since it last checked, instead of re-downloading your catalogue every time. It is the foundation the offline queue and Store Health below are built on.
133 +- **Till totals now match your store to the cent** on stores that round tax at subtotal level.
134 +- **Adding a Bluetooth printer no longer crashes the app** on iPad and iPhone.
135 +- **Cashiers can only edit customer accounts**, never staff accounts.
136 +- **Changing a user's password signs them out of the POS on every device.**
137 +- **Cashiers can edit and delete their own sales again** when their role lacks "edit others' orders".
138 +- **Payment gateways with no customer-facing title now show a name** in POS settings and at the till.
139 +- **Fixes for stores using High-Performance Order Storage:** cash tendered and change, tax-ID suggestions and fiscal submission status now read correctly.
140 +- **Connecting the app to a store with no REST link on its front page works again.**
141 +- **A staging copy of your store no longer overwrites the live store in the app's site list.** A store moved to a new domain appears as a new site and needs connecting once more.
142 +- Developers: a faster product-ID listing on `wcpos/v2`, advertised as a capability on `GET /wcpos/v2/status`. Details on GitHub.
127 143
128 -- **Prevent overselling (new, optional).** Turn it on in Checkout settings: the POS stops you adding more than you have, and the server refuses the order too, so a stale device can't oversell either. Backorders are respected.
129 -- **Built to survive a dropped connection.** Browsing, cart building and saving orders keep working offline, and the new sync engine queues the changes you make and replays them when you reconnect -- receipt emails, and customer, coupon and stock edits on Pro. Anything the server rejects is listed with the reason so you can fix and resend it, instead of disappearing silently. Taking payment is the one step that still needs a connection -- offline checkout, starting with cash, is the focus of 1.11.
130 -- **Barcode scanning, rebuilt.** Scan with the device camera on any platform. Support for USB, serial, Bluetooth and Bluetooth LE scanners alongside keyboard-wedge. A setup wizard and a test panel that measures your scanner and tells you what to fix. Optional scan sounds.
131 -- **Store Health.** New screens showing what's on the device versus the server, real storage usage, sync performance over time, and a searchable log where every warning links to an explanation.
132 -- **Search that finds what WooCommerce finds.** Product search now matches inside words, so compound words work (searching "saippua" finds "Kuorintasaippua"). Customer search matches full names.
133 -- **Printing.** Star cloud printers negotiate their format properly, receipts can be rendered server-side as an image for printers that need it, and auto-print rules can fire on order creation or only once paid. Offline receipts print in the right language.
134 -- **Settings redesigned.** A calmer, row-based layout with shorter labels. Settings and Store Health now open as panels rather than modals.
135 -- **Cashiers can create and edit products by default.** Deleting stays opt-in, and catalogue edits are checked against real WordPress permissions -- a rejected edit is reverted with the server's reason shown.
136 -- **Fixed dropdowns not opening on iPad**, and language changes not reaching every part of the app.
144 += 1.10.20 - 2026/09/23 =
137 145
138 -**Note for developers:** 1.10.0 introduces the `wcpos/v2` REST namespace. The POS now uses it for syncing and for the shared POS services that were previously served from `wcpos/v1`. The `wcpos/v1` routes still register but are frozen, and some legacy `API\Settings` controller methods have been removed. See the full release notes for the complete list of breaking changes.
146 +- **Checkout no longer reports "Checkout failed" for a sale that reached the store.** If the till was busy sending another change, or an earlier attempt had failed, the checkout screen could give up waiting even though the order had been saved. It now hears back as soon as the order is saved, and pressing Checkout again after a failure tries straight away.
147 +- **Search repairs a damaged search index instead of failing at every launch.** When the saved search index could not be read, search stayed broken with "Failed to initialize search". The index is now discarded and rebuilt from the till's records.
148 +- **Gateways that take no payment at the till — quotes, invoices, purchase orders — now close the order with the Order Status you set for them.** The checkout used to succeed but leave the order at POS - Open. Only gateways with an Order Status saved in POS > Settings > Checkout are affected, and the order is not marked paid.
149 +- **Refunds that arrive from a payment gateway now respect your POS customer-email settings.** A refund recorded by a gateway's webhook could email the customer even with POS customer emails switched off; refunds made in wp-admin or at the till were not affected.
139 150
140 -**Please don't update lightly.** This is a major update -- update when your store is quiet and you have time to check everything over.
151 += 1.10.19 - 2026/09/19 =
141 152
142 -= 1.9.17 - 2026/08/07 =
143 -- **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.
144 -- **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.
145 -- **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.
146 -- **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.
147 -- **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.
148 -- **Internal cloud print improvements** -- consolidated printer-provider handling and the server now reports which template engines each print provider supports.
153 +- **A till no longer loses live records during its startup tidy-up.** With the POS open twice on the same device, the tidy-up could mistake live records — including the sign-in row — for damaged ones and remove them. It now leaves alone anything it cannot fully account for. Web merchants receive this through WCPOS plugin 1.10.19, which serves the storage worker; desktop and phone apps carry it in this release.
154 +- **A sale that could not be sent because the till was signed out now waits for sign-in instead of being given up on.** The cashier is told as soon as it happens, and the sale sends itself once the session is back.
155 +- **A refused POS request now says why it was refused.** A 401 from the POS routes names the reason in the response and in Health > Logs, instead of only reporting that the request failed.
149 156
150 -= 1.9.16 - 2026/08/05 =
151 -- **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.
157 += 1.10.18 - 2026/09/18 =
152 158
153 -= 1.9.15 - 2026/08/04 =
154 -- **Security: 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.**
155 -- **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.
159 +- **A web till with the POS open in more than one tab repairs its local database again.** Since the 1.10 storage repairs shipped, every repair on web was refused whenever another tab of the same store could be open, so a damaged record stayed damaged and the same storage errors repeated on every sync. The tab that leads the store now owns the repair and the other tabs follow it. Web merchants receive this through WCPOS plugin 1.10.18, which serves the storage worker; desktop and phone apps carry it in this release.
160 +- **Voiding an order the server had refused no longer fails silently.** When an order could not be created on the server (for example while the till was signed out) and the cashier then voided it, the void raised an error nothing caught and the order stayed in the cart. The till now removes the order and its failed request locally and confirms the removal; any other failure to void shows an error instead of nothing.
161 +- **A till opened from WordPress admin no longer sends an invalid sign-in token on its first requests.** A request made before a token was stored carried the word "undefined" as its credential, which the server rejected as an invalid token instead of falling back to the WordPress login session. Such requests now carry no token, and a retry after a token refresh no longer keeps the old token in the request address.
162 +- **A plugin update no longer restores cashier permissions the merchant had removed.** Every update re-granted every default capability, so a store that had turned off product or coupon editing for cashiers saw it come back after each release. Updates now grant only capabilities that are new since the last update; a deleted cashier role is still recreated whole.
163 +- **Product search on the older `wcpos/v1` routes splits the typed text the same way as the rest of the POS.** Punctuation stays literal and single letters and common words count, so "IT 5012" no longer searches as "5012" and "0,4" is one term.
164 +- **An order digest write no longer fails on a busy MariaDB.** The checkout-lane digest write now retries once on lock contention, as the product and customer digests already did.
165 +- **The older order-update route checks order ownership the same way as the current one under HPOS.** A role that can edit its own orders but not other people's is treated the same on both routes. Cashiers are unaffected.
156 166
157 -= 1.9.14 - 2026/07/31 =
158 -- **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.
159 -- **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.
160 -- **PHP 8.4+ build hardening** -- the plugin's 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 (eg: a partial plugin update) could still hit a fatal error 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.
161 -- **Updated translations.**
167 += 1.10.17 - 2026/09/17 =
162 168
163 -= 1.9.13 - 2026/07/26 =
164 -- **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.
169 +- **A till no longer gets stuck at login on "Something went wrong: useStoreSession must be called within an active store session".** A damaged range in the till's local database made the login write fail and left the cashier on a red banner. The write is now repaired and retried, and if the saved session still cannot be honoured the till returns to the store list with a message instead of the banner. If the site has to be added again, it opens a fresh local database and does not pick up sales still waiting to sync in the old one. Web merchants receive the storage repair through WCPOS plugin 1.10.17, which serves the storage worker; desktop and phone apps carry it in this release.
170 +- **A newly connected till no longer misses a stock change made in its first minute.** A product set out of stock on the server shortly after a new device, login or reset stayed "in stock" on the till indefinitely. The till now records the server's position before the first browse, so the change arrives with the next sync.
171 +- **A variation whose stock is managed at product level shows the right stock in the variation picker.** When the parent product sold out, the picker's badge and Add to Cart button kept saying "in stock" for up to five minutes. They now read the parent's stock, the same way the cart does.
172 +- **Switching stores no longer carries the previous store into the first requests of the new one.** Requests made while a switch was still completing used the outgoing store, so the first products or barcodes could belong to it until the next sync. Pro multi-store only.
173 +- **Health > Logs records a screen error the app catches** as "Part of the screen failed to load", and reports it when you have allowed error reporting.
165 174
166 -= 1.9.12 - 2026/07/24 =
167 -- **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.
168 -- **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.
169 -- **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.
170 -- **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.
171 -- **Updated translations.**
175 += 1.10.16 - 2026/09/16 =
172 176
173 -= 1.9.11 - 2026/07/24 =
174 -- **New: WCPOS Cloud Print relay** -- if your hosting or firewall blocks a cloud printer's direct connection (a permanent "Waiting for printer"), WCPOS now routes Star CloudPRNT and Epson Server Direct Print polling through the WCPOS Cloud Print relay automatically, and print jobs start on the printer's next poll instead of waiting for the next heartbeat. Printer cards tell you when a security layer is blocking cloud print. When the relay is used, print jobs (receipt contents) pass through cloudprint.wcpos.com -- see the privacy FAQ. Site owners can opt out in code.
175 -- **New: Cloud Print queue** -- the Cloud Print settings screen now shows a live queue of your print jobs and their status, so you can see what has printed, retry a failed job, and clear the backlog. Completed job payloads are stripped and old jobs are purged automatically.
176 -- **New: receipts on your online store** -- customers can download their order receipt as a PDF, rendered with your WCPOS receipt template, from a new Receipt button on My Account > Orders. A [wcpos_receipt] shortcode is also available for the order-received or custom pages.
177 -- **Fixed cloud printers that mangle the poll URL** -- printer credentials now travel in the URL path, so printer firmware that URL-encodes the query string (eg: Star TSP100IV) can authenticate. Existing configured printer URLs keep working.
178 -- **Fixed the WCPOS Pro license image** -- the Pro panel now loads its image correctly.
179 -- **Updated translations.**
177 +- **Cashiers can sell an out-of-stock variation again when "Avoid overselling" is off.** The variation picker's Add to Cart button disabled on stock alone and ignored the store setting, so an out-of-stock simple product could be sold but an out-of-stock variation could not. The button now follows the same rule as the cart: it disables only while the setting is on and the variation is unsellable.
178 +- **An idle web POS no longer sits at 30% CPU after the cashier stops.** Local database cleanup compacted storage fifty records at a time and rewrote every index between batches, so a till with a large backlog of deleted records churned for minutes. Cleanup now compacts in one batch and rewrites the indexes once. The web app loads its storage worker from this plugin, so web merchants receive this fix through this update.
179 +- **Health > Database no longer shows "checking…" forever on a server that reports high load.** A host that stamps every response as under high load while answering in a tenth of a second kept the till backed off, and the backed-off checks always started with the same three record types, so the other six never got a turn. Checks now rotate fairly, all record types are probed on each backed-off tick, and a "high load" header on a fast reply no longer counts against the server.
180 +- **Health > Performance says what pace the till is keeping with the server, and why.** One line at the top of "Your server, over time" reads Normal pace, Easing off (with the factor and the reason), or Paused until a given time.
181 +- **Tills stop showing products the store has hidden from the POS.** Between 1.10.1 and 1.10.14 the POS product search could return a hidden product (fixed in 1.10.15), and a till that searched during that window kept a copy. Upgrading now writes a fresh removal notice for every hidden product and variation, and every till drops its stale copies on its next ordinary sync, with no reset or manual sync needed.
182 +- **The POS Only and Online Only counts above the WooCommerce products list are accurate.** They counted trashed and auto-draft products that the view never lists; they now count the same statuses as WordPress's own "All" view.
183 +- **The server no longer reports high load from a guessed CPU count.** On hosts that hide `/proc/cpuinfo`, the load average was divided by one CPU, so any load above 1.8 read as "high" forever and every till slowed its sync. When the CPU count is unknown, no load is reported.
184 +- **The connection check can no longer be served from a page cache.** The public ping was answered before the cache-control headers were set, so a cached "ok" could mask an outage for the cache's lifetime. It now sends the same no-store headers as every other POS response.
180 185
181 -= 1.9.10 - 2026/07/22 =
182 -- **Fixed stale prices on products converted from simple to variable** -- variable products now show the lowest price of their current visible variations in the POS, instead of a leftover price left behind by the conversion.
183 -- **Fixed a fatal error in the receipt template editor on translated stores** -- receipt previews no longer crash when a translated label contains a literal percent sign (reported on Czech stores).
184 -- **Fixed cloud printer polling** -- Star CloudPRNT and Epson Server Direct Print polling URLs now include the marker WCPOS requires, so the URL you copy from the settings screen works as-is. Star results in the 2xx family (eg: 211 Paper Low) now count as printed rather than failed, and polling problems are recorded in the WCPOS logs with enough detail to act on.
185 -- **Refresh button on the Extensions screen** -- re-check the extensions catalogue on demand instead of waiting for the hourly cache to expire.
186 -- **Fixed the missing POS favicon** -- POS browser tabs and home-screen shortcuts show the WCPOS icon again.
187 -- **Updated translations.**
186 += 1.10.15 - 2026/09/15 =
188 187
189 -= 1.9.9 - 2026/07/18 =
190 -- **Security: hardened receipt/report template file resolution** -- the templates REST endpoint now strictly validates the requested template type and confirms that resolved template files stay inside the plugin's trusted template directories, closing a path-traversal issue. All stores should update.
191 -- **Fixed payment links blocked by trailing-slash rewrite rules** -- POS checkout, receipt and login URLs now follow your site's permalink trailing-slash style, so rewrite rules that force a trailing slash no longer redirect these links to an http target and get blocked as mixed content.
192 -- **Updated translations.**
188 +- **Tills no longer grow to gigabytes of memory over a long shift.** The product search index was keeping up to a hundred complete copies of itself in memory as it updated. Measured on a test store, memory after cleanup grew from 46 MB to 404 MB in an hour before the fix and from 47 MB to 160 MB after it; this is what took one merchant's till to 3.2 GB over an eleven-hour shift.
189 +- **The Logs screen no longer freezes the app.**
190 +- **Product search finds a product however you order the words.** Searching "blue shirt" and "shirt blue" now return the same results.
191 +- **Start-up repair of a damaged local database is safer.** Oversized internal change logs are now bounded and recovered without unbounded reads, and the app no longer rewrites bookkeeping records that have not changed. The web app loads its storage worker from this plugin, so web merchants receive this fix through this update rather than through the app bundle.
192 +- **A sync refresh that returns the same record twice is rejected** instead of being applied against an incomplete snapshot, which could previously prune records that were still present on the server.
193 +- **Product search shows every match again.** When a search matched more products than fit on the first page, the Products page stopped at that page and scrolling to the end loaded nothing more.
194 +- **The product search index repairs itself again.** When the app detected that the index had drifted from the product data, the rebuild silently did nothing, so stale or missing search results stayed that way until the app was reinstalled.
193 195
194 -= 1.9.8 - 2026/07/17 =
195 -- **Fixed blocked payment and receipt links on https stores** -- checkout payment, receipt and login links now respect the Force SSL setting, so the order-pay popup is no longer blocked as mixed content on stores served over https while the WordPress home URL is still http (eg: behind Cloudflare Flexible SSL or other SSL-terminating proxies).
196 -- **Force SSL toggle restored** -- the Force SSL setting is back in the WCPOS settings under a new Advanced section, so stores that intentionally run over http can turn it off.
196 += 1.10.14 - 2026/09/14 =
197 197
198 -= 1.9.7 - 2026/07/15 =
199 -- **Receipts can now show savings** -- receipt templates can display regular prices, per-line savings and a Total Saved line, with correct right-to-left (RTL) previews and localized labels.
200 -- **Better black & white printing** -- gallery receipt templates now print safely on B&W receipt printers, while PDF receipts keep their colours.
201 -- **Resizable template editor panel** -- drag to resize the fields panel in the receipt template editor.
202 -- **Improved welcome-screen analytics** -- consented admin landing payloads now include hostname-only site and admin domains so WCPOS can understand where opted-in stores come from without sending full URLs or paths.
203 -- **Fixes** -- order version stamping now only happens when the POS creates an order; safer file-permission fallback when WCPOS writes files.
204 -- **Updated translations.**
198 +- **Product search matches what you type as one phrase, in the order you typed it.** Searching for two words no longer also returns products with those words reversed, separated, or split between the title and the SKU. Partial and exact SKU and barcode matches work as before, and one- and two-character searches now match anywhere in a word.
199 +- **The receipt template dropdown now lists templates in the order you set them**, for global templates and Pro per-store templates alike.
200 +- **Switching the app language repeatedly no longer holds every previous product search index in memory.**
201 +- **The WCPOS REST API index no longer errors when a client asks it for route help.** Only developers and integrations reading the API index were affected.
205 202
206 -= 1.9.6 - 2026/06/17 =
207 -- **Cash drawer support** -- open a connected cash drawer automatically after payment or on demand with a new Open Drawer button. Choose a drawer connector per printer, with support for thermal/ESC-POS printers, Epson, PrintNode, and cloud/remote print jobs.
208 -- **Fixed an analytics event firing too often** -- the upgrade prompt "viewed" event no longer fires on every admin page load.
209 -- **Updated translations.**
203 += 1.10.13 - 2026/09/13 =
210 204
211 -= 1.9.5 - 2026/06/15 =
212 -- **Fixed a payment gateways API crash** -- the POS payment-gateways endpoint no longer initialises every gateway's admin settings, which could cause a fatal error (HTTP 500) on stores using certain third-party payment gateways (e.g. ToyyibPay) that only register their settings in the WordPress admin.
205 +- **Web: start-up repair of a damaged local database now applies each pending change to the row it belongs to**, rather than to that row's position, and refuses a stale change for a row already holding a newer entry. The desktop and mobile apps received this in 1.10.12; the web app loads its storage worker from this plugin, which still carried the previous copy.
213 206
214 -= 1.9.4 - 2026/06/13 =
215 -- **Redesigned Bluetooth printer setup** -- a managed Bluetooth chooser with connection timeouts, paired-device discovery on macOS and Linux, clearer scan feedback, and guidance to add a printer manually when none are found.
216 -- **Added serial printing** -- OS-paired Bluetooth Classic printers can now print over a serial connection.
217 -- **Improved Windows printing** -- raw printing routes through the Windows print spooler, with a dedicated installed-printers section for Windows.
218 -- **Improved USB printer flow** -- the USB printer list loads automatically when you open the tab, and the Scan button becomes Refresh.
219 -- **Clearer network printer scans** -- empty network scans now explain how to add a printer by manual IP entry, and a crash when closing network printer connections was fixed.
220 -- **Improved PDF receipts for legacy templates** -- the legacy receipt template renders through the PDF preprocessor with inline layout styles so downloaded PDFs match previews, and the receipt logo uses the correct image type.
221 -- **Fixed template syncing** -- stopped an infinite sync loop affecting receipt templates.
222 -- **Added an anonymous analytics identifier** -- a random, consent-gated identifier (`wcpos_anon_id`) used only on the plugin's admin welcome screen to keep its first-party analytics consistent; it contains no store data, can be rotated or removed via WP-CLI, and is deleted on uninstall (see the Privacy section).
223 -- **Updated translations** -- latest POT and translation metadata through 2026.6.4.
207 += 1.10.12 - 2026/09/13 =
224 208
225 -= 1.9.3 - 2026/06/12 =
226 -- **Improved web printer setup** -- network printer scans now explain browser limitations, show structured connection diagnostics, and give protocol-aware error guidance for web printing.
227 -- **Added Local Network Access support** -- web print requests and printer probes opt into Chrome's Local Network Access permission so printers on your LAN keep working in newer browsers.
228 -- **Fixed Star WebPRNT connections** -- the print protocol is now derived from the printer port instead of the page origin, and scanned printer ports are preserved when switching vendors.
229 -- **Improved product sorting settings** -- expanded sort options with a more compact sort settings row in POS product settings.
230 -- **Fixed stale variation images** -- product variations no longer briefly show a previous variation's image.
231 -- **Fixed receipt tax breakdown** -- client-rendered receipts keep the tax breakdown, and the tax summary stays hidden when taxes are hidden.
232 -- **Fixed PDF receipt rendering** -- receipt markup rewritten for Dompdf so downloaded PDFs match previews, with fixed image and column rendering and aligned status-chip dots.
233 -- **Fixed order date syncing** -- bare GMT order creation dates are accepted and legacy order date validation retries, fixing failed order syncs for some stores.
234 -- **Added WooCommerce 10.9 compatibility** -- accepts the new variation gallery field in the WooCommerce 10.9 REST API.
235 -- **Updated translations** -- includes the latest POT and translation metadata through 2026.6.2.
209 +- **Cloud print and template reprints: a heading asked to be double-wide printed double-high.** The size command carried width and height the wrong way round. Square sizes are unaffected, which is why it went unseen for so long.
210 +- **Cloud print: centred headings no longer overrun the paper.** Padding on a scaled heading was counted in characters rather than printed columns, so a centred double-width title was pushed right and wrapped onto a second line.
211 +- **A product or order carrying an enormous meta value no longer takes down the request.** One store was losing about 22 requests an hour to a single record whose meta value serialised to roughly 1.25 GB. The value is now withheld rather than re-encoded, so the record loads instead of the till retrying it all day.
212 +- **Star printers: centred headings print centred, and the time prints correctly.** Centring padding was emitted as spaces inside a magnified run, so each pad space was as wide as each glyph and a centred double-width heading wrapped. The narrow space in a short time no longer prints as a question mark.
213 +- **Switching stores no longer tells the cashier to sign in again for the store they just opened.** A sign-in retry still in flight from the previous store could raise the message against the new one.
214 +- **A store whose session has expired no longer records an error every minute.** The same failure was reported on every check because it was filed under a name the de-duplication never matched.
215 +- **Start-up repair of a damaged local database matches each pending change to the row it belongs to**, rather than to that row's position, and refuses a stale change for a row already holding a newer entry.
216 +- **Creating a virtual printer no longer fails intermittently with a certificate error.**
236 217
237 -= 1.9.2 - 2026/06/09 =
238 -- **Added Star Online cloud printing support** -- connect Star Online printers, fetch registered devices, validate printer settings, and submit cloud print jobs from WCPOS.
239 -- **Redesigned printer settings** -- refreshed the printer setup screens with shared tabs, clearer printer profile fields, improved select styling, and better vendor/provider handling.
240 -- **Improved responsive controls** -- tabs can collapse into a select control on smaller screens, and native comboboxes scroll and search more reliably on Android and other native layouts.
241 -- **Improved printer discovery UI** -- network scans show progress, collapse candidate printer lists, and keep web network scanning focused on the Add Printer flow.
242 -- **Added product sorting controls** -- POS product grid and list views now support Sort By controls and Meta Data Key selection for custom catalog ordering.
243 -- **Improved cloud print setup** -- the Add Printer wizard no longer pre-selects a provider, shows clearer Star Online permission messages, and supports explicit encoding settings.
244 -- **Added server-side PDF receipt downloads** -- receipt PDFs now use native WP Overnight PDF bytes where available and render flex/grid layouts and barcodes more reliably.
245 -- **Fixed cloud printer access** -- POS clients can read configured cloud printers without requiring broader admin permissions.
246 -- **Fixed blank template titles** -- POS templates now get fallback names when the saved title is empty.
247 -- **Updated translations** -- includes the latest POT and translation metadata through 2026.6.0.
218 += 1.10.11 - 2026/09/11 =
248 219
249 -= 1.9.1 - 2026/05/19 =
250 -- **Improved session recovery** -- expired POS sessions now refresh or ask for login correctly, while real permission errors no longer look like login problems.
251 -- **Fixed theme display issues** -- web navigation backgrounds now update correctly after changing themes.
252 -- **Fixed printer setup navigation** -- printer vendor tabs now respond correctly after the 1.9.0 printer flow changes.
253 -- **Updated translations** -- includes the latest translation metadata for improved app language support.
220 +- **The web app's local database can shrink again after it has grown large.** The clean-up that reclaims space failed on every attempt once the file was very large, so it only ever grew and the till could fail to start on it.
221 +- **Rows zeroed by a power cut or an unfinished write no longer stop local database clean-up**; they are recognised as empty and dropped.
222 +- **Stores behind Cloudflare: a security check during connection now reports HOST121 with a link to the Cloudflare guide**, instead of "Site does not seem to be a WordPress site".
223 +- **Stores behind Cloudflare see a notice on the POS General settings screen** explaining which firewall rule to add so the POS is not blocked.
224 +- **Firefox and Safari: cancelling a product search no longer records a SYNC321 error.**
225 +- **A new order sent to WooCommerce no longer carries stale line ids**, which WooCommerce rejected with "invalid item id" when the order had already been acknowledged once.
226 +- **Product search no longer loops or crawls on large catalogues.** A search with more than 100 matching products could re-request the same pages until the page was reloaded, and every scroll re-fetched the results from the start.
227 +- **Search results are no longer capped at 100 products**; scrolling loads the rest, one page at a time.
228 +- **Product search fills the grid faster on slow hosting**: one request per page replaces the previous escalating sequence of four.
254 229
255 -= 1.9.0 - 2026/05/15 =
256 -Almost three months of work — here are the highlights:
230 += 1.10.10 - 2026/09/09 =
257 231
258 -- **New receipt template gallery** — pick from ready-made receipt, invoice, quote, packing slip, gift receipt, kitchen ticket, and right-to-left templates, and switch between them in settings.
259 -- **Multiple receipt templates** — install and enable several templates side by side instead of being stuck with one.
260 -- **Thermal printer support** — print receipts directly to thermal printers (58mm and 80mm) over network, Bluetooth, or USB, with a guided setup wizard in the WCPOS apps.
261 -- **Customer Tax IDs** — a new Tax ID field on the customer form, ready for VAT, ABN, GST, and other regional tax numbers.
262 -- **Pro: Coupons at the POS** — search for and apply coupons at checkout, with coupon pills in the cart and support for sequential discounts.
263 -- **Pro: Refunds at the POS** — refund POS orders directly from the till, with a full audit trail.
264 -- **Pro: Per-store receipt templates** — assign different templates to different stores, and drag-and-drop to reorder them.
265 -- Plus lots of smaller fixes — tax and coupon calculations, third-party plugin compatibility, faster syncs, and better translations.
232 +- **Security: cashiers can no longer change the email or password of administrator or other staff accounts** through the POS. POS users can only edit customer accounts.
233 +- **Users with more than one role (for example administrator plus customer through the Members plugin) no longer get "forbidden" on every product load and sale**, and when access really is denied the error names the missing capability.
234 +- **Stores using WooCommerce Tax (TaxJar) keep stable tax-rate IDs on POS saves**, so county and city rates no longer swap places on the order.
235 +- **Stores using WooCommerce Tax with tax based on the store address send the store's street to TaxJar**, not the customer's, when a customer shares the store's location.
236 +- **An installed Windows printer no longer hides behind the "no printers yet" screen**, and generic Bluetooth printer profiles set up correctly on iOS and Android.
237 +- **Tapping the cart quantity on iOS and Android selects the number so typing replaces it**, and two-digit quantities no longer clip.
238 +- **Fewer stalls on iPad while the till is idle**: the background variation check runs as one query instead of one per product.
239 +- **The web app repairs a damaged local bookkeeping file** instead of logging the same storage error on every sync.
240 +- **Faster, safer local saves on iOS and Android**: the storage swap file is copied natively and an interrupted write is recovered on the next open.
241 +- **The iOS and Android apps report crashes when telemetry is enabled.**
242 +- Updated translations.
266 243
244 += 1.10.9 - 2026/09/07 =
245 +
246 +- **A sale with a coupon no longer stays "POS - Open" after it is paid.**
247 +- **Stores using WooCommerce Tax (TaxJar) get the right tax rates on POS orders**, and open POS orders no longer have stale tax lines put back on save.
248 +- **Sync skips records that haven't changed**, and a bloated product search index repairs itself.
249 +- **Bluetooth printers on iOS and Android reconnect after a failed print** instead of staying stuck on a dead link.
250 +- **Fewer freezes during the first sync on iOS and Android.**
251 +
252 += 1.10.8 - 2026/09/06 =
253 +
254 +- **Printer setup has been redesigned.** The till scans for printers, you pick one and print a test page. Network, USB and Bluetooth printers are covered on desktop.
255 +- **Printers that need a different character set can be given a receipt language** in the printer's options.
256 +- **Copy setup report gathers printer diagnostics** for a support request.
257 +- **Bluetooth printers on desktop reconnect reliably between receipts.**
258 +- **A removed variation no longer comes back into the order on the next save.**
259 +- **Orders no longer fail to sync with an "invalid item id" error** after a line was removed on the server.
260 +- **Orders no longer show a false "store calculated different totals" warning** on stores that keep tax at more decimal places than they display.
261 +- **The receipt preview shows after a payment through the order-pay page**, and says why when it can't.
262 +- **Product and order search matches every word you type**, and exact SKU or barcode matches come first.
263 +- **The till works alongside the JWT Authentication for WP REST API plugin.**
264 +- **Saving an order no longer fails with a "Record has changed since last read" database error** on MariaDB stores.
265 +- **Less overhead on online-store page loads**, and fewer database writes per sale on the till.
266 +- **Receipt templates can tell percentage and fixed discounts apart**, and a new `woocommerce_pos_receipt_data` filter lets developers adjust receipt data.
267 +- **The POS footer and the Store health table fit narrow windows.**
268 +- Updated translations.
269 +
270 += 1.10.7 - 2026/09/02 =
271 +
272 +- **Paid orders no longer stay open on the till after a gateway payment.** Mostly affected stores that don't use HPOS.
273 +- **Orders paid by cheque, bank transfer or a gateway with its own order status now complete on the till** instead of staying open.
274 +- **The payment-received page only reports success once the order is actually paid.**
275 +- **A failed order lookup after payment no longer breaks the payment-received page.**
276 +- **The Logs screen explains "Storage call has not returned" and failed search rebuilds** instead of showing a raw message.
277 +- Updated translations.
278 +
279 += 1.10.6 - 2026/09/01 =
280 +
281 +- **Installing WCPOS Pro on a site running the free plugin no longer takes the site down.** Affected 1.10.0 to 1.10.5.
282 +- **The Orders screen no longer goes blank until reload.**
283 +- **Search finds accented names** -- "cafe" matches "café".
284 +- **Search works the moment the till opens** instead of wrongly saying "no products found".
285 +- **Variations no longer get stuck loading** in the product popover.
286 +- **One stalled sync request can no longer stop products from loading.**
287 +- **The product grid fills its first page on large screens.**
288 +- **The till now repairs more kinds of local database damage at startup.**
289 +- **Cloud print: the store logo and the number under the barcode now print** on Epson Server Direct Print and Star CloudPRNT receipts.
290 +- **Epson Server Direct Print receipts no longer show "?" in the time.**
291 +- **The cloud print queue shows which receipt template each job used.**
292 +- **The receipt template gallery opens faster** on stores with many templates.
293 +- **Optional error reporting** -- off by default, sent only with your consent -- and updated translations.
294 +
295 += 1.10.5 - 2026/08/30 =
296 +
297 +- **Saving products and variations is much faster on large stores.**
298 +- **Orders load faster** on stores that don't use HPOS.
299 +- **Store Health scans are much faster on large stores.**
300 +
301 += 1.10.4 - 2026/08/30 =
302 +
303 +- **Sorting products or variations by SKU, barcode or stock now works** -- and no longer hides items that don't have one.
304 +- **The till repairs a damaged local database at startup** instead of getting stuck until site data is cleared.
305 +- **The product grid no longer crashes when a search narrows the results.**
306 +- **A brief network glitch no longer shows "Website is unreachable"** or drops the till into offline mode.
307 +- **Removing a line from the cart now responds to the first press.**
308 +- **Logging in no longer fails on stores with a large number of saved sessions.**
309 +
310 += 1.10.3 - 2026/08/30 =
311 +
312 +- **Payments work again in the iOS and Android apps.**
313 +- **Product search no longer matches product descriptions**, so searches find the right products again.
314 +- **Prevent overselling now holds stock during checkout**, so two tills can't sell the same item.
315 +- **Orders save faster.**
316 +- **Epson receipts print properly again** -- text size, the order barcode, and where the paper is cut.
317 +- **Cloud print no longer prints a receipt twice** when a printer briefly loses its connection.
318 +- **A blank cloud print no longer reports as printed** -- the cloud print queue now shows what went wrong.
319 +- **The cloud print queue can be cleared**, shows every job by default, and lists the newest first.
320 +- **"Out of stock" stays set** on products that don't manage stock when decimal quantities are switched on.
321 +- **Deleting a product or coupon from the till now sends it to the trash** instead of deleting it for good.
322 +- **Variations now follow the rules set by your other plugins**, such as multilingual and multi-store plugins.
323 +- **Changes made at the till now trigger WooCommerce's own hooks**, so your other plugins notice them.
324 +- **Store Health now spots when any kind of record needs re-syncing**, not just products.
325 +
326 +**Note for developers:** the `woocommerce_pos_sync_legacy_revision_grace` option and the pre-1.10.0 revision recipes are gone. New extension points: `woocommerce_pos_order_pull_ids` and `woocommerce_pos_invalidate`. `wcpos/v2` product search matches title, SKU and barcode only. Admin bundles now depend on a new script handle, `wcpos-api-fetch-method-param`, which rewrites `PUT`/`PATCH`/`DELETE` on `wcpos/v*` routes to `POST` + `?_method=`. The app now sends `wcpos_protocol` and `wcpos_client` with every request.
327 +
328 += 1.10.2 - 2026/08/26 =
329 +- **Fixed a regression in order save speed for CPT orders** -- HPOS orders are not affected.
330 +
331 += 1.10.1 - 2026/08/26 =
332 +
333 +**A fix for product variations.** In 1.10.0 the POS asked WooCommerce for variations the wrong way, and got back data shaped like a product instead of a variation. If you sell variable products, this release matters.
334 +
335 +- **Variation names are readable again.** On a product with three or more attributes -- say Colour, Size and Fabric -- every variation row showed the same text, so there was no way to tell them apart at the till. They now read as their own attributes, like "Blue, Large, Cotton".
336 +- **Variation images are back.** Variation thumbnails were blank in the product list, and a variation added to the cart carried its parent's picture onto the order and the printed receipt. Orders already saved with the wrong picture are left alone -- reaching into completed orders to correct a thumbnail is riskier than the wrong thumbnail.
337 +- **Disabled variations are no longer for sale in the POS.** If you untick "Enabled" on a variation in WooCommerce, it now disappears from the POS the same way it disappears from your storefront. Previously it stayed on sale at the till.
338 +- **Variations you have hidden from the POS no longer count.** The variation list showed "Showing 2 of 3" for a product with a hidden variation, with no way to reach the third. Hidden and disabled variations are now left out of the list, the count, and the totals on Store Health.
339 +- **Hiding or showing a product now reaches the tills.** Changing POS visibility did not always tell the app anything had changed, so a hidden product could linger on a device. It is announced properly now, and un-hiding brings the product back.
340 +- **"Records need attention" clears when it should.** The repair checks looked at products the POS is never allowed to see, so a store with hidden products could show a warning that never went away no matter how many times it synced.
341 +
342 +**Please update.** If you sell variable products, 1.10.0 is showing your cashiers the wrong information. After updating, the POS re-syncs your variations once on its own -- no action needed.
343 +
344 +**Note for developers:** `wcpos/v2` variations are now served by WooCommerce's own `WC_REST_Product_Variations_Controller`, so a variation document is the wc/v3 variation shape -- a singular `image`, `wc_get_formatted_variation()` for `name`, and none of the product-only fields 1.10.0 included. `GET wcpos/v2/variations` also accepts a plain collection request and returns `X-WP-Total`.
345 +
346 += 1.10.0 - 2026/08/25 =
347 +
348 +**A new sync engine.** The biggest update since we rebuilt WCPOS in React Native back in 2023. Your store now syncs through a change log -- the POS asks what changed since it last checked, instead of re-downloading your catalogue every time. It is the foundation the offline queue and Store Health below are built on.
349 +
350 +- **Prevent overselling (new, optional).** Turn it on in Checkout settings: the POS stops you adding more than you have, and the server refuses the order too, so a stale device can't oversell either. Backorders are respected.
351 +- **Built to survive a dropped connection.** Browsing, cart building and saving orders keep working offline, and the new sync engine queues the changes you make and replays them when you reconnect -- receipt emails, and customer, coupon and stock edits on Pro. Anything the server rejects is listed with the reason so you can fix and resend it, instead of disappearing silently. Taking payment is the one step that still needs a connection -- offline checkout, starting with cash, is the focus of 1.11.
352 +- **Barcode scanning, rebuilt.** Scan with the device camera on any platform. Support for USB, serial, Bluetooth and Bluetooth LE scanners alongside keyboard-wedge. A setup wizard and a test panel that measures your scanner and tells you what to fix. Optional scan sounds.
353 +- **Store Health.** New screens showing what's on the device versus the server, real storage usage, sync performance over time, and a searchable log where every warning links to an explanation.
354 +- **Search that finds what WooCommerce finds.** Product search now matches inside words, so compound words work (searching "saippua" finds "Kuorintasaippua"). Customer search matches full names.
355 +- **Printing.** Star cloud printers negotiate their format properly, receipts can be rendered server-side as an image for printers that need it, and auto-print rules can fire on order creation or only once paid. Offline receipts print in the right language.
356 +- **Settings redesigned.** A calmer, row-based layout with shorter labels. Settings and Store Health now open as panels rather than modals.
357 +- **Cashiers can create and edit products by default.** Deleting stays opt-in, and catalogue edits are checked against real WordPress permissions -- a rejected edit is reverted with the server's reason shown.
358 +- **Fixed dropdowns not opening on iPad**, and language changes not reaching every part of the app.
359 +
360 +**Note for developers:** 1.10.0 introduces the `wcpos/v2` REST namespace. The POS now uses it for syncing and for the shared POS services that were previously served from `wcpos/v1`. The `wcpos/v1` routes still register but are frozen, and some legacy `API\Settings` controller methods have been removed. See the full release notes for the complete list of breaking changes.
361 +
362 +**Please don't update lightly.** This is a major update -- update when your store is quiet and you have time to check everything over.
363 +
364 +Earlier releases: https://github.com/wcpos/woocommerce-pos/releases
365 +
267 366 == Upgrade Notice ==
268 367
368 += 1.10.1 =
369 +Fixes variations: readable names on products with three or more attributes, variation images on orders and receipts, and disabled variations no longer for sale at the till. Recommended for anyone selling variable products.
370 +
269 371 = 1.10.0 =
270 372 This is a major update. Please 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. Don't update lightly.
271 -
272 -= 1.9.0 =
273 -This is a big update with breaking changes. If you're busy, please wait — there's nothing urgent in 1.9.0, and it's safer to give any early bugs a few days to be worked out. Update during quiet time, and always make a backup first.