Free tiers on hosting platforms usually share the same pattern: fine for a demo, but the moment you actually try to use one you hit a wall. This post isn't just talk — I built a small real project using nothing but PocketBase Cloud's free plan, start to finish, to see how far it actually goes.
What's in the free plan
PocketBase Cloud's free plan includes:
- 1 PocketBase instance (50MB disk limit)
- 5 frontend deployments (no custom domains on free — that starts at the Starter plan)
- Runs on a dedicated server cluster reserved for free plan users
One thing people often ask: why does a free plan still need a Stripe card? It's a $0 subscription used purely for verification and abuse prevention (stopping people from spamming hundreds of instances) — you're never actually charged.
No rate limits like PocketHost enforces, and no hibernation — the free instance runs 24/7 with no cold starts. That's the biggest difference from most other free tiers out there, which tend to hibernate idle instances to cut costs.
Demo project: a mini link shortener
To test this properly, I built a small link shortener — a mini bit.ly — using only:
- 1 PocketBase instance (free) for the database + API + auth for the admin page
- 1 frontend (free) — a simple React app, deployed as a static site
Schema
A links collection:
-
slug(text, unique) -
target_url(url) -
clicks(number, default 0) -
owner(relation to users, optional)
Create rule: @request.auth.id != "" — only logged-in users can create links. List/view rules are left public, since a link shortener needs to redirect for anyone, logged in or not.
Redirect logic via a hook
This is where hooks (PocketBase's embedded JS VM) earn their keep — no separate backend needed:
routerAdd("GET", "/r/{slug}", (e) => {
const slug = e.request.pathValue("slug")
const record = e.app.findFirstRecordByFilter("links", `slug = "${slug}"`)
if (!record) {
return e.notFoundError("Link not found")
}
record.set("clicks", record.get("clicks") + 1)
e.app.save(record)
return e.redirect(302, record.get("target_url"))
})
This route runs right inside the instance — no extra backend service to deploy. Backend hosting (Node/Deno/Bun) is Pro-plan-only anyway, so hooks are exactly how you get custom logic on the free plan without paying for anything extra.
Frontend
A small React page: a form to create links, a list showing click counts. No custom domain (not available on free), so it runs on the default subdomain you get assigned.
Where you actually hit the limits
After building it and stress-testing with some sample data:
- 50MB disk: with a schema that's mostly text/number fields, you can fit tens of thousands of records before hitting the ceiling — plenty for a demo, an MVP, or a genuinely small personal project. If you're storing files (images, video), 50MB disappears fast, and the free plan won't be enough for anything file-heavy.
- 1 instance: if you need separate staging/production databases, or a multi-tenant setup with one instance per client, the free plan won't cut it — that's when it's time to look at the Starter plan.
- No custom domain: fine for an internal MVP or a demo you send to a client, but a real product launching publicly will almost certainly need its own domain.
Who this free tier actually makes sense for
The free plan isn't meant for serious production traffic — that's true of pretty much every free tier out there. But unlike many free tiers that hibernate instances or throttle requests to the point of being barely usable, here you get:
- A genuinely running instance, 24/7, no cold starts, so you can evaluate the real experience before paying anything
- Enough to demo to a client, run a personal side project, or just learn PocketBase without spinning up your own VPS
If you're on the fence about trying PocketBase Cloud, the free plan is the cheapest way to find out for yourself — no real charge on your card, and building something small like this takes about 15–20 minutes to know whether it fits what you need.
Try it at pocketbasecloud.com.
Have you built anything on a hosting platform's free tier before — did it actually hold up, or was it just a demo before the upgrade prompt?

Top comments (0)