Skip to content
Gaurav TiwariChangelog

Plugin changelog

Stackless for WooCommerce

You don't need any other add-ons for WooCommerce: subscriptions, payments, licensing, multi-currency, invoices and store tools in one plugin.

Latest
2.0.2
Releases
29
Updated
November 7, 2026
  1. Stable

    2.0.2

    Fixes a VAT number from the viewer's own account showing on orders that have none.

    Read full notes 1 change

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed an order without a VAT number no longer shows the VAT number saved on the account of whoever views it: the admin's own number on the order screen, or the customer's current number on older orders and their emails.
  2. Stable

    2.0.1

    Fixes for manual subscriptions on provider-billed gateways, PayPal's card button, gift card refunds and personal data erasure.

    Read full notes 6 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed a subscription set to renew manually and paid through Polar, Paddle, Dodo Payments or Stripe Managed Payments now gets its renewal invoices. Before, nothing billed it.
    • Fixed with PayPal card fields on, PayPal's own card button comes back when PayPal doesn't offer card fields to the account, currency or buyer.
    • Fixed Mercado Pago on the Checkout block is offered only in the connected account's currency.
    • Improved partial refunds give gift cards and store credit their share back, and refunding an order that bought gift cards disables the cards it issued.
    • New FluentCRM smart codes for Checkout Recovery, so a FluentCRM automation can send the link that restores the cart.
    • New VAT Numbers has a personal data exporter and eraser, and erasing a customer's data removes their subscription cancellation comment.
  3. Stable

    2.0.0

    Eight new ways to get paid, subscriptions customers can pause and skip, an importer for WooCommerce Subscriptions, and five new store modules.

    Read full notes 13 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New Stripe Managed Payments, with Stripe as merchant of record for digital products: Stripe handles sales tax, VAT, disputes and subscription billing.
    • New Razorpay, Mollie, Square, Paystack, Flutterwave, Mercado Pago and Creem gateways, also in Stackless Lite. Razorpay, Mollie and Square renew subscriptions automatically; Creem bills them as merchant of record.
    • New PayPal card fields with 3D Secure and saved cards for renewals, Fastlane for guest buyers in the US, and Apple Pay and Google Pay through PayPal.
    • New customers can pause a subscription or skip the next renewal, and a cancellation form asks why they cancel and can offer a pause or a plan change instead.
    • New WooCommerce Subscriptions Migration imports subscriptions with their dates, orders and saved Stripe and PayPal payment methods, and checks each one afterwards.
    • New Billing Health shows stuck renewals, overdue subscriptions, renewals without a saved method and gateway webhook failures on one screen, with logged fixes.
    • Improved renewal retries now follow the decline reason: cards the bank will never approve stop retrying, payments that need the customer get a pay link, and insufficient funds waits longer. A card-expiring email goes out before a renewal.
    • New Post-purchase Offers, a one-click upsell on the thank-you page charged to the saved payment method.
    • New Checkout Recovery sends abandoned checkout reminders with a signed link that restores the cart and an optional coupon.
    • New VAT Numbers checks EU VAT numbers with VIES on both checkouts and applies the reverse charge, with the proof saved on the order.
    • New Gift Cards and Store Credit, and Wholesale Pricing with role prices and quantity breaks.
    • New Software Licensing gets stable and beta update channels per license and staged rollouts. Google Product Feed can opt products into checkout on Google.
    • Fixed renewals billed by Polar, Paddle, Dodo Payments, Creem or Stripe Managed Payments can no longer be paid from a pay link, which could charge a customer twice.
  4. Stable

    1.9.1

    Fewer database queries on every page for stores without a persistent object cache.

    Read full notes 2 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed on stores without a persistent object cache, each Stackless setting left at its default no longer costs a database query on every page. Stackless loads them all in one query, so a page runs one query more than WooCommerce alone instead of 20 or more.
    • Fixed Subscriptions no longer reads each product's custom fields with a query of its own on shop, product and cart pages.
  5. Stable

    1.9.0

    Adds Google Product Feed, a Google Merchant Center feed for free listings and Shopping ads, with every left-out product and its reason.

    Read full notes 5 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New Google Product Feed builds a Google Merchant Center feed at /stackless-feed/google.xml, one item per product or variation with the price the product page shows, sale price and dates, stock, images, GTIN, brand, condition and categories. It is rebuilt a few minutes after products change and once a day, and Merchant Center fetches it on a schedule.
    • New Stackless → Product feed shows the feed URL, build status, Google category mapping per product category, and every product left out with the reason. Exclude or include a product from there.
    • New products Google doesn't allow are left out: external and service products, hidden or zero prices, payment plans, and subscriptions billed more often than yearly. Ebooks stay in free listings and are kept out of Shopping ads.
    • New WP-CLI commands wp stackless feed build, wp stackless feed status and wp stackless feed item.
    • New for developers: subscription product terms include length, the number of renewals after the first period, and Service Products answers the stackless_is_service_product filter.
  6. Stable

    1.8.0

    On-page Checkout carries your Checkout Builder layout, adds a Bricks element and works in product templates and loops. Admin confirmations show as toasts.

    Read full notes 9 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New On-page Checkout can show your Checkout Builder layout or another one. A Checkout design option on the block, a design attribute on the shortcode (inherit, none or a layout such as classic) and the new Bricks element pick it, and the plan cards take the layout's accent color.
    • New On-page Checkout element for Bricks, with the block's product, plan, design and display options plus plan card and button styles. The builder shows the plans and an outline of the chosen layout without loading a checkout.
    • New leave the product empty in a product template, a query loop of products or a product's own content, and On-page Checkout uses that product.
    • New Documentation and Changelog links in the Plugins list row.
    • New short confirmations on Stackless admin screens, such as "Settings saved." and switching a module on or off, show as a toast that drops from the admin bar. Errors and longer messages stay on the page. The toast uses WordPress's own React and loads only on Stackless screens.
    • Improved plan cards show a radio mark and a tinted selected card, the checkout shows a skeleton while it loads, the Buy button is full width on phones, and the block editor previews an outline of the chosen layout.
    • Fixed On-page Checkout keeps its full width inside flex containers such as Bricks rows.
    • Fixed plan cards work in themes that print content through wp_kses_post(), which strips the radio buttons, and ignore a theme's form label styles.
    • Fixed a theme's fixed bars and the store notice no longer show inside the embedded checkout.
  7. Stable

    1.7.2

    Fixes license update downloads from custom package URLs that 1.7.1 could block. Update now if you sell software licenses.

    Read full notes 1 change

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed license update packages served from a custom URL keep downloading after the update. 1.7.1 did not add their folders to WooCommerce's approved download directories, so licensed sites could get "Not Found" when they updated.
  8. Stable

    1.7.1

    Fixes orders that could be completed twice, a PayPal double capture, a Paddle discount underpayment and several subscription schedule issues, and sets up Stripe, PayPal and Paddle webhooks for you. Recommended for every store.

    Read full notes 19 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New each payment gateway's settings have buttons that open the provider's API key page for live and test mode. Saving Stripe, PayPal or Paddle keys on a live HTTPS site creates the webhook and saves its signing secret or ID for you.
    • New activating Stackless switches off Stackless Lite and keeps all of its settings and data.
    • Fixed a store that moved from Stackless Lite to Stackless now gets License & Updates switched on, so automatic updates arrive.
    • Fixed when a payment webhook and the customer's return arrived at the same moment, an order could be completed twice, sending duplicate emails and, for renewals, skipping a billing cycle. Applies to Stripe, PayPal, Polar, Paddle and Dodo Payments.
    • Fixed PayPal never captures a second payment for an order another tab already paid.
    • Fixed a Paddle payment that used a Paddle discount code no longer counts as paying the full order, and the Paddle checkout no longer shows a discount field.
    • Fixed a customer who pays a failed renewal with a new Stripe card has that card used for later renewals.
    • Fixed a declined "Renew now" no longer puts a paid-up subscription on hold. The order waits as the next renewal, payable now or collected on its due date.
    • Fixed reactivating a subscription or paying a renewal late restarts the billing day, so the next charge comes a full period later.
    • Fixed Polar, Paddle and Dodo Payments subscriptions no longer offer plan switching, which the provider would not bill.
    • Fixed saving a subscription in the admin no longer changes dates you did not edit.
    • Fixed invoices and proposals use the store's own decimals, so a customer browsing in another currency can accept a proposal and sees correct deposit amounts.
    • Fixed Modal Checkout keeps product add-on choices and charges for them.
    • Fixed license update packages are served only from WooCommerce's approved download directories, never configuration, log or database files. Saving the product as an administrator approves its package folder; existing packages are approved on update.
    • Fixed Hide Price Until Login no longer lets Store API price filters reveal hidden prices.
    • Fixed a Buy link or a Saved Carts "Replace" that cannot add anything keeps the shopper's cart.
    • Fixed removing Stackless with "remove all data" keeps the data while Stackless Lite is installed.
    • Fixed a shared wishlist shows who saved it again.
    • Changed passes WordPress Plugin Check. The full changelog history now lives in changelog.txt.
  9. Stable

    1.7.0

    Adds the integration points Core Support uses to show subscriptions, licenses, invoices and quotes beside tickets. No settings change.

    Read full notes 2 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New works with Core Support. Agents see each customer's Stackless subscriptions, licenses, open invoices and quotes beside their tickets, and customers get "Get help" buttons on their subscriptions and licenses in My Account.
    • New for developers: public functions for a customer's invoices and quotes, admin link filters for subscriptions, licenses and invoices, a license terms filter for a product or variation, and an action on each subscription and license row in My Account, so help desks and CRMs can integrate without reading Stackless internals.
  10. Stable

    1.6.2

    Subscription products keep their Subscription checkbox checked in the editor, so a later save can't turn them into one-time purchases. Recommended for every store selling subscriptions.

    Read full notes 3 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed the Subscription checkbox on a simple product shows as checked after you reload the editor. Before, it loaded unchecked, so saving the product again without rechecking it turned the subscription into a one-time purchase.
    • Fixed on the Cart block, a subscription with a free trial or signup fee no longer shows a struck-through price and a "Save" badge for the gap between the first charge and the recurring price. A real sale price still shows its saving.
    • Fixed an add-on's type badge in the product editor updates as soon as you change its Type, instead of after the next save.
  11. Stable

    1.6.1

    Docs links open the new Stackless docs, the 1.6.0 modules get their own icons and docs pages, and gateway copies show the right badge on orders.

    Read full notes 3 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Changed Docs links on the Dashboard cards, module settings, admin screens and product editor panels open the Stackless docs at gauravtiwari.org/docs/stackless-for-woocommerce/ instead of the retired training course.
    • New Dodo Payments, Payment Gateway Tools, Modal Checkout, On-page Checkout, Pay What You Like and Extra Enhancements link to their own docs pages and have their own Dashboard icons.
    • Fixed on an order, a copy of Polar, Paddle or Dodo Payments shows its own badge after "Payment via" even when it has the same title as the original. In the orders list, a copy whose title starts with the original's no longer gets the original's label.
  12. Stable

    1.6.0

    Six new modules: Dodo Payments, Payment Gateway Tools, Modal Checkout, On-page Checkout, Pay What You Like and Extra Enhancements. Free and digital orders get a shorter checkout.

    Read full notes 12 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New Dodo Payments gateway. A merchant-of-record hosted checkout with tax handled for you, one-time orders in any currency Dodo supports, free trials, and subscriptions Dodo renews. Payments, renewals, refunds, disputes and cancellations sync through signed webhooks.
    • New Payment Gateway Tools. Duplicate Polar, Paddle or Dodo Payments to take payments with a second account, each copy with its own keys, webhook URL, badge and orders. A copy that has orders or subscriptions can't be removed.
    • New a Stackless label next to every gateway Stackless adds, on WooCommerce's payment settings, gateway settings, Stackless settings and order screens.
    • New Modal Checkout. Buttons and links open the checkout in a modal on the same page, with pay-via classes that limit the payment methods it offers.
    • New On-page Checkout. A block and a [stackless_checkout] shortcode show plan cards and your checkout on any page, with its own cart per plan so the store cart is left alone.
    • New Pay What You Like. Buyers choose their price within your limits, including free, on product pages, the cart and both checkouts.
    • New Extra Enhancements. Failed-payment email alerts, per-product payment methods and after-purchase links, ?coupon= links, internal test emails, a checkout guard against throwaway emails and card testing, and a hidden payment section when the only method is a hosted checkout.
    • New shorter checkout for free and digital orders. Free digital products skip company, country and state; paid digital products skip country and state unless WooCommerce tax is on. Every order still gets a country.
    • New a "Get it for free" Place order button when there's nothing to pay.
    • New Sold Count multiplier. The badge can show the real count times a number you choose, rounded up.
    • Fixed Polar and Paddle renewals and subscription updates now find their subscription by the provider's id in every status, not only through checkout metadata.
    • Fixed on the Checkout block, a required consent that is hidden for the cart (for example the digital-content waiver on a physical order) no longer blocks the order.
  13. Stable

    1.5.3

    Currency-Aware Payment Gateways now warns correctly about the built-in Stripe, PayPal and Polar gateways, and Polar checkouts no longer carry an unconverted default-currency price. Recommended for stores selling in more than one currency.

    Read full notes 2 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed Currency-Aware Payment Gateways now knows the currencies the built-in Stripe, PayPal and Polar gateways can charge. Stripe was listed under the wrong id and Polar not at all, so both were allowed for every currency and never appeared in the "Not known to support this currency" warning. Each gateway now declares its own list, and the PayPal list is no longer a separate copy.
    • Fixed when Polar's organization currency differs from the order currency, the extra default-currency price Polar requires is now converted at the Multi-Currency rate instead of copying the number over unchanged (a ¥5,000 order no longer carries a $5,000 default price).
  14. Stable

    1.5.2

    Important fixes for subscriptions, payment webhooks, Stripe amount checks, multi-currency order bumps and shipping, invoice currency switching, licensing info privacy and affiliate refunds. Recommended for every store.

    Read full notes 15 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed switching a fixed-term subscription to a plan on a different schedule no longer makes it renew forever. The new plan's number of payments is kept and counted from its first period.
    • Fixed paying an old switch order after the subscription was cancelled, or after another switch already applied, no longer reactivates or changes it. The order and subscription get a note asking you to review or refund.
    • Fixed sending an early manual renewal invoice no longer suspends a subscription that still has paid time. The grace period now counts from the billing date the invoice is for.
    • Fixed when Paddle, Polar, PayPal or Stripe sends a webhook while the same order is busy, Stackless now asks the provider to retry instead of accepting the event and dropping it. Polar refunds that arrive during a busy moment are no longer lost either.
    • Fixed Stripe no longer marks an order paid when the payment was authorized for an older amount or a different currency, for example after the order was edited during card authentication. The order goes on hold with a note instead. Two Stripe requests for the same order no longer run at once or release each other's lock.
    • Fixed switching an invoice's currency after revising and reissuing it no longer brings back the amount from before the revision.
    • Fixed an order bump with a fixed discount can no longer push a price below zero in another currency, and the bump's minimum and maximum cart totals are compared in the shopper's currency. Bumps that need product add-on answers are no longer offered as one-click adds, and bumps without a discount use your price-book prices.
    • Fixed percentage shipping costs are no longer converted twice for shoppers paying in another currency, and the base currency no longer picks up the exchange-rate markup.
    • Fixed checkout fees that depend on a free checkout field now show in the block checkout's order summary before the order is placed.
    • Fixed WooCommerce Optimizer no longer strips store scripts and styles from pages whose store blocks sit inside a synced pattern.
    • Fixed switching two modules on or off at the same moment no longer undoes one of the changes.
    • Fixed AI agent order searches now respect the date range when a search term is also given, and return the newest matches first.
    • Fixed the public licensing info endpoint no longer shows descriptions and changelogs for draft, private or password-protected products. Private and password-protected products still show to requests with a valid license key.
    • Fixed deleting a refund, or restoring a paid-out order from the trash, now gives back the affiliate commission that was clawed back.
    • Changed FluentCRM now removes the old product's tags and lists when a customer switches plans, keeping any that another active subscription still uses.
  15. Stable

    1.5.1

    Cleaner WooCommerce settings, store stats and phone layouts with Woo Redesign, and no more WooCommerce debug-log notices from Custom Invoices on stores that keep orders in posts storage.

    Read full notes 5 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Improved with Woo Redesign on, WooCommerce → Settings reads as sections under their own headings, without a rule under every row. Help that explains a field shows as text under it instead of behind a "?" icon, tables such as Emails and Shipping zones sit flush in the page, and Save stays on screen while you scroll.
    • Improved Store at a glance is one quiet strip. A dot marks only a number that needs attention, and the hints say how long the oldest order has waited instead of repeating the label. The Invoices and Affiliates totals use the same strip.
    • Improved Woo Redesign drops shadows from static cards and the blue outline from every enabled module card, shows documentation and settings links as secondary buttons, and uses the same underline tabs on every Stackless screen.
    • Fixed with Woo Redesign on, WooCommerce → Settings and Status no longer scroll sideways on phones. Fixed-width fields and wide tables now fit the screen or scroll inside their own box.
    • Fixed on stores that keep orders in posts storage (HPOS off), Custom Invoices no longer fills the debug log with WooCommerce's "Order query argument (meta_query) is not supported" notice. Invoice lists, counts and lookups return the same results as before.
  16. Stable

    1.5.0

    Adds Woo Redesign, a cleaner WooCommerce admin with store stats and a guided product editor, and an updater listing (icon, banner, details tabs) for licensed plugins and themes. New releases now reach customers who already own the software, and license keys follow plan switches, refunds and account changes correctly.

    Read full notes 33 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New Woo Redesign module. Restyles the WooCommerce admin in the look of the Stackless screens: a soft page canvas, card-style tables with quiet uppercase headings, soft order and stock status badges, 2px corners (4px on cards), one 40px height for fields and buttons, tinted notices, one primary action per screen, settings and status pages as cards, and Tabler icons on the product data tabs (including the Stackless tabs). Choose which areas change (orders and coupons, products and catalog, settings and status, Home and Analytics), follow your WordPress admin color scheme, use Stackless Blue or pick a color, and choose comfortable or compact tables. Admin only: nothing loads on the storefront, and other admin pages keep their look.
    • New Woo Redesign shows the store at a glance above the orders list (to fulfil, awaiting payment, on hold, sales today) and the products list (live, drafts, out of stock, low stock), each linking to the matching list.
    • New Woo Redesign makes the product editor easier to follow: a "Ready to sell?" checklist for name, price, image, category and short description, a one-line intro on every product data tab, a plain-language line for the product type and the Virtual and Downloadable boxes, and field help shown as text instead of behind "?" icons. Product and coupon fields line up in one column with their descriptions under them, and dimensions sit in one row.
    • New Software Licensing products get a WordPress updater listing: a plugin icon (PNG, JPG or SVG) shown beside the update in Dashboard → Updates and on the Plugins screen, a banner for "View details", a theme screenshot, an upgrade notice, author and homepage links, Description, Installation and FAQ tabs, and required plugins. Each falls back to the product image, description and store details. The Licensing tab is split into titled sections.
    • Improved Stackless screens use 2px corners (4px on cards), black module links with separators between groups, 40px fields and tinted notices instead of a colored stripe.
    • Fixed the Outbound clicks column on the products list collapsed to zero width, so its heading broke into one letter per line.
    • Fixed a new release of a licensed product now reaches customers who already bought it. WooCommerce only grants the files a product has when the order is paid, so a version uploaded later (in the editor, through the REST API or a deploy script) never appeared in earlier buyers' My Account → Downloads. New files are now granted in the background to every order whose license may download them, and a customer's own orders are topped up again when they open Downloads, Licenses or an order, which also catches licenses renewed after a lapse. Expired and revoked licenses get nothing new. Turn this off under Software Licensing → Downloads → New releases.
    • Fixed switching a subscription to another licensed product no longer creates a second license key that never expires. The switch moves the existing key to the new plan, as intended, and the switch order holds no keys of its own.
    • Fixed a plan switch that moves one item of a multi-item subscription to a new billing schedule now moves that item's license keys to the new subscription, so they renew, pause and end with it.
    • Fixed in "one key, limit multiplied by quantity" mode, a plan switch keeps the quantity: three seats of a 1-site plan switched to a 5-site plan give 15 sites, not 5.
    • Fixed switching to a plan without licensing ends the old plan's keys instead of leaving them active and renewing; switching from such a plan to a licensed one creates the key.
    • Fixed an order cancelled or refunded by status and then set back to processing or completed gets its license keys back. Keys revoked by a partial refund or by hand stay revoked.
    • Fixed removing a variation no longer breaks the keys sold for it. They keep validating, updating and renewing under the product's own settings instead of answering "invalid license".
    • Fixed keys for two variations of one product bought on different schedules each follow their own subscription.
    • Fixed the license API's version check only includes the download package for a site activated on the key. A request without a site address (or with one that can't be read) still learns the new version, but can't download updates without using an activation.
    • Fixed with no file picked as the update package, Software Licensing serves the file tagged or named with the current version ("my-plugin 1.5.0") instead of the first file, so adding a release after the old ones updates sites to the right version.
    • Fixed the drop-in license client fetches a fresh download link when WordPress installs an update from a check made hours earlier, instead of failing with "Download failed. Forbidden". Copy the updated client (1.3.0) into your plugins and themes.
    • Fixed the license client works with stores that don't use pretty permalinks. There, /wp-json/ returns a web page, so every call failed with "unexpected response"; the client now falls back to ?rest_route= and remembers it.
    • Fixed when the store can't be reached, "View details" in the plugin list shows an error instead of falling through to wordpress.org, which may list a different plugin under the same slug. An invalid or expired key no longer hides the details either.
    • Fixed the license API's anonymous "View details" lookup by slug picks the first product with licensing turned on, so a newer product sharing the slug without licensing (a copy, a bundle) no longer hides the real one.
    • Fixed sites on international domain names (bücher.de) can activate keys; they match their punycode form.
    • Fixed a client configured with a product id keeps validating after a plan switch moves the key to another product of the same software.
    • Fixed when a stackless_software_licensing_allow_activation filter refuses a site, the customer sees the filter's own message and status instead of "The license request failed."
    • Fixed "Last updated" in the update details modal no longer shifts by the store's time zone offset.
    • Fixed sites on two-part country domains such as test-prep.co.uk or dev-shop.com.au no longer count as free development sites.
    • Fixed keys from a guest order move to the customer's account when WooCommerce links past orders to it, or when an admin changes the order's customer, so they appear under My Account → Licenses.
    • Fixed license expiry dates no longer show a day late for stores whose daylight saving offset differs between today and the expiry date.
    • Fixed ticking "Never expires" on an expired license makes it active again, as setting a future date already did.
    • Fixed Software Licensing no longer serves an update package that WooCommerce has disabled, for example because its folder was removed from the approved download directories. WooCommerce already refused that file's own download links; the license API and My Account → Licenses now refuse it too.
    • Improved files named like "my-plugin 1.4.2" or "my-plugin-1.4.2.zip" count as previous versions without tagging each one. A version is only read when the name matches the software slug or the update package's name, and a tag or release history line still wins.
    • Improved My Account → Downloads shows one row per file for licensed products, however many orders granted it, newest version first, with a Version column and the update package marked Latest.
    • Improved My Account → Licenses shows the latest version, a count of previous versions with their release dates, and explains why an expired, revoked or inactive license has no download button.
    • Improved setting the current version through the WooCommerce REST API dates it in the release history, as saving the product in the editor does. The product's Licensing tab shows the version read from each file name and marks the update package.
  17. Stable

    1.4.0

    Adds Coupon Affiliates. Copies of your store (staging, local or migrated) no longer charge or email customers until you confirm one as the live store. A site with the production environment type is recognized automatically on update; any other type shows a notice to confirm it.

    Read full notes 2 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New Coupon Affiliates module, ported from GT Extensions for FluentCart. Customers with a paid order join from My Account → Refer & Earn and get a personal coupon, or you assign any coupon to an account on the coupon's edit screen, with an optional rate per affiliate or per coupon. Paid orders (processing or completed) earn a percentage of product sales after discounts, before tax, shipping and fees. Commissions are held for a refund window, approved and paid by you, with payout batches and CSV exports. Line refunds, amount-only refunds and cancellations reduce or reverse a commission automatically, and a refund after payout is deducted from the next payout. Affiliates can't use their own code on either checkout, renewals and plan switches earn nothing, and with Multi-Currency each commission also records its base-currency amount. While another affiliate plugin is active, new commissions are held for review until you confirm it doesn't pay on the same orders. Works with HPOS and posts order storage, and includes personal data export and erasure.
    • Fixed a copy of the store at another address, such as a staging, local or migrated copy, no longer charges customers or emails them. Stackless records the live store's address and environment type. On a site that doesn't match, renewals, payment retries, dunning, invoice and quote reminders and back-in-stock alerts are held, no saved card is charged, and Stackless customer emails aren't sent. An admin notice offers "This is the live store", and held renewals then run for the periods that came due. Hosts can decide with the STACKLESS_LIVE_STORE constant or the stackless_live_store filter.
  18. Stable

    1.3.0

    Requires WordPress 6.7. Fixes subscription renewals on stores that keep orders in posts storage, and makes Stripe webhooks, interrupted renewals and recurring invoices recover safely.

    Read full notes 14 changes

    Requires WordPress 6.7+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New Software Licensing version archive. Tag older downloadable files (or list package URLs in a release history) with their version, and customers with a valid license can roll back from My Account → Licenses → Previous versions. Links are signed per version, and the license API's info route returns a WordPress.org-style "versions" map.
    • New an option to tie WooCommerce downloads of licensed products to the license. Files leave My Account → Downloads and their links stop working once a license is revoked, refunded or expired. A second option lets expired licenses keep versions released before they expired.
    • Fixed on stores that keep orders in posts storage (HPOS off), subscription renewals were never created or charged, and Stripe, PayPal, Paddle and Polar webhooks could match the wrong order. Order lookups now work on both storage types and confirm the order they find.
    • Fixed a Stripe webhook is acknowledged only after it has been processed. If the event log can't be written, or another request is still working on the event, Stripe gets a retryable error and sends the event again instead of having it marked as a duplicate. An event whose handler died is picked up by exactly one retry.
    • Fixed a renewal whose order was created but never charged or invoiced, for example because the server stopped mid-run, is now collected the next time the renewal runs, on the same order. Paid, failed and already-collected renewal orders are never charged again.
    • Fixed a recurring invoice that fails to save, issue or email no longer uses up its billing period. The run retries automatically with a growing delay, reuses the draft it already created, never emails the same invoice twice, and a schedule set to end after a number of invoices only ends once the last one exists. Periods that fall due while a failed run is retried are billed afterwards instead of skipped.
    • Fixed when a module's database setup fails during an update, Stackless no longer marks the update complete. Modules that set up correctly are recorded, the failed ones retry on the next page load, and an admin notice lists them until they succeed. A database table that wasn't created now counts as a failure too.
    • Fixed the Subscriptions dashboard widget counts every renewal due in the next 7 days and lists the soonest first. It used to check only the 500 newest subscriptions, so older ones due soon were left out. This works with both HPOS and posts order storage.
    • Fixed the dashboard's 30-day churn now counts every subscription that ended in that window. It used to stop at 1,000.
    • Fixed with "Development sites are free" turned off, the Licenses table, the order's Licensing panel and agent license details count development sites toward the site limit, matching what activation enforces.
    • Fixed the stated minimum is now WordPress 6.7, the oldest version WooCommerce 9.9 runs on. It used to say 6.6.
    • Fixed a recurring invoice schedule set to keep drafts no longer completes a billing period when the draft couldn't be saved. The period stays open and the run retries.
    • Fixed when two page loads finish a Stackless update at the same moment and one of them fails a module's setup, that module now retries on the next page load. Before, the other page load could mark the update complete and the failed module was never retried.
    • Fixed the admin notice for a module table that wasn't created now includes the database's reason, such as a permission or syntax error.
  19. Stable

    1.2.0

    New AI Agents, Webhooks and REST API, and FluentCRM modules, plus six invoice layouts.

    Read full notes 9 changes

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New AI Agents module. Claude, ChatGPT, Cursor and other agents can run the store through the free Site Agent plugin with /invoice, /quote and /store skills, served to Site Agent 0.4+ or downloaded as ZIPs with a terminal script. The ZIPs carry no passwords.
    • New agent commands for sales reports and orders, subscriptions (list, summary with monthly recurring revenue, cancel, reactivate), license keys (masked unless revealed, revoke, free a site, resend), back-in-stock alerts, product details and page access. Changes support a dry run, and stackless_agent() now works whichever modules are on.
    • New Webhooks and REST API module. Subscription and license events appear as WooCommerce webhook topics, and stackless/v1/subscriptions lists, reads, cancels and reactivates subscriptions with WooCommerce REST API keys.
    • New FluentCRM integration. Automation triggers for subscriptions, renewals, licenses, paid invoices and accepted quotes; tags and lists that follow subscription status, with a sync for existing customers; smart codes; and subscriptions and licenses on each contact's profile.
    • New six invoice layouts (Classic, Centered, Compact, Amount first, Letterhead, Ledger). Choose a default and override it per invoice; an issued invoice keeps its layout.
    • New a library of reusable invoice-only items. Tick "Save to item library" on a custom line, then add it from "Add a saved item"; manage them under Invoices → Saved items.
    • New invoices remember customer details. Account customers get the billing address, delivery address and VAT number saved to their profile; guests get a private profile by email that fills in the next invoice.
    • New invoice seller details take a legal company name, a VAT ID and a company registration number.
    • New with Multi-Currency Checkout, an invoice can let the customer pay in any enabled currency. Amounts convert from the issued invoice, so switching back restores them exactly.
  20. Stable

    1.1.2

    New Paddle gateway: Paddle Billing as a merchant of record.

    Read full notes 4 changes

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New Paddle gateway. Paddle Billing as a merchant of record, with sales tax and VAT handled by Paddle. Buyers pay in Paddle's overlay checkout on your own site, on the Checkout block, the classic checkout and pay links.
    • New subscriptions billed by Paddle. Paddle charges the renewals and each one becomes a paid WooCommerce renewal order. Signup fees, free trials and one-time items in the same cart work; one subscription schedule per checkout.
    • New refunds made in WooCommerce go to Paddle, including any tax Paddle added, and refunds approved in Paddle are recorded in WooCommerce once. Cancellations sync both ways, and customers update their card through Paddle from My Account.
    • New Paddle webhooks are signature-checked and replay-safe, and the gateway's currencies are available to Currency-Aware Payment Gateways.
  21. Stable

    1.1.1

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    Read full notes 1 change
    • Fixed the Wishlist tab in My Account loads the wishlist styles and script, so product images show as thumbnails instead of full size and Move to cart and Remove work without a page reload, the same as on the wishlist page.
  22. Stable

    1.1.0

    New WooCommerce Optimizer module, and minified CSS and JavaScript.

    Read full notes 9 changes

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New WooCommerce Optimizer module. Stops WooCommerce prefetching about 50 Cart and Checkout block scripts on every page once the cart has items, defers WooCommerce scripts outside cart and checkout, and removes the WooCommerce generator tag. Optional: load WooCommerce scripts and styles only on store pages, control cart fragments, drop the password strength meter or order attribution, hide marketplace suggestions, inbox notes, dashboard widgets and connect notices, and shorten scheduled-action logs and guest cart sessions.
    • New Stackless serves minified copies of all its CSS and JavaScript (turn on SCRIPT_DEBUG for the readable files), and its storefront scripts load with defer. Payment and Cart/Checkout block scripts keep their timing.
    • New add-ons of type Short text and Long text take a character limit. It is enforced in the browser and on the server.
    • New order bump headlines and descriptions accept {price}, {regular_price} and {discount}, shown in the shopper's currency.
    • Fixed with Multi-Currency Checkout, percentage and fixed-discount order bumps start from the offer's price-book price in that currency, so "40% off" is 40% off the price shoppers see. The bump card and the cart line show the same amounts.
    • Fixed with Multi-Currency Checkout in a currency without decimals (INR, JPY), add-on charges, checkout field fees and order bump prices are no longer rounded to whole base-currency units before conversion ($11.40 became $11).
    • Fixed Hide Price Until Login no longer puts its sign-in link inside product card links in shop grids, related products and Store API responses (invalid nested links that broke card layouts on some themes). The link stays on the product's own page.
    • Fixed add-on text from the classic product form is cleaned of HTML before it is stored, the same as Store API input.
    • Fixed order bumps, the checkout trust block and the checkout layout still appear when the checkout opens in a background tab.
  23. Stable

    1.0.7

    Documentation: Stackless for WooCommerce Training.

    Read full notes 1 change

    Documentation: Stackless for WooCommerce Training.

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • Fixed on block themes, shop and product collection cards show one "Save to wishlist" button instead of two.
  24. Stable

    1.0.6

    Documentation: Stackless for WooCommerce Training.

    Read full notes 7 changes

    Documentation: Stackless for WooCommerce Training.

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New stackless_invoice_schedule() starts or replaces an invoice's recurring schedule from code. Invalid dates come back as a WP_Error with status 400 instead of a fatal error.
    • Fixed a recurring schedule whose first invoice date is today or earlier is reported as "Choose a first invoice date after today." everywhere, checked before anything else about the invoice.
    • Fixed on block themes such as Purple, shop and product collection cards show the Sold Count and Stock Urgency badges once instead of twice.
    • Fixed order bump savings read "Save $20.00" instead of showing the currency symbol as code ($) on the Checkout block.
    • Fixed the Request a quote button on product pages uses the theme's button style on block themes.
    • Fixed with Multi-Currency Checkout, products with add-ons keep their price-book price in other currencies; only the add-on charge is converted.
    • Fixed a PHP 8.5 deprecation notice from product add-ons in the cart.
  25. Stable

    1.0.4

    Documentation: Stackless for WooCommerce Training.

    Read full notes 6 changes

    Documentation: Stackless for WooCommerce Training.

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    • New every module links to its lesson in the Stackless for WooCommerce Training course: a Docs link on each Dashboard card, a setup link at the top of each module's settings, a Docs link in the Stackless header, on the Plugins screen, on the Subscriptions, Licenses, Invoices, Order bumps, Quote requests, Delivery slots, Stock alerts and Checkout fields screens, and inside the product editor panels.
    • Improved the license client sends every request as a POST, so license keys no longer appear in URLs or your store's access logs. Copy the client file again to get this.
    • Improved the license client's text can be translated: pass a 'strings' array with your own text domain.
    • Improved the license update check now answers with a code that says why a site can't download an update (site_not_active, license_expired, license_revoked or license_inactive) instead of "valid".
    • Fixed the License keys email template is overridden from yourtheme/stackless/ like every other Stackless template. Existing copies in yourtheme/woocommerce/ keep working.
    • Fixed the license reminder no longer shows on the Stackless License screen itself.
  26. Stable

    1.0.3

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    Read full notes 4 changes
    • New the license client you ship inside your products now updates themes as well as plugins. Pass 'theme' (the theme folder name) instead of 'plugin_file', and updates appear in Dashboard → Updates and Appearance → Themes. Copy the client file again from templates/software_licensing/client.
    • Fixed "View details" for licensed plugins shows the product description again, next to the changelog.
    • Fixed the license info route only includes a download link for an active license on an activated site, matching the update check.
    • Fixed settings and email descriptions point to the right Stackless menus for checkout fields, delivery slots, order bumps, invoices, quotes and subscriptions.
  27. Stable

    1.0.2

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    Read full notes 5 changes
    • Fixed on block themes such as Twenty Twenty-Five, My Account, wishlist, saved cart and back-in-stock buttons now use the theme's button style instead of small browser buttons.
    • Fixed the product add-ons dropdown uses the theme's font and field size.
    • Fixed order bumps and the trust block match the size of the Checkout block's own text.
    • Improved subscription and license screens keep one main button; Cancel and Deactivate are quieter text actions, and buttons in order tables no longer overflow their rows.
    • Improved order bumps use a thin outline, and invoice and proposal pages drop the heavy accent strip and shadow.
  28. Stable

    1.0.1

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    Read full notes 5 changes
    • Fixed Checkout Builder and Checkout Enhancements settings now load their styles and scripts, and the layout gallery fits the settings panel.
    • Fixed the subscription edit screen's billing schedule reads "Every 2 months" instead of "Every 1 2 months".
    • Fixed block themes no longer show two "Save to wishlist" buttons on product pages.
    • Fixed renewal settings help text names the built-in Stripe, PayPal and Polar gateways.
    • Improved subscription list status badges stay on one line, and the Recurring totals heading lines up with the block checkout's order summary.
  29. Stable

    1.0.0

    Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.

    Read full notes 9 changes
    • Initial release with 30 modules.
    • Subscriptions with mixed carts, automatic and manual renewals, failed-payment retries, plan switching with proration, recurring coupons, customer portal, emails and admin screens.
    • Built-in Stripe, PayPal and Polar gateways with saved payment methods, subscription renewals, refunds and signed webhooks.
    • Software licensing with activation limits, a license API and an update server; page access for buyers and subscribers.
    • Multi-currency checkout with price books, live or manual rates, currency-aware gateways and a storefront currency selector.
    • Custom invoices with recurring billing, deposits and reminders; quote requests with online proposals.
    • Checkout enhancements, five checkout layouts, order bumps and buy links.
    • Catalog and store tools: free price text, sold count, stock urgency, quantity limits, hide price until login, add to cart text, external product extras, product details, wishlist, back-in-stock alerts, add-ons and checkout fields, delivery slots, saved carts and service products.
    • Stackless admin menu with a module dashboard, grouped settings and a license page.