Three tools. One job: take recurring payments on WordPress. They solve the same problem in radically different ways — with radically different costs, complexity, and trade-offs. Here is every dimension that matters, compared honestly.
TL;DR Scorecard
| Dimension | Ree | EDD Recurring | WooCommerce Subscriptions |
|---|---|---|---|
| Price | $0–$29.99 once | $89–$299/yr | $199/yr (+ free WC core) |
| Setup time | ~15 min | ~30 min | 1–3 hrs |
| Plugin size | ~20KB | ~8MB (core + addon) | ~40MB (WC + sub) |
| External SDK | None | Stripe PHP SDK | Stripe PHP SDK |
| Data ownership | 100% yours | Yours (EDD tables) | Yours (WC tables) |
| Webhook handling | Built-in, verified | Built-in | Built-in |
| Dunning emails | 3-stage, built-in | Basic (1 email) | None built-in |
| Customer portal | Stripe native | EDD account page | WC My Account |
| Proration | Stripe handles silently | Supported | Full UI |
| Free trial | Yes (per plan) | Yes | Yes |
| Multi-currency | Single currency | Single currency | Multi-currency |
| Physical products | No | No | Yes |
| Tax / VAT | Via Stripe Tax | Basic | Full (WooTax) |
| Open source | MIT — fully open | GPL (core free, addon paid) | GPL (core free, sub paid) |
| License server | None | EDD license server | Woo license server |
| PHP dependencies | Zero | Stripe PHP SDK 10.x | Stripe PHP SDK 10.x |
| DB tables created | 1 (subscriptions) | ~8 (EDD core) | ~20+ (WC core) |
| Admin UI quality | Simple, focused | Good | Best-in-class |
| Codebase you can read | ~600 lines total | ~12,000 lines | ~80,000 lines |
1. Cost — the number nobody talks about clearly
Let’s make this concrete with a 3-year cost of ownership for a solo developer shipping a SaaS product:
| Cost item | Ree | EDD + Recurring | WooCommerce + WC Sub |
|---|---|---|---|
| Year 1 | $9.90 (Inspire) | $89 (EDD Recurring) | $199 (WC Subscriptions) |
| Year 2 | $0 | $89 (renewal) | $199 (renewal) |
| Year 3 | $0 | $89 (renewal) | $199 (renewal) |
| 3-year total | $9.90 | $267 | $597 |
| Break-even MRR | <$1 | ~$22/mo | ~$50/mo |
The EDD and WooCommerce costs above are just the subscription addon. Add multi-currency, advanced tax, email marketing integrations, and PDF invoices and you are looking at $300–$800/year stacked on top of each other — for plugins to collect money.
Ree’s position: $9.90 once to support the project. Everything in the plugin is free forever. You are not paying a subscription to collect subscriptions.
2. Architecture — what is actually happening under the hood
Ree
Ree talks to Stripe directly via WordPress’s built-in wp_remote_post(). No Composer. No vendor folder. No autoloader. The entire Stripe communication layer is one file — class-ree-stripe.php — that you can read in 10 minutes. When something goes wrong at 2am, you can trace exactly what happened.
// The entire Stripe API request in Ree
$response = wp_remote_request( 'https://api.stripe.com/v1/' . $endpoint, [
'method' => $method,
'headers' => [ 'Authorization' => 'Bearer ' . $secret_key ],
'body' => $params,
] );
return json_decode( wp_remote_retrieve_body( $response ), true );
EDD Recurring
EDD core ships with the Stripe PHP SDK bundled (~3MB). EDD Recurring adds another layer on top — its own EDD_Recurring_Stripe class that wraps the SDK, which wraps the HTTP calls. When a webhook fails, you are debugging through three layers of abstraction. The SDK also pins to a specific Stripe API version in its header — when Stripe deprecates that version, the plugin can break until the plugin author ships an update.
WooCommerce Subscriptions
WooCommerce core is 40MB of e-commerce infrastructure: product catalog, cart, checkout, orders, shipping, inventory, tax, customer accounts. WooCommerce Subscriptions adds another ~5MB. The subscription system hooks into WC’s order system — a subscription is a special order type with recurring billing attached. This is powerful when you need all of WooCommerce. It is massive overkill when you just want to charge $9/month.
3. Webhook handling — the most critical difference
Webhooks are where recurring billing either works or silently breaks. Here is exactly what each system does when Stripe fires an event:
| Event | Ree | EDD Recurring | WC Subscriptions |
|---|---|---|---|
checkout.session.completed |
✓ Creates DB record, links WP user, sends welcome email | ✓ Creates EDD payment | ✓ Creates WC order |
invoice.paid |
✓ Updates period dates, keeps status active | ✓ Creates renewal payment | ✓ Creates renewal order |
invoice.payment_failed |
✓ Sets past_due, sends escalating dunning email (3 tiers) | ✓ Sets failing status, 1 email | ✓ Sets on-hold, relies on Stripe retry |
customer.subscription.updated |
✓ Reflects status, cancel_at_period_end | ✓ Updates status | ✓ Syncs WC subscription |
customer.subscription.deleted |
✓ Sets cancelled, sends goodbye email | ✓ Expires access | ✓ Cancels WC subscription |
customer.subscription.paused |
✓ Sets paused status | ✗ Not handled | Partial |
| Signature verification | ✓ HMAC SHA-256, 5-min tolerance | ✓ SDK handles | ✓ SDK handles |
| Webhook event log | ✓ Stored in DB (ree_webhook_log) |
✗ No persistent log | ✗ No persistent log |
| Idempotency | UNIQUE KEY on subscription ID | Event ID check | Order de-duplication |
Ree’s edge: Every webhook event is stored in wp_ree_webhook_log with the full payload. When you need to debug why a subscriber’s access wasn’t revoked, you can query the log directly — no guessing, no Stripe dashboard archaeology.
4. Dunning — recovering failed payments
Industry data shows that 20–40% of churn is involuntary — cards that expired, got replaced, hit limits. Dunning is the process of retrying and emailing. Here is how each system handles it:
Ree: 3-stage escalating email sequence. Stage 1 is informational (“we couldn’t process your payment”). Stage 2 escalates (“second attempt failed — action needed”). Stage 3 is a final warning (“your subscription will be cancelled”). Each email links to the Stripe customer portal for a one-click card update. The tone escalates intentionally — sending a “final warning” on the first failure destroys customer trust.
EDD Recurring: Sends one email on payment failure. No escalation. Relies heavily on Stripe’s own retry schedule (which retries 3–4 times over 7 days by default). No win-back emails after cancellation.
WooCommerce Subscriptions: Built-in dunning is minimal — it sets the subscription to “on-hold” and relies on the customer noticing. The real dunning for WooCommerce requires a separate plugin (e.g., Metorik, Subscription Toolkit) adding another $99–$199/year to your stack.
5. Customer self-service portal
Ree redirects to Stripe’s hosted Billing Portal. This is genuinely excellent software — Stripe built it, Stripe maintains it, and it handles card updates, plan changes, invoice downloads, and cancellation. Your customers get a polished, mobile-friendly UI that Stripe keeps up to date. You build nothing. You maintain nothing.
EDD Recurring uses EDD’s account page. It works, it is functional, but it looks like a WordPress plugin — because it is. Card updates require the customer to enter new payment details through EDD’s checkout flow again, which is friction.
WooCommerce Subscriptions has the best self-service UI of the three — WC’s “My Account” page with a dedicated Subscriptions tab. You can upgrade, downgrade, pause, and cancel. If you need a rich self-service experience and do not want to rely on Stripe’s portal, WooCommerce is the winner here.
6. When to use each one
| Situation | Best choice | Why |
|---|---|---|
| Simple SaaS or membership site, digital-only | Ree | Zero cost, minimal surface area, Stripe portal handles everything |
| Existing EDD store adding subscriptions | EDD Recurring | Native integration with EDD products, payment history, and customers already in EDD |
| Physical products + subscriptions (e.g. subscription boxes) | WooCommerce | Only WooCommerce handles inventory, shipping, and variable product subscriptions properly |
| Multi-currency, international VAT, complex tax | WooCommerce | WooCommerce + WooTax is the most mature tax stack in WordPress |
| Tight budget, side project, early-stage | Ree | Free. No recurring plugin cost until you are profitable enough to care |
| Agency deploying for multiple clients | Ree Support ($29.99) | Use on 3 sites, priority support, one-time cost across all deployments |
| Need rich admin reporting, coupons, affiliate integration | WooCommerce | WooCommerce’s extension ecosystem is unmatched for reporting and marketing |
| Want to own and audit every line of code | Ree | ~600 lines, MIT licensed, no obfuscation, no license server |
7. Performance impact
Every plugin adds weight to every page load. Here is a rough memory and query comparison on a cold WordPress load:
| Metric | Ree | EDD + Recurring | WooCommerce + WC Sub |
|---|---|---|---|
| Files loaded on frontend | ~8 PHP files | ~120 PHP files | ~400+ PHP files |
| DB tables added | 2 | ~8 | ~20 |
| Memory footprint (approx) | ~0.5MB | ~8MB | ~25MB |
| Frontend JS injected | None | Cart fragments JS | Cart fragments + 4 scripts |
| Frontend CSS injected | None | EDD styles | WC styles (~15KB) |
WooCommerce in particular injects cart fragment AJAX on every page — even your blog posts. This is a well-known performance issue and requires a separate plugin (e.g., “Disable Cart Fragments”) to fix. Ree touches nothing on pages that don’t use a Ree shortcode.
8. The honest weaknesses of Ree
This is not a sales pitch. Ree v1.0 has real limitations:
- No proration UI. Stripe handles proration silently when a customer upgrades, but there is no UI in Ree to preview or adjust it. EDD Recurring and WC Subscriptions both have proration controls.
- No metered billing. Usage-based pricing (charge per API call, per seat, per GB) is not in v1.0. This is a Stripe Billing feature that requires a more complex integration.
- No multi-currency switcher. Your Stripe account can accept multiple currencies, but Ree does not provide a UI to show localised prices or switch currencies at checkout. WooCommerce with the Payments plugin handles this natively.
- No coupon system. EDD and WooCommerce both have mature coupon/discount code systems. Ree relies on Stripe’s built-in promotion codes, which work but have no WordPress admin UI.
- Single-developer project. EDD has a full team. WooCommerce has Automattic behind it. Ree is built and maintained by IdeaUseful. For mission-critical enterprise billing, that is a real consideration.
Conclusion
There is no universally correct answer. The right tool depends on what you are building:
- Building a simple SaaS or membership site and want the lowest cost, smallest footprint, and most maintainable code? Ree.
- Already using EDD for digital products and want to add subscriptions without switching systems? EDD Recurring.
- Building a complex e-commerce operation with physical products, multi-currency, advanced tax, or a need for a rich plugin ecosystem? WooCommerce Subscriptions.
What Ree does differently is treat the plugin itself as infrastructure — something that should cost nothing to run, be readable by anyone, and get out of your way. The complexity of subscription billing is Stripe’s problem. Ree just wires WordPress to Stripe correctly and stays out of the way.