There is a moment in every product’s life where you look at the codebase, look at where the platform is heading, and realize: patching will not cut it.
For Caddy, that moment came when I saw what WordPress was doing with the Interactivity API and WooCommerce was doing with the Store API. The foundation of modern WordPress was shifting. And Caddy’s foundation was jQuery.
So I made a call that most plugin developers avoid. I deleted everything and started from zero.
4,000+ active installs. Paying Pro customers. A stable, working product. And I threw away 100% of the code.
Here is why. And what I learned doing it.

The Problem With “Good Enough”
Caddy worked. Let me be clear about that. People liked it. It had solid reviews. It did what it said it would do.
But “works” and “built right” are two different things.
Under the hood, Caddy was running on jQuery and traditional AJAX calls. Every cart update meant a full round-trip to the server. Every interaction loaded more JavaScript than it needed. It worked, but it was duct-taped to a foundation that WordPress itself was moving away from.
I could have kept shipping patches. Added features on top of the old architecture. Kept the revenue flowing and the reviews positive.
But I would have been building on sand.
The Bet on Interactivity API
WordPress released the Interactivity API as the official way to build interactive front-end experiences. WooCommerce launched the Store API as the standard for cart and checkout data. These were not side projects or experiments. They were the direction of the entire platform.
The bet was simple: if I rebuild Caddy on the same APIs that WooCommerce itself uses, the plugin stays aligned with where WordPress is going for the next 10 years. If I keep patching the old version, I am on borrowed time.
Simple does not mean easy.
What Actually Happened During the Rewrite
I will not sugarcoat this. It was harder than I expected.
The good parts:
- The Interactivity API is genuinely excellent for reactive UI. Cart updates are instant now. When a customer changes a quantity, only the elements that changed re-render. No full page reload. No AJAX spinner. Just instant feedback.
- Dropping jQuery meant dropping an entire layer of complexity. No dependency conflicts with themes. No “which version of jQuery is loaded?” debugging sessions. Zero jQuery, period.
- The Store API gave me a clean, standardized way to interact with cart data. No more hooking into internal WooCommerce functions that might change between versions.
The hard parts:
- The Interactivity API was new. Documentation was thin in places. Some patterns I had to figure out through trial and error (and reading core WordPress source code).
- Every feature had to be rebuilt from the ground up. Save for Later, product recommendations, the free shipping meter, coupon fields. All of it. There was no “copy and paste from v2.”
- Testing across every theme and plugin combination took longer than the actual coding. Block themes, classic themes, GeneratePress, Astra, Storefront, OceanWP. Caddy had to work with all of them.
What broke:
- Edge cases. So many edge cases. Variable products with 15 attributes. Stores with 4 different shipping zones. Cart rules that interact with coupon logic in unexpected ways.
- Caching. WP Rocket, LiteSpeed, various server-level caches. A reactive cart that bypasses the page cache needs to be handled carefully. I ended up building WP Rocket support directly into Caddy.
- My timeline. I thought 3 months. It took longer. (Every developer reading this is nodding right now.)
The 5 Lessons
1. A rewrite is a product decision, not a technical one.
I did not rewrite Caddy because the old code was “bad.” I rewrote it because the market was moving. The Interactivity API is where WordPress is going. Stores running block themes need plugins built for that world. This was a business bet, not a code cleanup.
2. Your users are more patient than you think (if you communicate).
I was terrified of shipping a major version. What if something breaks? What if people hate the new UI? What if migration goes wrong?
The answer: talk to them. I was upfront about what was changing and why. Most users appreciated the transparency. The ones who hit bugs reported them calmly because they understood the context.
3. Kill your darlings. Seriously.
Some features from v2 did not make it into 3.0. Not because they were bad, but because they did not fit the new architecture cleanly. Shipping a focused, solid 3.0 was better than shipping a bloated one just to match a feature checklist.
4. Performance is the feature nobody asks for but everyone notices.
Nobody emailed me saying “I wish my side cart loaded 200ms faster.” But after 3.0 shipped? Multiple users mentioned their cart “feels snappier.” They could not articulate why. They just noticed.
Zero jQuery. Reactive rendering. Only re-rendering changed elements. These are invisible features that shape the entire experience.
5. Align with the platform, not against it.
This is the biggest one. Building on the Interactivity API and Store API means Caddy is not fighting WordPress. It is moving with it. When WooCommerce ships updates, Caddy benefits instead of breaking. When WordPress improves the Interactivity API, Caddy gets faster for free.
Fighting the platform is a losing game. I have seen plugins die doing it. Aligning with it means your product gets better every time the platform does.
The Result
Caddy 3.0 shipped on March 4, 2026. Version 3.0.1 followed shortly after with bug fixes from real-world usage.
Here is what the rewrite delivered:
- Zero jQuery dependency. Lighter, faster, fewer conflicts.
- Instant cart updates. Only changed elements re-render. No full page reloads.
- Works with any theme. Block themes, classic themes, anything.
- HPOS ready. Compatible with WooCommerce High-Performance Order Storage.
- Built-in WP Rocket support. No extra config needed.
- WordPress 6.5+, WooCommerce 7.0+, PHP 7.4+. Modern requirements for a modern plugin.
Was it worth it? Without question.

The old Caddy was a good plugin. The new Caddy is the right plugin.
If You Are Building a Plugin (or Thinking About a Rewrite)
Ask yourself one question: is the foundation you are building on the same foundation the platform is investing in?
If the answer is no, patches will not save you. They will just delay the inevitable.
Start the rewrite before your users make you.
Caddy is a free WooCommerce side cart plugin with 4,000+ active installs. Try it free on WordPress.org or check out Caddy Pro for Rewards Meter, announcement bar, analytics integration, and more.