Supabase CLI
Overview
This skill provides complete guidance for using Supabase CLI across all development workflows. It covers database initialization, migration management, type generation, API key retrieval, direct database access, and deployment strategies.
Use this skill when:
- Setting up new Supabase projects
- Managing database migrations
- Generating TypeScript types from database schema
- Retrieving API keys and connection details
- Executing SQL queries directly
- Troubleshooting local development issues
- Deploying schema changes to production
Quick Start
Initial Project Setup
Initialize a new Supabase project:
supabase initStart local development stack:
supabase startGet connection details and API keys:
supabase statusLink to remote project:
supabase link --project-ref PROJECT_REFDatabase Initialization
Creating New Local Database
Start fresh local Supabase instance:
supabase init
supabase startThis creates:
- Local PostgreSQL database on port 54322
- Studio dashboard at http://localhost:54323
- API server on port 54321
- All Supabase services (Auth, Storage, Realtime, etc.)
Resetting Database
Reset database to clean state with all migrations applied:
supabase db resetReset without running seed data:
supabase db reset --no-seedChecking Status
View all running services and connection details:
supabase statusExport connection details as environment variables:
supabase status -o env > .env.localMigration Management
Creating Migrations
Method 1: Manual SQL File
Create new migration file:
supabase migration new create_users_tableEdit supabase/migrations/<timestamp>_create_users_table.sql:
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT UNIQUE NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);Apply migration:
supabase db resetMethod 2: Auto-Generate from Diff
Make schema changes in Studio (http://localhost:54323), then generate migration:
supabase db diff -f add_users_tableReview generated file at supabase/migrations/<timestamp>_add_users_table.sql, then apply:
supabase db resetDeploying Migrations
Preview changes before deployment:
supabase db push --linked --dry-runDeploy to remote:
supabase db push --linkedDeploy with seed data:
supabase db push --linked --include-seedDeploy with custom roles:
supabase db push --linked --include-rolesPulling Remote Schema
Import existing remote schema to local:
supabase link --project-ref PROJECT_REF
supabase db pull initial_schema
supabase db resetPull specific schemas only:
supabase db pull -s public,extensionsMigration Best Practices
Always follow this workflow:
- Create migration locally
- Apply with
supabase db reset - Generate types
- Test application
- Commit migration file
- Deploy with
supabase db push --linked --dry-runfirst - Deploy with
supabase db push --linked
Type Generation
TypeScript Types
Generate types from local database:
supabase gen types typescript --local > src/lib/types/database.types.tsGenerate from remote:
supabase gen types typescript --linked > src/lib/types/database.types.tsGenerate specific schemas:
supabase gen types typescript --local --schema public,extensions > src/lib/types/database.types.tsOther Languages
Generate Go types:
supabase gen types go --local > types/database.goGenerate Swift types:
supabase gen types swift --local --swift-access-control public > Types/Database.swiftAutomation
Regenerate types after every schema change:
supabase db reset && supabase gen types typescript --local > src/lib/types/database.types.tsAPI Key Management
Getting Local Keys
View all local API keys:
supabase statusExtract keys to environment file:
supabase status -o env > .env.localResult includes:
SUPABASE_URL- API endpointSUPABASE_ANON_KEY- Client-side public keySUPABASE_SERVICE_ROLE_KEY- Server-side admin keyDATABASE_URL- Direct database connection
Getting Remote Keys
Authenticate first:
supabase loginLink to project:
supabase link --project-ref PROJECT_REFRetrieve API keys:
supabase projects api-keys --project-ref PROJECT_REFDirect Database Access
Using psql
Connect to local database:
psql postgresql://postgres:postgres@localhost:54322/postgresExecute single query:
psql postgresql://postgres:postgres@localhost:54322/postgres -c "SELECT * FROM users;"Run SQL file:
psql postgresql://postgres:postgres@localhost:54322/postgres -f query.sqlConnection Details
Get database URL from status:
supabase statusExtract only database URL:
supabase status | grep "DB URL"Running Migrations Manually
Apply specific SQL file:
psql postgresql://postgres:postgres@localhost:54322/postgres -f supabase/migrations/20230101_my_migration.sqlCommon Workflows
Standard Development Cycle
Daily workflow:
# Morning: Start stack
supabase start
# Make schema changes in Studio or create migration
supabase migration new add_feature
# Apply changes
supabase db reset
# Regenerate types
supabase gen types typescript --local > src/lib/types/database.types.ts
# Test application
npm run dev
# Commit changes
git add supabase/migrations/ src/lib/types/database.types.ts
git commit -m "feat: add new feature schema"
# Deploy to production
supabase db push --linked --dry-run
supabase db push --linkedTeam Collaboration
New developer setup:
# Clone repository
git clone REPO_URL
# Install CLI
npm install
# Login to Supabase
supabase login
# Start local development
supabase start
# Apply all migrations
supabase db reset
# Generate types
supabase gen types typescript --local > src/lib/types/database.types.tsAfter pulling teammate's changes:
git pull
supabase db reset
supabase gen types typescript --local > src/lib/types/database.types.tsProduction Deployment
Safe deployment pattern:
# Link to production project
supabase link --project-ref PRODUCTION_REF
# Preview changes
supabase db push --linked --dry-run
# Review output carefully
# Deploy
supabase db push --linked
# Verify deployment
supabase db pull verify_deploymentTroubleshooting
Port Conflicts
If ports are already in use, edit supabase/config.toml:
[api]
port = 55321
[db]
port = 55322
[studio]
port = 55323Then restart:
supabase stop
supabase startDatabase in Bad State
Reset completely:
supabase stop
docker volume prune
supabase start
supabase db resetMigration Conflicts
Pull remote changes first:
supabase db pull remote_changesResolve conflicts in migration files, then:
supabase db reset
supabase db push --linkedType Mismatches
Regenerate types from current schema:
supabase gen types typescript --local > src/lib/types/database.types.tsCommand Reference
For complete CLI command reference with all flags and options, see references/cli-commands.md.
For detailed workflow examples and patterns, see references/workflows.md.
Most Used Commands
Setup:
supabase init- Initialize projectsupabase login- Authenticatesupabase link- Link to remote projectsupabase start- Start local stacksupabase status- View connection details
Database:
supabase db reset- Reset database with migrationssupabase db diff -f NAME- Generate migration from diffsupabase db push --linked- Deploy migrationssupabase db pull- Import remote schema
Migrations:
supabase migration new NAME- Create new migrationsupabase migration list- List all migrations
Types:
supabase gen types typescript --local- Generate TypeScript types
Keys:
supabase status- Get local keyssupabase projects api-keys- Get remote keys
Cleanup:
supabase stop- Stop local stack
Resources
references/cli-commands.md
Complete command reference with all flags, options, and examples for every Supabase CLI command. Load this when:
- Need detailed flag information for specific command
- Looking up exact syntax
- Exploring advanced command options
Search patterns:
# Find commands related to migrations
grep -i "migration" references/cli-commands.md
# Find commands for type generation
grep -i "gen types" references/cli-commands.md
# Find database commands
grep -i "supabase db" references/cli-commands.mdreferences/workflows.md
Comprehensive workflow guides covering:
- Initial setup patterns
- Schema development workflows
- Migration management strategies
- Type generation automation
- Team collaboration patterns
- CI/CD integration
- Troubleshooting common issues
Load this when:
- Planning complex workflow
- Setting up team collaboration
- Configuring CI/CD pipelines
- Solving workflow-specific problems
- Looking for best practices