Get your first API running in minutes

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.

1

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.

2

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.

3

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:

  • strictenforce structure and validation
  • schemalessstore anything, no setup
  • auto-evolvingyour schema grows as your data changes

Start flexible — tighten when you're ready.

4

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 authenticated
await 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.

5

Add background jobs

Run code when things happen — no infrastructure to manage.

// Create a function
const 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 created
await 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.

6

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.