@butterbase/cli
Command-line tool for Butterbase project scaffolding and backend management.
Installation
npm install -g @butterbase/cli
Quick Start
butterbase login
butterbase apps create my-app
butterbase apps use app_abc123
butterbase schema get --output schema.json
butterbase schema apply schema.json
butterbase functions deploy ./functions/hello.ts
butterbase storage upload ./image.png
Commands
Authentication
butterbase login
butterbase logout
Configuration
butterbase config get
butterbase config set endpoint https://api.butterbase.ai
butterbase config set apiKey bb_key_...
Configuration is stored in ~/.butterbase/config.json.
Apps
butterbase apps list
butterbase apps create my-app
butterbase apps use app_abc123
butterbase apps delete app_abc123
Schema
butterbase schema get
butterbase schema get --output schema.json
butterbase schema apply schema.json --dry-run
butterbase schema apply schema.json
butterbase schema apply schema.json --name "add_users_table"
butterbase schema get --app app_abc123
Functions
butterbase functions list
butterbase functions deploy ./functions/hello.ts
butterbase functions deploy ./functions/hello.ts --name my-function
butterbase functions deploy ./functions/hello.ts --description "Hello world function"
butterbase functions deploy ./functions/cleanup.ts --trigger cron
butterbase functions logs my-function
butterbase functions logs my-function --level error
butterbase functions logs my-function --limit 50
Storage
butterbase storage list
butterbase storage upload ./image.png
butterbase storage delete obj_abc123
AI
butterbase ai chat "Summarize this" --model openai/gpt-4o-mini
butterbase ai chat "Explain RAG" --system "You're a concise teacher." --temperature 0.2
butterbase ai embed "hello world" "another doc"
butterbase ai models
butterbase ai config get
butterbase ai config set --default-model openai/gpt-4o-mini --max-tokens-per-request 4000
butterbase ai config set --byok-key sk-or-...
butterbase ai usage --start-date 2026-05-01 --end-date 2026-05-31
OAuth (admin)
butterbase oauth configure google \
--client-id ... --client-secret ... \
--redirect-uri https://app.example/cb \
--scope openid --scope email
butterbase oauth list
butterbase oauth get google
butterbase oauth update google --enabled false
butterbase oauth delete google
Audit logs
butterbase audit query --category auth --event-type login --limit 50
butterbase audit query --from 2026-05-01 --to 2026-05-31 --action create --resource-type user
butterbase audit query --actor-id user_123 --json
App config (server-side)
butterbase apps config get
butterbase apps config cors --allowed-origin https://app.example --allow-credentials true
butterbase apps config jwt --access-token-ttl 15m --refresh-token-ttl-days 30
butterbase apps config storage --public-read true --max-file-size-mb 25 --allowed-content-type image/png --allowed-content-type image/jpeg
butterbase apps config access-mode authenticated
butterbase apps config secure --table posts --table comments --user-column author_id --access-mode authenticated
Regions + multi-region moves
butterbase regions list
butterbase apps move app_abc us-west-2 --follow
butterbase apps migrations active
butterbase apps migrations status app_abc m_xyz
butterbase apps migrations abort app_abc m_xyz
butterbase apps migrations reverse app_abc m_xyz
butterbase apps replicas list
butterbase apps replicas teardown m_xyz
App-level billing (Stripe Connect)
butterbase app-billing plans list
butterbase app-billing plans create --name pro --price-cents 1999 --interval month
butterbase app-billing plans update plan_abc --price-cents 2499
butterbase app-billing products list
butterbase app-billing products create --name "Lifetime access" --price-cents 9900
butterbase app-billing subscribe plan_abc
butterbase app-billing subscription
butterbase app-billing cancel
butterbase app-billing purchase prod_xyz
butterbase app-billing orders list
butterbase app-billing orders get order_abc
Scoped API keys + integrations
butterbase keys generate ci-key --scope schema:read --scope functions:invoke
butterbase integrations configure github --scope repo --scope read:user
butterbase integrations connect github --redirect-url https://app.example/cb --scope repo
Functions deploy (full options)
butterbase functions deploy fn.ts \
--name my-fn \
--trigger cron --trigger-config '{"schedule":"*/5 * * * *"}' \
--env API_KEY=sk_... --env DEBUG=true \
--timeout-ms 9000 --memory-mb 256
RLS
butterbase rls create --table posts --policy-name posts_own \
--command SELECT --using "author_id = auth.uid()" \
--role user --restrictive
butterbase rls delete posts
butterbase rls delete posts --policy posts_own
Global Options
Most commands support the --app flag to specify an app ID:
butterbase schema get --app app_abc123
butterbase functions list --app app_abc123
butterbase storage list --app app_abc123
If --app is not provided, the CLI uses the current app set with butterbase apps use.
Configuration
The CLI stores configuration in two places:
Project config takes precedence over global config.
Environment Variables
You can also configure the CLI using environment variables:
BUTTERBASE_API_KEY - API key
BUTTERBASE_ENDPOINT - API endpoint URL
Examples
Complete Workflow
butterbase login
butterbase apps create my-grocery-app
butterbase apps use app_abc123
cat > schema.json <<EOF
{
"tables": {
"grocery_items": {
"columns": {
"id": { "type": "uuid", "primaryKey": true, "default": "gen_random_uuid()" },
"name": { "type": "text" },
"quantity": { "type": "integer", "default": "1" },
"purchased": { "type": "boolean", "default": "false" },
"user_id": { "type": "uuid" },
"created_at": { "type": "timestamptz", "default": "now()" }
}
}
}
}
EOF
butterbase schema apply schema.json
butterbase functions deploy ./functions/add-item.ts
butterbase storage upload ./logo.png
Working with Multiple Apps
butterbase apps create my-app-prod
butterbase apps create my-app-staging
butterbase functions deploy ./functions/api.ts --app app_prod123
butterbase functions deploy ./functions/api.ts --app app_staging456
butterbase apps use app_prod123
butterbase apps use app_staging456
Development
npm install
npm run build
node dist/bin/butterbase.js --help
Integrations
butterbase integrations list --app app_abc123
butterbase integrations list --search salesforce --app app_abc123
butterbase integrations config --app app_abc123
butterbase integrations configure gmail --app app_abc123
butterbase integrations disable gmail --app app_abc123
butterbase integrations connect gmail --redirect-url https://yourapp.com/settings --app app_abc123
butterbase integrations connections --app app_abc123
butterbase integrations disconnect <connection-id> --app app_abc123
butterbase integrations tools gmail --app app_abc123
butterbase integrations execute GMAIL_SEND_EMAIL --data '{"to":"x@y.com","subject":"Hi","body":"Hello"}' --app app_abc123
Error output
The CLI throws typed ButterbaseErrors from @butterbase/sdk. The top-level
handler renders the class name, message, and the structured fields the backend
returned (code, status, remediation). Example for an unauthenticated call:
AuthError: Invalid API key
code: AUTH_INVALID_API_KEY
status: 401
remediation: Rotate the key with `butterbase keys generate` and update ~/.butterbase/config.json.
The error codes come from @butterbase/shared's ErrorCodes namespace — see
the SDK README for the full list.
License
MIT