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.
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.
Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.
Read full notes4 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.
Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.
Read full notes5 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.
Requires WordPress 6.6+, WooCommerce 9.9+ (tested with 11.2) and PHP 7.4+.
Read full notes9 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.
Requires FluentCart. Invoices and the other store modules require FluentCart 1.6.4 or later. The agent skills need the free Site Agent plugin (https://gauravtiwari.org/product/site-agent/); Site Agent 0.4 or later serves them to connected…
Read full notes4 changes
Requires FluentCart. Invoices and the other store modules require FluentCart 1.6.4 or later. The agent skills need the free Site Agent plugin (https://gauravtiwari.org/product/site-agent/); Site Agent 0.4 or later serves them to connected agents without an extra install.
Fixed an issued deposit or balance invoice showed its order's share as "Items subtotal" in the admin view, for example USD 720.00 under items totalling USD 2,400.00. It now shows the invoice total, the deposit or deposit paid, any tax in this payment, and the amount due, the same as the customer's page.
The AI agent skills panel on Invoices → Automation now covers the /store skill alongside /invoice and /quote, including its gtfc-store name in Site Agent.
The Recurring invoices list gives each column a sensible width, wraps customer emails at the @ sign instead of mid-word, and fits a phone screen without scrolling sideways.
The "Invoices with a due date", "Ends" and "Each new invoice" headings now line up with the controls below them, and the quote proposal reminder field has room above it.
Requires FluentCart. Invoices and the other store modules require FluentCart 1.6.4 or later. The agent skills need the free Site Agent plugin (https://gauravtiwari.org/product/site-agent/); Site Agent 0.4 or later serves them to connected…
Read full notes9 changes
Requires FluentCart. Invoices and the other store modules require FluentCart 1.6.4 or later. The agent skills need the free Site Agent plugin (https://gauravtiwari.org/product/site-agent/); Site Agent 0.4 or later serves them to connected agents without an extra install.
Recurring invoices. Open an issued invoice and choose Repeat this invoice to bill the customer every 1 to 12 weeks, months or years, starting on a date you pick and ending never, after a number of invoices, or on a date. Each period creates a new invoice with its own number and payment link, then emails it or saves it as a draft for you to review. Invoices → Recurring lists every schedule; pause, resume or stop them there. A schedule on the 31st uses the last day of shorter months, and a site that missed its scheduled tasks creates one invoice and logs the skipped periods.
Deposits. Ask for a percentage or fixed amount first on digital and service invoices and quote proposals. When the deposit is paid, a balance invoice for the rest is issued and emailed automatically. Deposit and balance add up to the full total and tax exactly.
Reminders timed from the due date. Email settings takes up to four reminders before, on, or after the due date, with a new overdue message for those after it. Turn reminders off for a single invoice in its editor. Issued invoices list the reminders still queued. Quote proposals can send one reminder before they expire.
Fixed with automatic reminders on, only one unpaid invoice at a time received its reminder, and back-in-stock emails for several products could queue only the first product. Action Scheduler's unique flag ignores the job's arguments, so jobs are now unique per invoice and per product option.
New /store agent skill and gtfc_agent() commands: store.summary, order.list, order.get, stock_alert.list, stock_alert.send, product.details.get, product.details.set, page_access.pages, page_access.add and page_access.remove, plus invoice.schedule, invoice.unschedule and invoice.schedules. Changes support dry_run first. The bundled script runs any command with gtfc.py call.
The {due_date} email placeholder now uses your site's date format.
Dark mode fixes for FluentCart's dark theme. The Product details card on the product editor now has dark text boxes, checkboxes, dividers and a readable Add a detail link and Save button instead of white boxes on a dark card.
The Invoices and Quotes screens, the Checkout Builder layout picker and the Conditional module badge follow dark mode too, including the product search results, status pill, activity log and invoice layout picker.
The checkout details table in FluentCart's order view no longer shows dark grey labels on a dark background. It takes the page's text colour, so it reads well in light mode, dark mode and emails.
All notable changes to the ACF Blocks plugin are documented here.
Read full notes10 changes
Fixed Video facades request YouTube's 1280 × 720 thumbnail instead of the 480 × 360 image. The image fills the default 16:9 frame without theme image rules changing its height. Videos without an HD thumbnail fall back to the available image.
Fixed YouTube players send the embedding site's origin using an explicit referrer policy. Editor previews use a normal document on the site because the editor's blob canvas cannot send an HTTP referrer, which causes Error 153. Previews load eagerly; autoplay and click-to-play embeds also carry the policy.
Fixed Email Form control styles are scoped to the form, so the shared .acf-input class no longer adds padding, borders or backgrounds to ACF inspector fields.
Fixed Site-specific editor stylesheets saved by Block Manager regenerate after a plugin update so stale inspector styles do not survive in the uploads directory.
Fixed Shorts, live, privacy-enhanced YouTube URLs, and Vimeo player/channel/group URLs render correctly. Vimeo unlisted privacy hashes and YouTube share timestamps are preserved; missing controls settings keep controls enabled, and Vimeo honors the controls switch.
Fixed Videos inserted by AJAX initialize correctly, and lazy loading leaves other plugins' videos alone. Invalid provider URLs show an explanatory editor placeholder.
Fixed Email Form labels follow custom input IDs. Boolean attributes retain their state in ACF's editor preview, including hidden form and star-rating messages, inactive tab panels, required inputs, and video playback settings.
Fixed Editor stylesheets are written atomically, recently generated bundles are retained during overlapping requests, and missing or stale settings bundles are rebuilt.
Changed Video facade and lazy-load behavior is loaded through the block's conditional viewScript asset instead of an inline script. Players have accessible titles and intrinsic widescreen dimensions.
Changed Release tags are checked against version metadata, generated assets and tests before packaging. Development dependencies are excluded from the upload ZIP.