The Postgres backend you own.
Every project gets its own Postgres 17 database, auth, file storage, realtime and backups. Already on Supabase? Change two values in createClient and your app runs on Vulcbase.
Free plan: 2 projects, no card. Host it with us or on your own server.
import { createClient } from "@supabase/supabase-js" -const url = "https://xyzcompany.supabase.co"+const url = "https://xyzcompany.vulcbase.com"-const key = process.env.SUPABASE_ANON_KEY+const key = process.env.VULCBASE_ANON_KEY export const supabase = createClient(url, key)// the rest of your code stays as it is| id | title text | done bool | created_at |
|---|---|---|---|
| 1 | Ship the importer | Nov 3, 09:14 | |
| 2 | Write the migration guide | Nov 4, 16:02 | |
| 3 | Set up nightly backups | Nov 7, 11:40 | |
| 4 | Invite the team | Nov 9, 08:55 | |
| 5 | Turn on RLS for todos | Nov 10, 14:21 |
- Postgres 17 per project
- Compatible with supabase-js
- No third-party APIs
- Data on EU servers
- Self-hostable
The migration, in code
Two values change. Everything else stays.
Your project has a URL and an anon key, just like on Supabase. Put them in createClient. Your tables, policies, auth users and files are already there if you used the importer.
await supabase.auth.signInWithPassword({ email, password }); const { data } = await supabase.from("todos").select("*, tags(name)"); await supabase.storage.from("avatars").upload(path, file); supabase.channel("room").on("postgres_changes", filter, onChange).subscribe();Product
Everything a backend needs, in one project.
A real Postgres database at the center, with the services around it that most apps end up needing.
Database and REST API
Your own Postgres 17 database with extensions and Row Level Security. The REST API is generated from your schema and understands the supabase-js filters, embedded resources and RPC. Connect with psql any time.
const { data } = await supabase .from("orders") .select("id, total, customer:customers(name)") .gte("total", 100) .order("created_at", { ascending: false }) .limit(3); // [{ id: 812, total: 240, customer: { name: "Ana" } }, ...]Realtime
Listen to database changes, with Row Level Security applied so people only receive rows they may read. Broadcast messages and track presence on the same channel.
- INSERTtodosInvite the teamana
- UPDATEtodosSet up nightly backupssam
- BROADCASTroom:42cursor { x: 412, y: 96 }lea
- PRESENCEroom:42joined (3 online)kim
- DELETEcommentsid 8812sam
Auth
Email and password, magic links, email codes, anonymous sign-ins and PKCE. Users live in your project's database.
Storage
Buckets with policies, signed URLs and on-the-fly image resizing. Same storage-js calls.
Backups
Nightly backups. Restore any of them with one click. A safety backup is taken right before.
Cron and webhooks
Schedule SQL with cron expressions. Send a request to your URL on every insert, update or delete.
Dashboard
Table editor, SQL editor, policy editor and API docs generated from your schema.
Logs and usage
Every REST, auth, storage and realtime request is logged. See database size, users and requests per plan.
Importer
Move from Supabase in one click.
Paste your Supabase connection string, choose what to copy, and start. The import runs in the background and shows a live log.
What it copies
- Schema, functions and triggers
- Table data
- Auth users, with their passwords
- Storage buckets and files
- Row Level Security policies
What it does not
- OAuth providers (not supported yet)
- Edge functions
- AI features
42 tables · 1.2M rows
8,431 users, passwords kept
57 RLS policies
3,902 / 5,310 files
Your data, your server
It is just Postgres. Run it where you want.
Use the hosted version, or run the same software on your own server with Docker Compose. No call goes to a third-party API, so it keeps working inside a private network.
Self-hostable
Postgres, the web app and the gateway. Configure it with a handful of environment variables.
Plain Postgres access
Connect with psql, your ORM or a BI tool. Dump it whenever you like.
No external dependencies
No analytics SDKs, no AI service, no hosted auth provider behind the scenes.
No lock-in
Standard SQL, standard storage, standard JWT. Leaving is a pg_dump away.
# connect to your project's databasepsql "postgresql://postgres:<password>@<db-host>:5432/<project>" # take a backup whenever you wantpg_dump "$DATABASE_URL" -Fc -f backup.dump # run the whole stack yourselfdocker compose up -dalter table todos enable row level security; create policy "owners read their todos" on todos for select using (auth.uid() = user_id);Pricing
Start free. Pay when it grows.
Three plans, flat monthly prices. Payment is by bank transfer or cash: contact us and we activate the plan.
Free
For side projects and trying things out.
€0
- 2 projects
- 500 MB database per project
- 1 GB file storage
- 50k monthly active users
- Manual backups only
- Paused after 7 idle days
Pro
For apps with real users.
€15/ month
- 10 projects
- 8 GB database per project
- 100 GB file storage
- 100k monthly active users
- Daily backups kept 7 days
- Never paused for inactivity
Team
For teams running several products.
€49/ month
- 50 projects
- 50 GB database per project
- 500 GB file storage
- 1M monthly active users
- Daily backups kept 30 days
- Never paused for inactivity
All limits are on the pricing page and in the docs.
Make your next backend one you own.
Create a project in a minute, or import your Supabase project and keep your code.