Docs Services Sign In
Concepts

Core concepts

A Benmore app is defined by a few plain files. You describe the data; the platform generates the API, enforces access, and serves the frontend.

The schema is the source of truth

You define your tables in a schema. Each model becomes a table with a REST endpoint and full CRUD — list, create, read, update, delete, plus pagination, filtering, and batch operations — without writing any backend code.

schema.prisma
model Contact {
  id        Int      @id @default(autoincrement())
  name      String
  email     String
  createdAt DateTime @default(now())
}

That model gives you /api/contacts immediately. When you change the schema, the platform reconciles your live database for you.

Access is scoped by default

Records are owned by the user who creates them and are only visible to that user unless you say otherwise. You can declare per-table access rules (public read, role-gated writes, multi-tenant org scoping) — the API enforces them on every request.

A frontend, served for you

Apps ship a frontend (TypeScript/TSX) with a small typed SDK for talking to your API, auth, and real-time updates. Static assets are compiled and served automatically — no build step to run.

Logic when you need it

Beyond CRUD, you can add custom API routes, run logic before or after a record changes, schedule jobs, send email or webhooks, and broadcast real-time events — declaratively, alongside your schema.