Now in Private Beta

You define your backend. We compile it, instantly.

Define your schemas, security rules, and business logic in TypeScript. Quickback generates a production-ready backend you actually own.

Works with

Supabase Supabase
Cloudflare Cloudflare
Neon Neon
Why Quickback

Security, on by default.

Everything is locked down by default. You declare what's allowed.

Firewall

Every table needs a scope column. Tenant isolation enforced at the database level.

Access

Role-based permissions. Deny by default. Compiled into middleware.

Guards

Field-level protection. Only permitted fields can be written.

Masking

PII redaction in responses. Sensitive data never leaks.

Schema in. Code out. That's it.

We never connect to your database. We never see your data. We operate at the schema level.

SEE IT IN ACTION

Define once. Compile a full API or Supabase RLS policies.

quickback/features/candidates/candidates.ts
export default defineTable(candidates, {
  firewall: { organization: {}  },
  guards: {
    createable: ["name", "email", "phone", "resumeUrl", "source"],
    updatable: ["name", "phone", "resumeUrl", "source"],
  },
  masking: {
    email: { roles: ["recruiter", "hiring-manager"] },
    phone: { roles: ["recruiter"] },
  },
  crud: {
    list:   { access: { roles: ["recruiter", "hiring-manager"] } },
    create: { access: { roles: ["recruiter"] } },
    update: { access: { roles: ["recruiter", "hiring-manager"] } },
    delete: { access: { roles: ["owner"] } },
  },
});
compiled output
-- Generated by Quickback Compiler
CREATE POLICY "candidates_org_isolation" ON "candidates"
  FOR ALL USING (
    organization_id = auth.jwt() ->> 'org_id'
  );

CREATE POLICY "candidates_recruiter_select" ON "candidates"
  FOR SELECT USING (
    auth.jwt() ->> 'role' IN ('recruiter', 'hiring-manager')
  );

CREATE POLICY "candidates_owner_delete" ON "candidates"
  FOR DELETE USING (
    auth.jwt() ->> 'role' = 'owner'
  );

Try it now

npx @kardoe/quickback create cloudflare my-app

AI help is at the ready.

Install the CLI to access everything you need to define your backend.

Compiler CLI

Scaffold, compile, and deploy from the command line. Templates for every stack.

MCP Server

Connect any AI tool to the Quickback compiler. Schema-aware context for every prompt.

Claude Code Skills

AI-assisted backend development. Describe your feature, get a compiled API with security built in.

FAQ

Questions you're already asking

What happens when I need custom logic beyond CRUD?

That's what Actions are for. Define typed business operations - approve an invoice, stream an AI response, process a webhook - with the same security guarantees as your CRUD endpoints. Actions have full access to the database, user context, and any external service. There's no ceiling: if you can write it in TypeScript, you can ship it as an action.

What happens when I recompile? Do I lose my changes?

Recompiling overwrites the generated API code — and that's the point. Your definitions and actions are your source of truth. The generated src/ folder is output, like a build artifact. Change your definitions, recompile, and your entire API updates. Action handler files live in your project and are never overwritten — the compiler wraps them with authentication, access checks, and validation automatically.

How is this different from Supabase?

Quickback isn't competing with Supabase - the Compiler works with it, generating RLS from your definitions so you never write policies by hand. But if you want to own the whole stack, Quickback Stack gives you a complete Supabase-equivalent backend on your own Cloudflare account, and the Account UI gives you a ready-made auth frontend. Same definitions power all three.

Do I need Postgres? What databases are supported?

Quickback supports Cloudflare D1 (SQLite at the edge), Supabase Postgres (cloud or self-hosted), and Neon Postgres (serverless). The same definitions compile to different database targets - choose the one that fits your stack.

Am I locked into Quickback?

No. The output is standard TypeScript - Hono routes, Drizzle ORM, Better Auth. If you stop using Quickback tomorrow, you still have a working codebase built on well-known libraries. There's nothing proprietary in the generated code.

What if different roles need different fields?

Views are named field projections with role-based access control — column-level security. Define which fields each role can see, and the compiler generates a dedicated endpoint at /api/v1/{resource}/views/{viewName}. Views inherit all your security pillars — firewall, access, and masking — so a masked field stays masked even inside a view. Same pagination, filtering, and sorting as your list endpoint, just scoped to the fields you choose.

What is the Account UI?

A production-ready React SPA that plugs directly into your Quickback Stack or any Better Auth backend. Login, signup, passkeys, magic links, email OTP, organization management, role assignments, team creation, invitations, and an admin panel — out of the box. Deploy it as a Cloudflare Worker on your own subdomain. Fully customizable through environment variables.

How do Actions work across recompiles?

Actions are defined in your Quickback schema and the routes are regenerated on every compile — that's how they stay in sync with your security config. But your handler files are yours. They live in your project, the compiler never touches them. It just wraps them with authentication, access checks, input validation, and org scoping automatically. Write the business logic, Quickback handles the rest.

Private Beta Open

Join the Beta

We're onboarding early adopters now. Get hands-on access, direct support, and help shape the future of backend development.

Read the Docs