Skip to content

Subscriptions & Recurring Orders changelog

All notable changes to Subscriptions & Recurring Orders (kv_subscriptions) are documented here. The format follows Keep a Changelog and the project uses Semantic Versioning.

  • Subscription plans: interval (days, weeks, months, years), trial days, first-order discount, recurring discount (percent or fixed), fixed number of deliveries, customer controls; plans assigned to products (“Choose how to buy” box on the product page, subscription tag in the cart).
  • Subscriptions created from paid orders (one per plan and order, per vendor order in Multi-Vendor); activation on a “payment received” status or on open orders (setting).
  • Customer account: My subscriptions, pause, resume, skip, quantity, product swap, frequency (another plan), address of automatic renewals, cancel in two clicks with a confirmation page and e-mail; signed e-mail links for guests.
  • Renewal reminders before each renewal; renewal orders by cron (console or secret URL), idempotent (cycle row with unique key, lock per subscription, order lookup by cycle key); automatic orders for payment methods without a processor and for add-ons that register a charge handler (hooks kv_subscriptions_payment_driver, kv_subscriptions_charge); pay link and normal checkout for every other method.
  • Dunning with a configurable schedule, then cancel or pause; pending payments are never treated as failed; failed orders reopen the cycle.
  • Admin and vendor panel: dashboard (MRR, churn, renewal revenue, renewals due, unpaid renewals), subscription list with filters and CSV export, detail with cycles and history, plans; Multi-Vendor scope per action.
  • Five editable e-mail templates; domain-bound license check and self-healing upgrades.

Fixed before release (release-gate audit 2026-11-07)

Section titled “Fixed before release (release-gate audit 2026-11-07)”
  • A cart update (“Recalculate”, quantity change) no longer drops the subscription plan or the pay-link renewal markers; the order of a pay link stays bound to its cycle and the renewal quantity is fixed.
  • Cancelling the order of an older renewal cycle no longer restarts reminders or cancels a healthy subscription.
  • An abandoned (Incomplete) renewal payment times out (setting “Abandoned payment timeout”, default 3 days) and returns to the payment reminders; stuck cycles appear under “Needs attention”.
  • The payment-method surcharge of automatic renewal orders is taxed; a product already on the subscription cannot be swapped in; a line charged at full price while the licence had lapsed never creates a subscription.
  • Unit 47/47 (PHP 8.1 and 8.3); CLI end-to-end 126/126 on cs417 (CS-Cart Ultimate 4.17.2, PHP 8.1), mv417b (Multi-Vendor 4.17.2, PHP 8.1) and mv421 (Multi-Vendor 4.21.2, PHP 8.3); Multi-Vendor CLI 33/33 on mv417b and mv421; HTTP end-to-end 55/55 on cs417; vendor HTTP 27/27 on mv417b; kv qa lic 53/53 on cs417, mv417b and mv421. The 4.21.2 admin was not driven over HTTP (the local trial has expired); its templates were compiled with Smarty 5.4.3 (storefront 8/8, admin 8 of 13: the other five use the {btn} tag the console cannot compile and were rendered over HTTP on 4.17).