Features

Everything in the binary

This is the exhaustive list. For the shape of the product, see the homepage. This page exists for the "does it do X" question, grouped so you can scan it in one pass.

Collections & data

A collection is a real SQL table, and the query surface over it is a filter language compiled straight into the query plan — not an ORM layer in front of one.

Dynamic collections

Define fields through the API/dashboard; Cratebase creates and migrates the real SQL table for you.

POST /api/collections

Field types

Text, number, bool, email, url, date, select, JSON, relation, file, password, geoPoint, and more.

API rules

A small filter-expression language (owner = @request.auth.id) for list/view/create/update/delete access, enforced in SQL.

listRule, viewRule, ...

Filter syntax

The same expression language powers rules, ?filter=, and RPC WHERE clauses — learn it once.

Full-text search

?search= on any collection — SQLite FTS5 or Postgres tsvector + GIN, kept in sync automatically as fields change.

?search=espresso

Custom SQL RPC

A named, parameterized, rule-gated SQL endpoint for the GROUP BY, window function, or PostGIS query a filter can't express.

cb.rpc(name, params)

Geo & nearest queries

geoDistance(...) radius filters and nearest-first sorts, GiST-indexed automatically once PostGIS is installed.

sort=geoDistance(...)

Database extensions

Enable Postgres extensions — PostGIS, pgvector, pg_trgm — from the dashboard, one API call away.

GET/POST/DELETE /api/db/extensions

Batch API

Several record create/update/upsert/delete calls in one HTTP round trip and one SQL transaction — all commit or none do.

POST /api/batch

Records API

List, filter, sort, expand relations, and paginate any collection over a consistent REST shape.

Schema as code

Pull the live schema to a checked-in JSON file, push it back with a dry-run plan that flags destructive changes.

cratebase schema pull / push

Typegen, built in

One TypeScript type per collection, generated by the binary itself — CLI, REST endpoint, or a --dev watch.

cratebase typegen

Auth & security

Any collection can be type: "auth" and gets a full session model for free — registration is just creating a record.

Password auth

auth-with-password and auth-refresh, with email verification and password reset built in.

Email OTP

Passwordless sign-in with a one-time code — always answers 200, even for an unknown address, so it can't enumerate accounts.

Magic link

A single-use sign-in link instead of a password or a typed-back code.

TOTP 2FA

RFC 6238 authenticator-app 2FA with backup codes, layered onto any first factor.

OAuth2 presets

Google, Apple, GitHub, Microsoft, Discord, GitLab, Facebook, X, LinkedIn, Slack, Twitch, Spotify — built in.

Generic OIDC

Point Cratebase at any OpenID Connect issuer that isn't one of the built-in presets.

MFA

A challenge-based second-factor gate shared by TOTP and any other MFA method a collection enables.

Sessions

JWT-based sessions with refresh, independent of which first factor was used to sign in.

Cookie sessions (SSR)

The official SDK's standard SSR pattern — a fresh client per request, auth hydrated from a cookie — works unmodified.

Linked accounts

Manage multiple OAuth providers linked to the same record.

Superuser impersonation

A superuser can mint a session as another user for support/debugging, audited.

New-location login alerts

_authOrigins tracks known sign-in origins and emails on a new one.

Bans

Suspend an auth record without deleting it.

API keys

Dashboard-minted keys as ordinary identities — for agents, CI, and services.

Settings → API keys

Teams

_teams / _team_members for scoping an app collection to a workspace via rules.

_team_members

Superusers & roles

The _superusers collection and how superuser-only endpoints are gated.

Email platform

An editable _emailTemplates collection with a real visual editor — not an HTML textarea — and a send API a frontend can call directly.

Files & storage

Local disk by default; switch to any S3-compatible bucket with three environment variables.

Realtime

Subscribe to a collection or a single record over SSE; get events as they happen, filtered server-side by the same rules as everything else.

Automation & extending

Drop a *.pb.js file next to your data directory and get PocketBase's own hook API, plus cron, queue, and webhooks.

AI

Vector search, an LLM chat gateway, and auto-embedding, backed by the same collections and API rules as everything else — not a bolt-on.

Dashboard & operations

Embedded at compile time — cratebase serve is the whole deployment, and every setting is configurable from it.

Deploy & portability

SQLite by default; Postgres when you need it. Same API, same filter syntax, same rules, either way.

Didn't find it?

The docs cover more than fits a feature grid — or ask in an issue on GitHub.