=== Milo Subscriptions – Subscriptions for WooCommerce and Recurring Payments ===
Contributors: milosubscriptions
Tags: subscriptions, woocommerce, recurring, payments, renewal
Requires at least: 6.4
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.8.7
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Free WooCommerce subscriptions and recurring payments, or standalone without WooCommerce. Trials, switching, self-service, and migration tools.

== Description ==

Milo Subscriptions is a free subscriptions plugin for WooCommerce, built on modern WordPress. The free core handles recurring billing, free trials, sign-up fees, and plan switching with proration. Customers manage their own plans in My Account. Mixed carts and the WooCommerce Blocks checkout work out of the box. Not running WooCommerce? A built-in standalone mode sells recurring plans on any WordPress site, with no store, products, or cart required.

**The core plugin, completely free:**

* Subscription product type with daily, weekly, monthly, yearly, or custom billing intervals
* Free trials and one-time sign-up fees
* Mixed carts - subscription products and one-off products in the same checkout
* Plan switching with prorated charges and credits
* Variable subscription products
* Customer self-service portal in My Account: cancel, pause, resume, update payment method
* WooCommerce Blocks checkout fully supported
* Subscription Health Check that automatically scans for broken subscriptions (expired payment methods, stale gateway tokens, drifted renewal dates)
* Built-in migrator that imports existing WooCommerce Subscriptions data
* Modern admin with subscriptions that are sortable, filterable, and searchable
* REST API for core subscription management (list, create, update, status, notes, renewals, bulk actions, and more)
* HPOS (High-Performance Order Storage) compatible
* Standalone mode: sell subscriptions and recurring plans without WooCommerce (plans, subscribe blocks and shortcodes, a customer portal, and gateway webhooks)
* Available in 17 languages, fully translation-ready (Arabic, Danish, German, Greek, Spanish, Finnish, French, Hebrew, Indonesian, Japanese, Korean, Dutch, Brazilian Portuguese, Russian, Swedish, Turkish, Simplified Chinese)

**Payments**

Milo Subscriptions takes subscription payments through the free **[Milo Payments](https://milosubscriptions.com/milo-payments/)** plugin. It connects PayPal, Stripe, Mollie, and Square in one admin. Already using another gateway, like Authorize.Net, Braintree, or GoCardless? The **[Any Gateway](https://milosubscriptions.com/product/milosubscriptions-any-gateway/)** add-on lets subscriptions check out with any recurring-capable gateway you already have.

**Sell subscriptions without WooCommerce (standalone mode)**

No WooCommerce store? Milo Subscriptions runs on its own. Turn on standalone mode and take recurring payments on any WordPress site, with no products or cart. It is a complete way to sell recurring plans on WordPress without WooCommerce.

* Create subscription plans with their own price, billing interval, and free trial
* Add a subscribe button to any page with a block or shortcode
* Recurring billing through Stripe, PayPal, Mollie, and Square (via the free [Milo Payments](https://milosubscriptions.com/milo-payments/) plugin), driven by secure gateway webhooks
* A customer portal where subscribers manage, pause, or cancel their plan
* Subscription emails, analytics (MRR and active subscribers), and GDPR export and erase built in

Leave standalone mode off and Milo behaves like a classic WooCommerce subscriptions plugin. Same plugin, your choice.

**42 premium add-ons, one ecosystem**

Milo Subscriptions handles the fundamentals. When your store needs more, 42 premium add-ons cover the whole subscription journey, available individually or all together in the [All Add-ons Bundle](https://milosubscriptions.com/product/). Browse them from the in-plugin marketplace (Subscriptions > Add-ons) or on [milosubscriptions.com](https://milosubscriptions.com).

*Billing flexibility*

* **Subscription Coupons** - recurring discounts and prepayment incentives
* **All Products for Subscriptions** - add a Subscribe & Save option to existing products
* **Payment Plans** - split a purchase into a fixed number of installments
* **Trials Pro** - free or paid trials with one-trial-per-customer protection
* **Scheduled Start Dates** - customers pick when billing begins
* **Store Credit** - balances that pay renewals automatically
* **Gift Cards** - sell codes that redeem into store credit
* **Invoices** - sequential invoice numbers, printable invoices, VAT field
* **Any Gateway** - subscription checkout with any recurring-capable gateway
* **Stripe Bridge** - recurring billing through the official WooCommerce Stripe gateway, made for WCS migrations

*Retention and lifecycle*

* **Failed Payment Retry** - smart retry schedules that recover real revenue
* **Cancellation Flows** - pause or discount offers before a cancellation goes through
* **Winback** - automated come-back campaigns with one-click resubscribe
* **Onboarding** - welcome email sequences that kill early churn
* **NPS** - one-click satisfaction surveys, detractor alerts
* **Loyalty** - points on every payment, redeemable on renewals
* **Compliance** - consent proof, pre-renewal notices, one-click cancel links, audit trail

*Growth and marketing*

* **Referrals** - subscriber referral links with two-sided rewards
* **Affiliates** - partner program with recurring commissions on renewals
* **Social Proof** - live subscriber counters and "someone just subscribed" toasts
* **Pricing Tables** - current-plan-aware pricing tables as a block or shortcode
* **Waitlist** - capacity-limited products with automatic FIFO invitations
* **Gifting** - let customers buy subscriptions for someone else

*Physical subscriptions and fulfillment*

* **Box Builder** - mix-and-match boxes customers fill and edit each cycle
* **Fulfillment** - shipments screen, aggregated pick lists, packing slips, tracking
* **Stock Management** - reserve inventory for active subscribers
* **Split Shipping** - one subscription order, multiple addresses
* **Calendar** - private renewal/delivery calendar feeds and a merchant schedule
* **Age Check** - date-of-birth verification for age-restricted subscriptions

*Access, teams, and community*

* **Memberships** - restrict content, products, and downloads by active subscription
* **Teams** - one subscription, multiple seats, manager-invited members
* **Transfer** - move a subscription to a new owner, history intact
* **Discord** - automatic subscriber roles on your Discord server
* **Download Limits** - cap downloadable file access by subscription status
* **Pass** - QR member passes scanned at the door, verified live
* **License Server** - sell software licenses with keys, activations, updates, and GitHub release sync

*Insights and operations*

* **Advanced Analytics** - MRR, churn, LTV, retention cohorts, forecasts
* **Webhooks** - signed event deliveries with retries for any integration
* **Slack** - subscription events in your team channel as they happen
* **Milo TV** - a live full-screen dashboard for the office TV
* **Gravity Forms** - sell subscriptions through Gravity Forms
* **Digest** - a periodic email summary of your subscription business

Learn more at [milosubscriptions.com](https://milosubscriptions.com).

== Installation ==

1. Upload the `milosubscriptions` folder to the `/wp-content/plugins/` directory, or install via the WordPress plugins screen.
2. Activate the plugin through the Plugins screen in WordPress.
3. For WooCommerce stores, run WooCommerce 8.0 or later. (Not required - Milo Subscriptions also runs in standalone mode without WooCommerce.)
4. Go to Products → Add New and select **Subscription** as the product type.
5. Configure the billing period, price, and optional trial in the Subscription tab.
6. (Optional) Install the free Milo Payments plugin for a unified gateway admin, or use your existing gateway plugins.

**No WooCommerce? Standalone mode:** Enable Standalone mode in Milo Subscriptions → Settings, create a plan, then add a subscribe button to any page with the Milo block or shortcode. Recurring payments run through the free Milo Payments plugin (Stripe, PayPal, Mollie, Square), with no WooCommerce, products, or cart required.

== Frequently Asked Questions ==

= Is Milo Subscriptions really free? =

Yes. The core plugin is free, listed on WordPress.org, and stays that way. Premium add-ons and the [All Add-ons Bundle](https://milosubscriptions.com/product/) are sold separately at [milosubscriptions.com](https://milosubscriptions.com).

= Can I sell subscriptions without WooCommerce? =

Yes. Milo Subscriptions includes a standalone mode that runs without WooCommerce installed. You create plans, add a subscribe button to any page with a block or shortcode, and take recurring payments through Stripe, PayPal, Mollie, or Square using the free [Milo Payments](https://milosubscriptions.com/milo-payments/) plugin. Subscribers get a self-service portal, and you get subscription emails, analytics (MRR and active subscribers), and GDPR tools, all with no WooCommerce store, products, or cart. If you do run WooCommerce, leave standalone mode off and Milo works as a full WooCommerce subscriptions plugin instead.

= How do customers subscribe in standalone mode? =

You create a plan in Milo Subscriptions, then place a subscribe button on any page using the Milo block in the WordPress editor or a shortcode. When a customer subscribes, Milo collects payment through the free Milo Payments plugin and sets up the recurring schedule. Renewals are charged automatically and confirmed by secure gateway webhooks, with no WooCommerce cart or checkout involved.

= Can I switch between standalone and WooCommerce mode? =

Yes. The billing mode is a single setting. Run standalone on a site without WooCommerce, or leave it off and Milo behaves as a full WooCommerce subscriptions plugin. Standalone subscriptions and WooCommerce subscriptions are kept in their own records, so the mode you pick is the system that drives billing.

= Does it work with WooCommerce Subscriptions? =

Milo Subscriptions is a complete alternative to WooCommerce Subscriptions, not a companion plugin. It uses the same `shop_subscription` post type and a similar data model, which makes migrating in a clean operation.

= Can I migrate from WooCommerce Subscriptions? =

Yes. Milo ships with a built-in migrator that imports your existing subscriptions, customers, and billing schedules from WooCommerce Subscriptions. Saved payment methods come across too, with renewals routed through the free [Milo Payments](https://milosubscriptions.com/milo-payments/) plugin: connect the same gateway account you already use (Stripe, PayPal, Mollie, or Square) and your existing tokens keep charging without customers re-entering their cards. The migrator checks during preflight that the matching Milo Payments gateway is connected to the right account before you start. The one exception is WooPayments: it keeps saved cards in its own managed account that no other gateway can charge, so those subscriptions are imported with billing paused and the customer re-confirms their card once (see the WooPayments FAQ below). Prefer to keep renewing through a different third-party gateway instead? Add the [Any Gateway](https://milosubscriptions.com/product/any-gateway) add-on. Most stores migrate in an afternoon. See the [migration guide](https://milosubscriptions.com/documentation/migration/) for the full walkthrough.

= I use WooPayments. Can I migrate without interruption? =

Your subscriptions, schedules, customers, and history migrate normally. Saved cards are the exception. WooPayments stores cards in its own managed Stripe account, which your store has no direct API access to, so no other gateway (Milo included) can charge them. This is true of any move away from WooPayments, not something specific to Milo. Those subscriptions are imported with billing paused, and each customer re-confirms their card once (a one-click secure link) before their next renewal. If you instead pay through the official Stripe, PayPal, Mollie, or Square gateways, your saved cards transfer and renewals continue without interruption.

= Can I export my data, or leave Milo later? =

Yes, and easily. Your subscriptions are stored as standard WooCommerce `shop_subscription` orders with `_milo_*` meta, not in a proprietary format. From the Subscriptions screen, the Export button downloads every subscription as JSON or CSV: status, schedule, billing terms, totals, line items, customer, addresses, payment-method identifiers, and meta. Saved cards keep working with any plugin charging the same gateway account, and the WooCommerce Subscriptions migration is reversible. See "Your data is yours" in the docs for the full guarantee.

= Which payment gateways are supported? =

The free core processes payments through the companion free **[Milo Payments](https://milosubscriptions.com/milo-payments/)** plugin, which connects PayPal, Stripe, Mollie, and Square through one unified admin. To check out with a different gateway you already have (the official Stripe gateway, Authorize.Net, Braintree, GoCardless, or any other gateway that supports recurring tokens), add the **[Any Gateway](https://milosubscriptions.com/product/any-gateway)** add-on.

= Is it HPOS compatible? =

Yes. Milo Subscriptions declares full compatibility with WooCommerce High-Performance Order Storage.

= Does it work with WooCommerce Blocks checkout? =

Yes. The block-based checkout works out of the box for subscription products, including mixed carts.

= How is the Subscription Health Check different from a regular WooCommerce report? =

The Health Check scans every active subscription on a nightly schedule (and on demand) and flags issues that would otherwise surface as customer support tickets later: payment methods that have expired at the gateway, customer IDs that no longer resolve, renewal dates that have drifted out of sync. You see problems before customers email you.

= What's the difference between Milo Subscriptions and the All Add-ons Bundle? =

Milo Subscriptions (this plugin) is the free main plugins. The [Bundle](https://milosubscriptions.com/product/) ($149/year) unlocks every premium add-on we ship - currently 12 add-ons including Memberships, Gifting, Failed Payment Retry, and Advanced Analytics - plus every future paid add-on for as long as the license is active. Paid add-ons are covered by our [Refund Policy](https://milosubscriptions.com/refund-policy/).

= Where can I report a bug or request a feature? =

Open a thread in the WordPress.org support forum for this plugin, or email [support@milosubscriptions.com](mailto:support@milosubscriptions.com).

== External Services ==

Milo Subscriptions connects to milosubscriptions.com, in two situations:

**1. Anonymous usage tracking (opt-in, off by default).**
If you enable "Usage tracking" in the plugin settings, Milo Subscriptions sends an anonymized weekly report to our website. This is disabled by default and never runs unless you turn it on. The report contains no personal data: plugin, WordPress, PHP, and WooCommerce versions; locale, currency, and store base country; a one-way hash of your site URL; aggregate subscription counts and MRR; the payment gateways and billing periods in use; and which Milo add-ons are active. It is sent once per week while enabled, and stops when you disable the setting.

**2. Downloading the free Milo Payments plugin (on demand).**
When you choose to install Milo Payments from the plugin's admin, the plugin file is fetched from our website. This request only happens when you click to install and sends no data beyond a standard download request.

By using these features you agree to the milosubscriptions.com [Terms of Service](https://milosubscriptions.com/terms-of-service/) and [Privacy Policy](https://milosubscriptions.com/privacy-policy/).

== Screenshots ==

1. Dashboard overview with key subscription metrics and quick actions.
2. Sortable, filterable subscriptions list powered by DataViews.
3. Subscription detail view with order history, customer info, and payment method.
4. Send a message to the subscriber directly from the subscription detail page.
5. Plugin settings for billing rules, dunning, and customer communications.
6. One-click migration from WooCommerce Subscriptions.
7. Health Check scan that flags broken subscriptions, expired payment methods, and drifted dates.
8. Unified gateway management for PayPal, Stripe, Mollie, and Square.
9. Browse and install premium add-ons from inside the WordPress admin.

== Changelog ==

= 1.8.7 =
* Fixed: admin links (Configure payments, Open wizard, Add product, Back to WP Admin) pointed at a root relative /wp-admin/ path, so they returned the theme's "Page not found" on installs where WordPress lives in a subdirectory, such as the Bedrock and roots.io stack. They now use the admin URL WordPress reports.
* Fixed: the migration progress bar could display more than 100% after an out-of-band (CLI) migration.
* Fixed: a PHP deprecation notice (strip_tags on a null title) on the setup wizard screen with PHP 8.1+.

= 1.8.6 =
* Fixed: the Attributes tab was hidden on regular (non-subscription) products, including plain variable and simple products.

= 1.8.5 =
* Fixed: the "Used for variations" checkbox stayed hidden on variable subscription products after WooCommerce's attribute AJAX renders, blocking variation generation.

= 1.8.4 =
* Added: Milo Stripe Bridge in the add-ons marketplace (catalog at 42): keep the official WooCommerce Stripe gateway, saved cards, and mandates when migrating from WooCommerce Subscriptions.

= 1.8.3 =
* Added: Stripe Bridge, Pass, and Digest add-on cards in the marketplace (42 add-ons); unique colors restored on the Any Gateway and Webhooks cards.

= 1.8.2 =
* Fixed: fatal error on every wp-admin page when WooCommerce is not installed (standalone mode): the first-run wizard's existing-data check called WooCommerce functions unconditionally; it now falls back to the standalone subscriptions table.

= 1.8.2 =
* Fixed: the settings snackbar no longer overlaps the admin shell frame.
* Added: the milo_subscriptions_user_has_active_subscription filter, so add-ons (such as the upcoming Teams add-on) can grant active-subscriber access to users who inherit it rather than owning a subscription directly.
* Added: time-released (drip) downloads for WooCommerce downloadable products.
* Added: Teams, Cancellation Flows, Box Builder, Elementor Connector, Webhooks, Referrals, Loyalty, Invoices, Payment Plans, Trials Pro, Pricing Tables, Winback, Waitlist, NPS, Store Credit, Slack, Gift Cards, Onboarding, Affiliates, Fulfillment, Compliance, Social Proof, Transfer, Discord, Calendar, Age Check, and Milo TV add-ons in the marketplace.

= 1.8.1 =
* Fixed: a subscription whose first payment is $0 (for example a 100% coupon) is no longer cancelled when WooCommerce's unpaid-order stock cron cancels the still-pending parent order. Subscription parent orders are now exempt from that cron, and the order _subscription_ids list no longer starts with an empty string.
* Changed: plan switching now prorates by direction. An upgrade charges only the prorated difference immediately (it used to overcharge close to the full new price); a downgrade charges nothing now and credits the overpaid remainder to the next renewal; a same-price switch charges nothing.
* Changed: switching a plan no longer re-charges the plan sign-up fee (it is a one-time onboarding charge the customer already paid). Opt in via the milo_subscriptions_charge_signup_fee_on_switch filter for plans with a genuine per-switch setup cost.
* Fixed: switching a plan during a free trial no longer applies a proration credit (nothing has been charged for the current period yet). The switch still bills the new plan at the trial end.
* Added: standalone plan downloads can be time-released (drip). Each file has an "available after N days" setting in the plan editor; it unlocks that many days after the subscription starts, and the account/shortcode list shows a "Available on <date>" label until then.

= 1.8.0 =
* Added: standalone plans can offer downloadable Media Library files, gated to active subscribers and listed with the [milo_subscriptions_downloads] shortcode.
* Added: a unified "My Account" area for standalone subscribers (subscription details + downloads + licenses), available as the [milo_subscriptions_account] shortcode and the My Account block.
* Added: standalone plans can grant a license via the Milo License Server, issued to active subscribers and revoked on cancellation; license keys appear in the account area.
* Added: developer hooks on the standalone download endpoint (milo_subscriptions_download_allowed filter, milo_subscriptions_download_served action) so add-ons can gate or meter downloads (e.g. per-period quotas).
* Fixed: add-on settings sections with multiple fields now have proper spacing between fields.
* Added: a per-plan meta layer so add-ons can attach settings to standalone plans (milo_subscriptions_plan_fields filter renders fields in the plan editor; milo_subscriptions_get_plan_meta() reads them).

= 1.7.0 =
* Fixed: the Products admin list now spans the full width like the other list screens (it was capped at 1200px).
* Fixed: removed a dormant, mismatched internal data-store mapping for subscriptions (hardening; no behavior change).
* Added: subscription fields now round-trip through the WooCommerce product CSV import and export.

= 1.6.0 =
* Added: support for gateways that schedule their own recurring payments (e.g. WooPayments, Stripe Billing); Milo no longer creates a competing renewal order for them, and they can record renewals via record_external_renewal().
* Added: one-click Health Check fixes (enable auto-renew, recalculate the next payment date, process a missed renewal, or email the customer to update payment).
* Fixed: on the subscription detail screen, the customer email no longer overlaps the action buttons at narrow widths.
* Fixed: the migration dry-run no longer warns about remapping to Milo Payments when the Any Gateway keep-existing-gateway path is active.
* Added: read-only WordPress Abilities API endpoints (get, list, count subscriptions, and stats) for AI and agent tools.
* Improved: the first-run setup wizard no longer hijacks admin pages on a site that already has subscriptions or subscription products.
* Fixed: switch and resubscribe related orders now appear on the subscription detail screen (they were previously never returned).
* Added: native analytics in standalone mode (active subscribers, MRR, new/canceled this month, and plan distribution), computed without WooCommerce.

= 1.5.0 =
* Fixed: usage tracking no longer sends from local sites, even when confirmed as production.
* Added: with the Any Gateway add-on, migration can keep a subscription's existing gateway (via the `milo_subscriptions_migrate_payment_method` filter) instead of remapping to Milo Payments.
* Improved: dry-run and verification reports now flag subscriptions that will not auto-renew because their mapped gateway is not installed or connected.

= 1.4.0 =
* Added: import subscriptions from Flexible Subscriptions (WP Desk).
* Fixed: Milo no longer pauses when another plugin ships a WooCommerce Subscriptions compatibility shim.
* Added: import subscriptions from Sublium Subscriptions for WooCommerce.
* Added: export subscriptions to JSON or CSV.
* Added: WP-CLI commands to manage subscriptions and run migrations.
* Added: failed background jobs are logged and shown on Health Check.
* Improved: gateways now advertise per-feature subscription support.
* Improved: the subscriptions REST endpoint now publishes an item schema.

= 1.3.0 =
* Added: admin "Request payment update" action that emails the subscriber a secure link to update their payment method.
* Added: import from YITH WooCommerce Subscription (products, subscriptions, schedule, statuses, renewal orders), with preview and rollback.
* Added: standalone lifecycle emails (activation, payment failure, cancellation) for customers and merchant, editable in Settings > Emails.
* Added: Products view in the Milo admin to list, create, and open subscription products.
* Added: "Plan call to action" block pattern (Patterns > Milo).
* Added: free trials and one-time sign-up fees on standalone plans.
* Added: customers can change a subscription's shipping address from My Account.
* Added: "Plans" entry in the WordPress admin menu in standalone mode.
* Added: all Milo blocks now live in a dedicated "Milo" block category.
* Added: review prompt on the plugin's own screens, 7 days after install.
* Added: warning when a WooCommerce-only add-on runs in standalone mode.
* Improved: migration preview now reports exact totals for the whole store.
* Improved: standalone Plans page rebuilt on DataViews (search, sort, grid).
* Improved: Restricted Content, My Subscription, and Subscribe Button blocks now use a native, theme-styled editor preview.
* Improved: Health Check findings stored per subscription (no more 5,000-row cap).
* Improved: setup wizard verifies the Milo Payments download before activating it.
* Improved: plan switches now save the subscription fewer times.
* Fixed: a plan switch no longer attaches to an unrelated product added to the cart.
* Fixed: synchronized-renewal proration now follows the real schedule for quarterly and yearly plans.
* Fixed: standalone dashboard now reports real numbers instead of zeros.
* Fixed: the WooCommerce-mode Health Check banner no longer shows in standalone mode.
* Fixed: migrated subscriptions correctly relink their parent order.
* Fixed: comma-decimal amounts (e.g. "12,50") now save correctly in the standalone plan editor.
* Fixed: standalone nav and sidebar no longer surface WooCommerce-only add-ons.
* Fixed: plan editor side-by-side fields are now top-aligned.
* Fixed: the standalone Subscribe Button now uses the theme's native button styles.

= 1.2.0 =
* Added: migrations can now be reverted (schedule restored, renewal orders relinked, the Milo copy trashed).
* Added: WordPress Export/Erase Personal Data tools now cover WooCommerce-mode subscriptions.
* Added: configurable lead times for renewal, expiration, and trial-ending reminder emails.
* Added: standalone mode reconciles against Stripe twice a day to recover from missed webhooks.
* Fixed: the New Product modal now confirms before discarding a draft.
* Fixed: a plan switch no longer silently replaces the recurring payment method unless it can recur.
* Fixed: migrating an active subscription now applies the subscriber role right away.
* Dev: the codebase is now lint-gated in CI (PHPCS + PHPStan), at zero coding-standard errors.

= 1.1.2 =
* Fixed: the dashboard setup checklist no longer marks "Run the setup wizard" as done when the wizard is opened and then exited before finishing.
* Fixed: editing a subscription via the REST API in standalone mode now returns a clear error instead of failing when WooCommerce is not active.
* Fixed: migrating from WooCommerce Subscriptions now carries over each subscription's original sign-up fee.
* Fixed: on stores that enter prices inclusive of tax, the sign-up fee and free-trial credit are no longer taxed twice, so a free-trial cart correctly totals zero today.

= 1.1.1 =
* Fixed: subscriptions that renew for $0 (free or fully-discounted plans) now complete the renewal automatically and keep running, instead of attempting a payment and being put on hold.

= 1.1.0 =
* Customers can add a payment method from My Account to a subscription that has none yet (for example after importing subscriptions that need a card).
* Restoring a subscription's payment method now reactivates an on-hold subscription and reschedules its next renewal automatically.
* Imported subscriptions that were already past due now resume billing instead of silently stopping.
* Migration now carries over Stripe details stored on the original order, so imported subscriptions keep charging on their first renewal.
* Migration now clearly explains card portability: Stripe, PayPal, Mollie, and Square transfer without interruption, while WooPayments cards must be re-confirmed once by each customer.
* The health check now flags subscriptions whose saved card has expired, so you can ask those customers to re-authorize payment.
* Added a "Check payment methods" action on the Health Check screen that verifies saved cards in the background and flags any that have expired.
* Added a one-click way to email customers whose subscription needs a payment method (imported without a usable card, or expired card) a secure, sign-in-protected link to add or update their card.
* Added customer reminder emails sent a few days before a subscription renews, expires, or its free trial ends (each can be turned on or off under WooCommerce → Emails).
* Customers now receive a confirmation email when they switch their subscription to a different plan.
* Fixed: the "Change payment method" action no longer dead-ends on gateways that don't support it yet (Mollie, Square, PayPal), and the saved-card list is now limited to the subscription's own payment provider so a card can't be assigned to the wrong gateway.

= 1.0.9 =
* Fixed: cancelling a subscription with prepaid time remaining no longer charges another renewal at the end of the term; the cancellation is now finalized correctly.
* Tightened the admin header spacing on medium and small screens so it matches the desktop layout.
* Hardened output escaping on the add-on license screen.
* Opt-in usage tracking now uses a non-reversible random site identifier instead of a hash of the site URL.
* Uninstall now removes all of the plugin's options and scheduled tasks when "remove data" is enabled.
* Subscription scheduling degrades gracefully when Action Scheduler is unavailable.
* Removed a daily scheduled task that had no effect.
* Stopped creating an internal database table that was never used.
* Release packages no longer include a stray empty internal folder.

= 1.0.8 =
* Sign-up fees are itemized as a taxable line in cart and checkout totals.
* Admin schedule edits validate dates and reschedule the next renewal automatically.
* Subscription switch links are hardened with nonce protection.
* Custom email content keeps its HTML formatting and line breaks.
* Add-on activation respects the plugin-management capability.
* Renewals keep each subscription's locked-in price, with an opt-in to re-price.
* The "last payment" date reflects actual paid orders.
* Subscription emails pause automatically on staging and development sites.
* Subscription creation at checkout is atomic across multi-subscription orders.
* Standalone mode loads its tables and REST routes only when enabled.
* REST API documentation lists the exact available endpoints.
* Customers can securely update their subscription card, with SCA/3DS and off-session setup handled by the gateway.
* Buying several subscriptions that bill on the same schedule creates one grouped subscription.
* The Payments screen guides you to install Milo Payments when it isn't active.
* The Add-ons page installs the free Milo Payments plugin in one click.
* The block Site Editor stays available when WooCommerce is inactive.
* Add-on cards show a "View details" button to open each add-on's information.
* The add-on details view shows a branded header instead of an empty screenshot placeholder.

= 1.0.7 =
* Failed renewal recovery: the on-hold email now includes a pay link, and paying it reactivates the subscription.
* The "Create & send invoice" action now emails Milo's branded renewal invoice instead of the generic WooCommerce one.
* Block cart and checkout now show the recurring subscription total.
* Import preview notices use the native WordPress notice style, and the "Milo Payments not active" notice links to install it.
* Free trials and other $0 first payments now save a payment method, so the first renewal charges automatically.
* Clarified the migration FAQ: imported renewals route through Milo Payments (connect the same gateway account), and the Any Gateway add-on keeps a third-party gateway.

= 1.0.6 =
* Import no longer requires connecting a payment gateway first.
* Support for longer billing intervals (e.g. every 10 days).
* Standalone mode blocks live billing on staging and development sites (test mode still works).
* Switching a plan no longer resets the renewal date.
* Buying a variable subscription now creates the subscription with the correct billing period.
* Variations and Attributes tabs now always show for variable subscription products.

= 1.0.5 =
* Fixed a conflict with WooCommerce Subscriptions when both are active.
* Setup wizard and import improvements.
* Standalone mode (without WooCommerce) fixes.

= 1.0.4 =
* Fixed free-trial billing so trial products are not charged before the trial ends.
* Improved renewal reliability.
* Improved migration reliability.

= 1.0.3 =
* Standalone mode (without WooCommerce) improvements and fixes.

= 1.0.2 =
* Internationalization: the plugin is now fully translation-ready. Added missing translator comments, corrected plural string placeholders for languages with complex plural rules, and resolved all `wp i18n make-pot` warnings.
* Added bundled translations for 17 locales: Arabic, Danish, German, Greek, Spanish, Finnish, French, Hebrew, Indonesian, Japanese, Korean, Dutch, Brazilian Portuguese, Russian, Swedish, Turkish, and Simplified Chinese.
* Fixed the "Configure payments" dashboard links so they open the Payments screen correctly when Milo Payments is active.

= 1.0.1 =
* Packaging fix: removed a stray file left over from the initial release. No functional changes.

= 1.0.0 =
* Initial public release.
* Subscription product type with day/week/month/year billing intervals and custom periods.
* Free trials and sign-up fees.
* Plan switching with prorated charges and credits.
* Variable subscription products.
* Mixed carts (subscription + one-off products in the same checkout).
* WooCommerce Blocks checkout support.
* Customer self-service portal in My Account.
* Subscription Health Check with nightly and on-demand scanning.
* Built-in migrator from WooCommerce Subscriptions.
* Modern admin powered by @wordpress/dataviews.
* REST API for subscription management.
* HPOS compatibility.

== Upgrade Notice ==

= 1.0.6 =
Import subscriptions before connecting a payment gateway. Recommended update.

= 1.0.5 =
Fixes a conflict with WooCommerce Subscriptions when both are active, plus setup-wizard and import improvements. Recommended update.

= 1.0.4 =
Billing and migration reliability fixes. Recommended update.

= 1.0.3 =
Standalone mode improvements. Safe update.

= 1.0.2 =
Now available in 17 languages, plus a dashboard fix. Safe update with no breaking changes.

= 1.0.1 =
Packaging fix; safe update with no functional changes.

= 1.0.0 =
First public release.
