Skip to main content
jelou databases provisions and operates Jelou’s managed databases. The jelou datum alias works everywhere jelou databases works: same subcommands, same flags, same exit codes.
There are two products named “Datum”. The jelou datum alias points to the current Jelou Databases product (the one this CLI manages). There’s a separate legacy database product, accessible only from the Studio, that this CLI cannot manage.

Databases

databases delete is irreversible: every collection, record, and file disappears, with no trash bin and no rollback. Run databases show first and confirm the count with the user.

Collections

collections create accepts --field "<name>:<type>" (repeatable, defines columns) and --type base|view (collection type; defaults to base).
collections create is get-or-create: if a collection with that name and the same schema already exists, it’s reused and the response reports reused: true instead of failing. If one exists with that name but a different schema, the operation is rejected with exit code 2 and a field-by-field diff — it never mutates it silently.

API keys

Each key is created with granular abilities, combinable with commas: records:read, records:write, records:delete, files:read, files:write. Common presets: read_only, read_write, all.
Retrying api-keys create with a name that already exists doesn’t mint a second key: it fails with exit code 2 and ALREADY_EXISTS, including details.never_used so you know whether the existing key was ever used — that tells you whether rotating it with api-keys regenerate is safe.
files:write requires records:write (files live inside records) — the CLI rejects the combination locally. Tokens carry the prefix db_ and are shown only once when created: save them right away. api-keys regenerate rotates the token immediately; any service with the old token will get a 401 on its next request. That’s why it prompts for confirmation before running; in CI or under --agent you must pass --yes explicitly.

Triggers

Webhooks that fire on a collection’s events (create, update, delete). triggers create/update also accept --method "<verb>" (HTTP verb, defaults to POST) and, for update events, --update-scope fields --columns "<col1,col2>" to fire only when those columns change (the default scope is all).
triggers pause causes silent data loss: the destination stops receiving events without any error reported upstream. Always mention resume as the recovery path.