Build a SaaS backend this weekend
Go from zero to a working backend with auth, data, APIs, and background jobs — without managing infrastructure.
Takes less than 5 minutes to get started.
Start your backend
One command — your backend is running.
npx @centrali-io/create-centrali-app --template saas
You already have a working backend — no setup, no configuration.
Includes a starter schema and ready-to-use API.
Create your first record
Your backend is live — let's prove it.
await centrali.createRecord('users', {name: 'Jane',email: 'jane@example.com'})
That's a real record — stored and ready to query.
No schema migrations. No database setup.
The starter template already includes this collection — you can customize it anytime.
Define your data
The starter template gives you a working schema — now make it yours.
await centrali.collections.create({name: 'Projects',recordSlug: 'projects',schemaDiscoveryMode: 'strict',properties: [{ name: 'title', type: 'string', required: true },{ name: 'status', type: 'string', enum: ['active', 'completed'] },{ name: 'owner', type: 'reference', target: 'users',relationship: 'many-to-one' }]})
APIs, search, and validation — generated automatically.
Choose how your schema evolves:
- strict — enforce structure and validation
- schemaless — store anything, no setup
- auto-evolving — your schema grows as your data changes
Start flexible — tighten when you're ready.
Add auth
Centrali works with any auth provider. Here's a quick example using Clerk.
import { CentraliSDK } from '@centrali-io/centrali-sdk'import { useAuth } from '@clerk/react'const { getToken } = useAuth()const centrali = new CentraliSDK({baseUrl: 'https://centrali.io',workspaceId: 'my-workspace',getToken: () => getToken()})// Your requests are now authenticatedawait centrali.queryRecords('users')
Your auth provider handles identity — Centrali handles access. No auth logic to build.
Works with Clerk, Auth0, Okta, Keycloak, Supabase, Firebase Auth, or any JWT provider.
Add background jobs
Run code when things happen — no infrastructure to manage.
// Create a functionconst fn = await centrali.functions.create({name: 'Send Welcome Email',code: `async function run() {const user = triggerParams.record// send email (your logic here)api.log('Sending welcome email to:', user.email)return { sent: true }}`})// Trigger it when a user is createdawait centrali.triggers.create({name: 'On User Created',functionId: fn.data.id,executionType: 'event-driven',triggerMetadata: {eventType: 'record_created',recordSlug: 'users'}})
Every new user now triggers your code — emails, workflows, anything. No Lambda, no queues, no deploy.
Works with any service — Resend, SendGrid, Stripe, or your own APIs.
Deploy
You're done. Connect your app and ship it.
vercel deploy
Your app is live — powered by a backend that's already running.
No backend deployment required.
Start your backend in minutes
No credit card. No setup. Just run the CLI and start building.
npx @centrali-io/create-centrali-app --template saas
Takes less than 5 minutes to get started.