Help us improve
Share bugs, ideas, or general feedback.
From nextjs-supabase-ai-sdk-dev
Sets up local Supabase development with Docker containers for Postgres, Auth, Storage, Realtime. Covers CLI init, start, status, migrations, env vars, and TypeScript type generation.
npx claudepluginhub constellos/claude-code --plugin nextjs-supabase-ai-sdk-devHow this skill is triggered — by the user, by Claude, or both
Slash command
/nextjs-supabase-ai-sdk-dev:supabase-local-devThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Supabase Local Development provides a complete local Postgres database with all Supabase services (Auth, Storage, Edge Functions, Realtime) running in Docker containers. This enables offline development, faster iteration, and safe database migrations before deploying to production.
Sets up local Supabase stack via CLI and Docker: init project, start services (Postgres/Auth/Storage), create migrations, seed data, reset DB for schema iteration.
Manages Supabase Postgres databases via CLI: migrations, Edge Functions deployment, local development setup, and project debugging.
Guides Supabase CLI for local dev setup, DB migrations/diffs/resets, edge functions serve/deploy, secrets, and TypeScript code gen.
Share bugs, ideas, or general feedback.
Supabase Local Development provides a complete local Postgres database with all Supabase services (Auth, Storage, Edge Functions, Realtime) running in Docker containers. This enables offline development, faster iteration, and safe database migrations before deploying to production.
Key benefits:
Official Documentation:
Supabase local development requires a Docker-compatible container runtime:
Verify Docker is running:
docker info
Install via npm (recommended for Next.js projects):
npm install -g supabase
Or via Homebrew (macOS):
brew install supabase/tap/supabase
Verify installation:
supabase --version
supabase init
This creates a supabase/ directory with:
config.toml - Local configurationseed.sql - Optional seed datamigrations/ - Database migrationssupabase start
First run downloads Docker images (~2GB). Subsequent starts are faster.
Services started:
| Service | Local URL | Purpose |
|---|---|---|
| API | http://127.0.0.1:54321 | REST/GraphQL API |
| Studio | http://127.0.0.1:54323 | Database UI |
| Inbucket | http://127.0.0.1:54324 | Email testing |
| Database | postgresql://127.0.0.1:54322 | Direct Postgres |
supabase status -o env
Output:
SUPABASE_URL=http://127.0.0.1:54321
SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...
SUPABASE_DB_URL=postgresql://postgres:postgres@127.0.0.1:54322/postgres
Add to .env.local:
# Supabase Local Development
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...
Note: NEXT_PUBLIC_ prefix exposes variables to the browser.
supabase gen types typescript --local > lib/supabase/database.types.ts
Regenerate after schema changes.
Prefix with NEXT_PUBLIC_:
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
No prefix required:
SUPABASE_SERVICE_ROLE_KEY=eyJ...
SUPABASE_DB_URL=postgresql://...
| Framework | File | Priority |
|---|---|---|
| Next.js | .env.local | 1st |
| Next.js | .env.development.local | 2nd |
| Generic | .env | 3rd |
| Cloudflare Workers | dev.vars | Special |
supabase db diff -f migration_name
supabase db reset
supabase db push
supabase link --project-ref YOUR_PROJECT_REF
supabase gen types typescript --local > lib/supabase/database.types.ts
supabase gen types typescript --project-id YOUR_PROJECT_ID > lib/supabase/database.types.ts
import { createClient } from "@supabase/supabase-js";
import type { Database } from "@/lib/supabase/database.types";
const supabase = createClient<Database>(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
| Command | Purpose |
|---|---|
supabase init | Initialize new project |
supabase start | Start local services |
supabase stop | Stop local services |
supabase status | Show service status |
supabase status -o env | Output as environment variables |
supabase db reset | Reset database and apply migrations |
supabase db diff -f name | Create migration from changes |
supabase db push | Push migrations to remote |
supabase gen types typescript --local | Generate types from local |
supabase link --project-ref REF | Link to remote project |
# macOS - Start Docker Desktop
open -a Docker
# Linux - Start Docker daemon
sudo systemctl start docker
If ports are in use:
supabase stop --no-backup
supabase start
Or configure different ports in supabase/config.toml.
supabase stop --no-backup
supabase start
supabase db reset
DO:
supabase db diff for migrations.env.local for local credentials (gitignored)DON'T: