I wanted a hassle-free way for users to deploy Plark—a self-hosted website builder—on any VPS.
Think Dokku’s spirit (originally under 100 lines of Bash) … I want it lightweight, for a single application, and simple for users.
I was inspired by ONCE’s model, where you buy a license, self-host on your own server, and start everything with a single command.
Looking closer, I saw that ONCE protects their images with pull authorization—you buy a license, get a token, and only then can you pull the docker image. My initial plan was to follow that same approach.
But mid-build I asked: Is that the right direction?
Reach Over Control
It’s hard to sell a product without letting people try it firsthand. And with a self-hosted product, I don’t incur per-user infrastructure costs—so why not open it up? I chose a simpler path:
Open installs for everyone.
Gate features behind a license.
This approach keeps things simple and accessible. Of course, someone could try to reverse-engineer and unlock features (violating the terms of use), but with frequent updates and the value of stability, most users would stick with the official builds.
In return, I avoid the complexity of running a private registry and auth stack, and simply push images to Docker Hub. That not only reduces moving parts, but also makes it trivial to distribute Plark on platforms like Railway, Render, Dokploy, and others—anywhere that can pull public Docker images.
The result: less friction, wider distribution, and fewer moving parts..
Paid features can be toggled in-app using a license key which is verified against a lightweight License endpoint—completely decoupled from deployment.
Objective
One-liner install. No prerequisites beyond a fresh VPS.
Single compose file. Defines the services needed for your application.
Pull-and-run updates. A tiny listener that can trigger updates on request.