Skip to main content
Every fullstack app comes with a managed Postgres database. These commands reach it without a connection string. API detail: Database. Every command takes an optional --app <id-or-name>. Omit it when the organization has one fullstack app — that app is resolved for you. With several, the command fails with ambiguous_app and lists the candidates; name one. With none, not_found: make one with vetta app create <name> --type fullstack. query and migrate require the agents:write scope; tables and migrations require agents:read.

Commands

query

tables

migrate

A migration is applied once per name: re-running the command with the same file is a no-op that prints the existing ledger row, and re-running it with a changed file under the same name fails with version_conflict — write a new file instead. Names are lowercase letters, digits, _ and -. For an app a project declares, put the files in the declaration instead — apps[].migrations in naive.config applies them on every naive up.

migrations