Why your licenses should live in your own Cloudflare account

We sell our apps outside the app stores with a licensing system that lives in our own account. Here's why, what we've built and what we don't know yet.

At Color Vivo we make desktop apps for Windows and Mac. The Microsoft and Apple stores do everything for you in exchange for their cut and their rules, but we also wanted to sell from our own website. That’s where the usual question comes up: who handles the payments, and where do the licenses live?

This post covers what we decided, what we built and why we think it could help other makers. It also covers what we still don’t know, which is quite a bit.

The problem: your customers live in someone else’s house

The easy option is a merchant of record: Paddle, Lemon Squeezy, Gumroad and friends. You create the product, paste a link and start selling. They handle sales tax and VAT in every country, the invoices and, often, the license keys.

It works, and for a lot of people it’s the sensible choice. But it has a cost that doesn’t show up in the fee table. Your customer list, their keys and your payment history stay in the provider’s account. If one day they raise prices, change their terms or close your account, you don’t just lose a way to get paid: you lose the place where your customers live.

This isn’t hypothetical. DevMate, a licensing platform widely used by Mac apps, shut down in 2019, and everyone who depended on it had to move their licenses in a hurry. And Paddle’s Mac SDK only exists on Paddle Classic, which no longer takes new sign-ups.

If we disappear tomorrow, your customers shouldn’t notice. That’s the rule we set ourselves.

What we built for ourselves

We built our own licensing system around one simple idea: everything that’s ours stays in our accounts.

  • The licensing server is a Cloudflare Worker with its D1 database, in our Cloudflare account.
  • Payments go to our Stripe account. We use Managed Payments, so Stripe acts as merchant of record and handles VAT, but the account and the customers are ours.
  • Licenses are signed with Ed25519 keys that only exist in our Worker. The apps ship with the public key and check the license offline: they never wait for the network to start.
  • There’s a portal where customers see their licenses and free up devices, emails from our own domain and an admin for support.

Our desktop apps use this system. It took a lot more work than pasting a Paddle link, and keeping it running takes work too. In return, if we ever want to change payment providers, or anything else, our customers and their licenses stay right where they are.

The idea: the same system, in your account

While building it, we realized the problem isn’t just ours. Plenty of small makers sell software that unlocks with a key (apps, plugins, games, command-line tools) and have to choose between the convenience of a middleman and the work of building their own thing.

OwnLicense is the idea of offering a middle ground:

  • Your Worker in your Cloudflare. You install the licensing system in your account. Your customers, their emails, their devices and your keys never leave it.
  • Your Stripe. You get paid in your own account, with Managed Payments or regular Checkout. We take no commission on your sales: 0%.
  • A central service for what a Worker can’t do well alone. Stats with no personal data, alerts when something breaks, signed updates, the installer and the SDKs. That service would only ever receive counts and a signed heartbeat, never your customers’ data.

And if you stop paying or we disappear, your Worker keeps selling, activating and renewing. No kill switches.

What we don’t know yet

Time to be honest. This is a closed MVP: nobody can use it or sign up for it yet. The licensing system works for our apps, but it has to be made generic for other makers, and the installer, the central service and the SDKs are still to be built.

We also don’t know yet how we’ll charge for it. We don’t know whether the central service will be 100% free or have a small paid option to cover what it costs to run. What we’re sure about is what won’t change: what runs in your Worker is yours, with no artificial limits, and there won’t be a commission from us on your sales.

We’re not going to promise dates either. It mostly depends on how many people have the same problem we did.

How you can help us decide

That’s why we’ve opened a waitlist. When you join, we ask what you sell, on which platforms, in which language and whether you already use Stripe. Those answers will tell us whether it’s worth it, what to build first (which SDK, for example) and how to price the central service.

If you join, we’ll let you know when we open a closed beta, free in exchange for your feedback. And if you’d rather tell us about your case in detail, write to us: we answer ourselves.

In the meantime, you can read how it works, our model or the comparison with other options, where we also say where we have no edge.

  • #Licensing
  • #Cloudflare
  • #Stripe

← All posts · RSS feed

Want it in your own account?

Join the waitlist and we'll let you know when the beta opens. Nobody can use it yet.