StitchDB vs PocketBase: Managed Postgres or One Go Binary?
PocketBase and StitchDB solve the same problem (a backend with auth, data, files and realtime) from opposite ends. PocketBase is one MIT-licensed Go binary with embedded SQLite that you run on your own server; it is free, tiny and fast, and you operate it. StitchDB is a managed platform with a dedicated Postgres database per project and backups, branching, functions and app services handled for you; it costs a monthly plan after the free tier and you can't self-host it. For a small app on one server, PocketBase is hard to beat. For a team that wants Postgres and no server to look after, StitchDB is the better fit.
#Quick comparison
| PocketBase | StitchDB | |
|---|---|---|
| What you get | One binary: SQLite, auth, files, realtime, admin UI | Managed project: Postgres, Auth, REST, GraphQL, Realtime, Storage, Edge Functions, Studio |
| Database | Embedded SQLite (WAL mode), no other databases planned | Postgres, one database per project, 50+ extensions |
| Hosting | Self-hosted only | Managed only, EU data centers |
| Scaling | Single server, vertical | Plans, read replicas, dedicated servers on higher plans |
| Access rules | Collection API rules | Postgres row level security |
| Extending | Go or JavaScript hooks | Deno Edge Functions, SQL functions, triggers, cron, queues |
| Backups | Built-in ZIP backups of pb_data, local or S3 | Point-in-time recovery: 24 h (Free) to 30 days (Enterprise) |
| License | MIT, pre-1.0 | Proprietary |
| Cost | Your server | Free $0, Pro $15.99/mo, Scale $49/mo (as of November 2026) |
#Who does the operations?
This is the real difference. With PocketBase, the binary is simple, but you still own everything around it:
| Task | PocketBase | StitchDB |
|---|---|---|
| Server, OS updates, firewall | You | Handled |
| TLS certificates | You | Handled |
| Backups and restore tests | You configure and test | Point-in-time recovery included |
| Upgrades | You, reading release notes (pre-1.0, no full backward compatibility guarantee) | Handled |
| Auth e-mail delivery | Your SMTP settings | Included, custom SMTP optional |
| Monitoring and alerts | You | Advisors, reports, logs, status page |
| Preview environments | Copy data folders by hand | Preview branches on paid plans |
If you enjoy running a VPS and your app is small, the left column is not much work. PocketBase's FAQ says even an inexpensive VPS can hold 10,000+ persistent realtime connections. If nobody on the team wants to be paged at night, the right column is what you are paying for.
#Access rules: API rules vs RLS
PocketBase guards each collection with API rules, filter expressions such as owner = @request.auth.id. StitchDB uses Postgres policies, which work the same way in principle and run inside the database:
alter table public.posts enable row level security;
-- list/view rule
create policy "owners read" on public.posts
for select to authenticated using (owner_id = auth.uid());
-- create rule
create policy "owners create" on public.posts
for insert to authenticated with check (owner_id = auth.uid());A policy also applies to Realtime subscriptions, GraphQL and files in buckets. One thing to remember on StitchDB: tables created with SQL start with RLS off and are readable with the anon key until you enable it; tables made in the Studio table editor have it on by default. See row level security.
#Extending: hooks vs functions
PocketBase can be used as a Go framework, or extended with JavaScript hooks. That is very flexible: your logic ships with the backend in one deploy.
On StitchDB, logic goes in one of three places:
- In the database: triggers, SQL functions callable with
rpc(), cron withpg_cron, and queues withpgmq. - In Edge Functions: TypeScript on Deno for webhooks, payments, e-mail and AI calls.
- In webhooks: database changes sent to your own endpoint, signed and retried.
A PocketBase "on record create, send an e-mail" hook becomes a database webhook to an Edge Function, or pg_net from a trigger (with the service role key kept in Vault):
create function public.notify_new_order() returns trigger
language plpgsql security definer as $$
begin
perform net.http_post(
url := 'https://<project-ref>.p.stitchdb.com/functions/v1/order-email',
headers := jsonb_build_object(
'Authorization', 'Bearer ' || (select decrypted_secret from vault.decrypted_secrets where name = 'service_role_key'),
'Content-Type', 'application/json'),
body := jsonb_build_object('order_id', new.id)
);
return new;
end $$;
create trigger on_order_created after insert on public.orders
for each row execute function public.notify_new_order();#Local development
PocketBase's local story is great: run the binary. StitchDB's is close: stitchdb start runs Postgres 17, Auth, REST, Realtime, Storage, Edge Functions, a local Studio and a mail catcher as plain processes on your machine, with no Docker. The first start downloads about 40 MB; later starts take about a second. See local development.
#Data and portability
Both are portable. PocketBase data is a folder you can copy. A StitchDB project exports as one archive on every plan with a pg_dump, auth users with bcrypt hashes, files and function source, restorable into any Postgres 15+ (see export). Postgres also means any BI tool, ORM or psql can connect directly over TLS.
#Cost
PocketBase costs whatever your server costs. StitchDB's Free plan is $0 with 2 projects, a 500 MB database per project, 1 GB of files, 25 GB egress and 50,000 monthly active users; Free projects are not paused while you use your account, though their Auth and REST services sleep after 60 minutes idle and wake in a few seconds. Pro is $15.99/month with a 10 GB database, 100 GB files, 1 TB egress and 100,000 MAU, and Scale is $49/month (as of November 2026). Paid plans start with a spend cap on. See pricing.
So in raw hosting cost, PocketBase wins. The comparison that matters is your time on operations against a plan price.
#Realtime, auth and files side by side
| PocketBase | StitchDB | |
|---|---|---|
| Realtime | Subscriptions to record changes | Postgres changes, broadcast, presence, missed-message history |
| Sign-in | E-mail and password, OAuth2 providers | Passwords, magic links and codes, OAuth, phone, passkeys, anonymous, Web3, SAML SSO, MFA |
| Files | Local disk or S3 | Buckets with policies, signed URLs, image resizing, S3-compatible endpoint |
| Admin UI | Built-in dashboard | Studio: tables, SQL editor, users, files, policies, advisors |
| SDKs | JavaScript and Dart | JavaScript, Flutter/Dart, Swift, Kotlin, C#, Python |
PocketBase covers the core of what most apps need with very little setup. StitchDB's list is longer mostly because it targets teams that would otherwise add separate vendors for SSO, push or image processing.
#Where each one wins
PocketBase wins when:
- The app is small or internal, and one server is enough.
- You want to self-host, or data must stay on hardware you control outside the EU.
- You like writing backend logic in Go inside the same binary.
- You want the cheapest possible monthly bill.
StitchDB wins when:
- You want Postgres: joins, constraints, extensions like pgvector and PostGIS, and direct SQL access.
- You need point-in-time recovery, read replicas, branching or a team workflow.
- You want app services built in: push notifications, in-app purchase checks, feature flags, crash reporting, analytics.
- Nobody on the team wants to run servers.
Thinking of moving? PocketBase alternatives includes a step-by-step move from SQLite to Postgres.
#FAQ
#Is PocketBase faster than StitchDB?
For a single-server app, an embedded SQLite database in the same process has very low latency. A managed Postgres adds a network hop. For most apps both are fast enough; the bigger factor is distance to your users.
#Can PocketBase use Postgres?
No. Its FAQ says it uses embedded SQLite and there are no plans to support other databases.
#Can I self-host StitchDB?
No. It is managed only, with regions in Germany and Finland. You can run it locally for development.
#Is PocketBase production-ready?
Many apps run it in production. Its README says full backward compatibility is not guaranteed before v1.0, so pin versions and test upgrades.
Want PocketBase-style simplicity without running a server? Create a free StitchDB project.