Skip to main content

FluentCart doesn't provide updates for expired licenses

This should be a store owners decision.

Current behavior: getVersion() returns version metadata for expired licenses but omits the download URL, and downloadLicensePackage() rejects expired licenses independently. So expired users see an update exists but can't install it.

Request: A per product checkbox in License Settings, something like "Allow updates for expired licenses." When enabled, both the version response and download endpoint would serve expired, but previously valid licenses.

I see fluent_cart/license/get_version_response exists as a filter, but the download endpoint has a separate isValid() check with no corresponding filter, so a clean solution would need to be built in.

Ross FCA

What's the use case here? I imagine this is default behaviour as 99% of people want updates to stop when licenses expire - otherwise why have a license at all? Could you not just unexpire their license so updates continue?

From my experience when a user asks for something to work in a way that goes against the norm, it's helpful to get the use case and explanation as to why. Sometimes the user is actually just doing something the wrong way and can achieve the same goal another way, it could be an edge case I've just not thought of, or it can be just so out there and unique to that individual that changing the core product for it makes no sense.

Otherwise you can get users saying hey, when I click the Add to Cart button it adds the current item to the cart, but I want it to actually empty the entire cart and navigate away from the page. Then you press why and find this user runs an engagement ring boutique and this is a dummy Add to Cart button for when your girlfriend walks in the room.

So what's the use case? They've built a licensing system that checks the users license to validate updates to the licensed product. You want a system where the user gets a license, can download the product, the license expires but they can still download the product. So why have the license at all?

Jeff Mapes

Hi Ross FCAΒ I appreciate your interest in my question, thanks! I could definitely use the advice from an experienced plugin business. This actually feels like it is a potentially delicate subject, so I'm open to taking it to a private chat, if any of this is "stuff we don't talk about publicly"

As you know, plugin developers have a couple of business policy decisions to make, and most have secondary consequences. For the following decisions, we will assume paid plugins.

Self host on FluentCart or wp.org - the ones you publish on wp.org will get updates, forever. period. Most of my plugins have a limited trial version that will be hosted on wp.org, which will theoretically help people discover my products, they handle hosting and updates, etc. So this forced other decisions like how to handle expired licenses.

I have a couple of small utilities that will have paid only versions, and those are the ones that caused me to ask the question. I would continue to update those too. If you can't beat them, join them kind of decision.

AFAIK, Fluent made a decision to "cut off" updates for non paying customers, meaning those who purchased annual or installment license by allowing them to keep their pro version and cut off updates. A customer can pay for a year, or even a month of annual, and they get pro for life, with no updates. If you want updates, renew your subscription. I can personally think of many ways to abuse this generosity. A developer has many other worries about people abusing their licenses, but that opens an especially easy one to abuse, imho. In the end, we really must depend on the goodwill of supporters who are happy to pay us for our work, right?

What is your policy about monthly subscribers? I see you have a monthly program. I haven't purchased or downloaded any of your plugins yet, but I'm definitely planning to. You have some great stuff I would consider useing in my community. I just haven't gotten around to checking them out yet.

Ross FCA

JeffΒ It's the weird and wonderful world of wordpress plugin licensing! The whole ecosystem is built on unwritten rules.

From my experience, as a customer and developer, there's just no perfect balance to this. I saw a really interesting post on Reddit recently from the developer of Youzify https://www.reddit.com/r/Wordpress/comments/1r09i9i/9_years_461k_now_3850month_i_finally_quit/ It covers your concerns quite well, and how easy it is to walk into a slow decline of your business if recurring revenue is not established.

Wordpress plugins are open source. Once the code is in my possession I can technically do what I want with it. To sell plugins then, what you need to say you're selling is updates and support. Honestly sometimes it's like a shop selling bongs labelled as "water pipes" - we know what they are, but they just can't say it.

The plugin developer wants recurring revenue from the users of the product. The users would much prefer to pay once and be done. They can absolutely do that by not paying for updates and support. The other side of it is that if you're selling "updates and support" then you better well provide that πŸ˜… - if you sell a plugin with no updates or support, there's no reason for anyone to keep up payments. It's your job to keep your plugins up to date and to provide the support that justifies a cost.

What you then get is a weird situation where maybe a developer holds back on their development just to insure they have enough to encourage those subscriptions. If I make my plugin absolutely perfect right now, document it into an inch of its life, see all these customers come and in and think it's great - then like Youzify, you find that it all tails off, no more money, but still lots of users. That's got to be really frustrating.

In a perfect world you are creating something of value. Something that then creates value for someone else, or they see as worthy enough to use their disposable income on. You may get a few bad actors who will abuse generosity, or demand too much, but it's worth it to deal with them at the time to in turn give the rest of your customers a pain free and easy experience.

You could technically pay for 1 month of my add-ons, download them all, cancel the sub, and use them as-is without support forever. And if anyone wants to do that, they'd be welcome to. I can't stop them and personally don't intend to put up barriers that would ruin any of the experience for other members. On the contrary, I have a lifetime deal that is deliberately creating an army of "pay once freeloaders" - and I'm incredibly grateful for every single one of them πŸ˜…

Removing access to the plugin when payment expires is generally considered bad practice, but it's definitely known to be done. I will soon provided a couple of services that cost me money to run, which is a bit different to the typical plugin ecosystem. Your development is a one time thing and we're in a privileged industry where your efforts can be duplicated infinitely. It's not like a baker who to sell a dozen rolls needs to bake a dozen rolls. We build once and sell XXX times. If one of those freeload off you, it didn't cost you any flour.

That's my two-cents anyway!

Jeff Mapes

Ross FCA "pay once freeloaders" is a philosophical discussion I have had with Jorge de los Reyes and many of us have tried to have with Shahjahan Jewel a few times about missed LTD opportunities, but while I rarely disagree with Jorge on anything, my thought is to do something like I see many other "big boys" do... make the LTD expensive enough (as compared to annual) to try to make LTD make financial sense... the money grab vs ongoing income conundrum for devs and customers. I have taken lots of "inspiration" about how to run a business from WPMN for sure, but also got some inspiration from other licensed software like Bricks Builder to develop my own pricing models. Funny quote I heard: I just needed a one site license, but I guess I'm an agency now, because that multi-site LTD is just too good to pass up 🀣

What is this "services that cost me money to run"? πŸ˜† 🫣