Supabase CLI Anleitung für Entwickler (2026)

Ashley Innocent

Ashley Innocent

24 March 2026

Supabase CLI Anleitung für Entwickler (2026)

Apidog für Unternehmen

On-Premises-Bereitstellung

SSO & RBAC

SOC 2 konform

Apidog Enterprise entdecken

Kurz gesagt

Supabase CLI führt einen vollständigen Supabase-Stack auf Ihrem Computer mit Docker aus: PostgreSQL, Auth, Storage und Edge Functions. Installieren Sie es mit brew install supabase/tap/supabase, führen Sie supabase init und supabase start aus, um eine lokale Umgebung einzurichten, und verwenden Sie dann supabase db push und supabase functions deploy, um in die Produktion zu deployen. Es ist der schnellste Weg, Supabase-Backends zu erstellen und zu testen, ohne die Cloud zu berühren.

Einführung

73 % der Backend-Fehler werden in der Produktion entdeckt, weil Entwickler lokale Tests überspringen. Mit der Supabase CLI gibt es dafür keine Ausrede mehr. Sie erhalten eine vollständige, produktionsäquivalente Umgebung, die in weniger als 5 Minuten auf Ihrem Computer läuft.

Hier ist das eigentliche Problem: Die meisten Entwickler testen entweder direkt in der Produktion (riskant) oder verbringen Stunden damit, lokale Umgebungen zu konfigurieren, die nie ganz mit der Cloud übereinstimmen (frustrierend). Die Supabase CLI löst beides. Sie bietet Ihnen einen Docker-basierten lokalen Stack, der die Produktion exakt widerspiegelt, sodass das, was lokal funktioniert, auch in der Produktion funktioniert.

💡
Wenn Sie APIs auf Basis von Supabase erstellen, benötigen Sie ein Tool, um diese Endpunkte während der Entwicklung zu entwerfen, zu testen und zu dokumentieren. Apidog verbindet sich direkt mit den REST- und GraphQL-APIs von Supabase, sodass Sie Ihr Backend testen können, während Sie es lokal entwickeln.
Button

Testen Sie Ihre Supabase APIs mit Apidog – kostenlos

Am Ende dieses Leitfadens werden Sie in der Lage sein:

Warum die lokale Supabase-Entwicklung ohne CLI scheitert

Wenn Sie versucht haben, eine Supabase-App ohne die CLI zu erstellen, kennen Sie den Schmerz. Hier sind drei Szenarien, die ständig auftreten.

Die „Test in Produktion“-Falle. Sie nehmen eine Schemaänderung direkt im Supabase-Dashboard vor. Es funktioniert. Sie pushen Ihr Frontend. Drei Tage später zieht ein Teamkollege das Repository und seine App stürzt ab, weil seine Datenbank die neue Spalte nicht enthält.

Die Umgebungsinkonsistenz. Sie richten eine lokale PostgreSQL-Instanz ein, erstellen Ihr Supabase-Schema manuell neu und verbringen zwei Stunden damit, zu debuggen, warum Row Level Security-Richtlinien lokal anders funktionieren. Sie verhalten sich nicht anders. Sie haben eine Richtlinie übersehen.

Das „funktioniert auf meinem Rechner“-Problem. Ihre Edge Function funktioniert im Supabase-Dashboard-Editor, schlägt aber in der Produktion fehl, weil Sie mit fest codierten Werten statt mit echten Umgebungsvariablen getestet haben.

Dies sind keine Randfälle. Schema-Drift (lokale und entfernte Datenbanken geraten aus dem Gleichgewicht) ist das am häufigsten gemeldete Problem für Teams, die Supabase verwenden. Die CLI behebt alle drei Probleme:

Wie Supabase CLI funktioniert

Der lokale Stack

Wenn Sie supabase start ausführen, startet die CLI einen Docker Compose Stack mit diesen Diensten:

Dienst Port Zweck
PostgreSQL 54322 Ihre Datenbank
PostgREST 54321 Automatisch generierte REST API
GoTrue 54321/auth Authentifizierungsdienst
Realtime 54321/realtime WebSocket-Abonnements
Storage 54321/storage Dateispeicher
Studio 54323 Visuelles Dashboard
Inbucket 54324 E-Mail-Test (fängt alle E-Mails lokal ab)
Edge Runtime 54321/functions Deno-basierter Funktions-Runner

Dies ist derselbe Stack, der in Supabase Cloud läuft. Auf Ihrem Computer.

Installation

macOS:

brew install supabase/tap/supabase

Windows (Scoop):

scoop bucket add supabase https://github.com/supabase/scoop-bucket.git
scoop install supabase

Linux / npm:

npm install -g supabase

Überprüfen, ob es funktioniert hat:

supabase --version
# supabase 1.x.x
supabase start

Projekteinrichtung

mkdir my-project && cd my-project
supabase init

Dies erstellt:

supabase/
├── config.toml       # Ports, Auth-Einstellungen, Speicher-Konfiguration
├── seed.sql          # Entwicklungsdaten, die bei jedem DB-Reset geladen werden
└── migrations/       # Schema-Versionshistorie

Lokalen Stack starten

supabase start

Der erste Durchlauf lädt etwa 1 GB an Docker-Images herunter. Danach dauern die Starts etwa 10 Sekunden.

API URL: http://localhost:54321
DB URL:  postgresql://postgres:postgres@localhost:54322/postgres
Studio:  http://localhost:54323
anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Kopieren Sie den anon key in Ihre .env.local-Datei. Sie benötigen ihn für Ihr Frontend.

Datenbankverwaltung mit Migrationen

Migrationen sind der Kern des CLI-Workflows. Jede Schemaänderung wird zu einer versionskontrollierten SQL-Datei, die in Git verfolgt wird. Kein „Wer hat wann die Datenbank geändert“ mehr.

Erste Migration erstellen

supabase migration new create_posts_table
# Creates: supabase/migrations/20260324120000_create_posts_table.sql

Bearbeiten Sie die Datei:

-- Create posts table with RLS from the start
CREATE TABLE posts (
  id          UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  user_id     UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL,
  title       TEXT NOT NULL,
  content     TEXT,
  published   BOOLEAN DEFAULT false,
  created_at  TIMESTAMPTZ DEFAULT NOW(),
  updated_at  TIMESTAMPTZ DEFAULT NOW()
);

-- Enable Row Level Security
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;

-- Anyone can read published posts
CREATE POLICY "Anyone can read published posts"
  ON posts FOR SELECT
  USING (published = true);

-- Users manage their own posts
CREATE POLICY "Users manage own posts"
  ON posts FOR ALL
  USING (auth.uid() = user_id);

-- Auto-update updated_at on every change
CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at = NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER posts_updated_at
  BEFORE UPDATE ON posts
  FOR EACH ROW EXECUTE FUNCTION update_updated_at();

Wenden Sie sie an:

supabase migration up

TypeScript-Typen generieren

Nach jeder Schemaänderung generieren Sie Ihre Typen neu:

supabase gen types typescript --local > src/types/database.ts

Ihr Frontend erhält volle Typsicherheit:

import { Database } from '@/types/database'

type Post = Database['public']['Tables']['posts']['Row']
type NewPost = Database['public']['Tables']['posts']['Insert']

// Ihr Editor fängt nun Typfehler vor der Laufzeit ab
const createPost = async (post: NewPost) => {
  const { data, error } = await supabase
    .from('posts')
    .insert(post)
    .select()
    .single()
  return data
}

Entwicklungsdaten seeden

Bearbeiten Sie supabase/seed.sql:

-- Testbenutzer (umgeht die Authentifizierung für die lokale Entwicklung)
INSERT INTO auth.users (id, email) VALUES
  ('00000000-0000-0000-0000-000000000001', 'alice@example.com'),
  ('00000000-0000-0000-0000-000000000002', 'bob@example.com');

-- Test-Beiträge
INSERT INTO posts (user_id, title, content, published) VALUES
  ('00000000-0000-0000-0000-000000000001', 'Getting started with Supabase', 'Here is what I learned...', true),
  ('00000000-0000-0000-0000-000000000002', 'Draft: API design patterns', 'Work in progress...', false);

Jederzeit zurücksetzen und neu seeden:

supabase db reset

Dies löscht alles, führt alle Migrationen erneut aus und lädt Ihre Seed-Daten. Führen Sie dies jeden Morgen aus, um neu zu beginnen.

Supabase APIs mit Apidog testen

Sobald Ihr lokales Supabase läuft, haben Sie eine voll funktionsfähige REST-API unter http://localhost:54321. Supabase generiert automatisch Endpunkte für jede Tabelle über PostgREST. Das manuelle Testen dieser mit Curl wird schnell mühsam, besonders wenn Sie RLS-Richtlinien mit verschiedenen Benutzer-Tokens testen müssen.

Apidog verbindet sich direkt mit Ihrer lokalen Supabase-Instanz. Sie können:

Apidog mit lokalem Supabase einrichten:

  1. Ein neues Projekt in Apidog erstellen
  2. Basis-URL festlegen: http://localhost:54321
  3. Umgebungsvariable hinzufügen: anon_key = Ihr-lokaler-anon-key
  4. Authorization-Header hinzufügen: Bearer {{anon_key}}

Den Posts-Endpunkt testen:

GET http://localhost:54321/rest/v1/posts?published=eq.true
Authorization: Bearer {{anon_key}}
apikey: {{anon_key}}

Speichern Sie dies als Anfrage, fügen Sie eine Assertion hinzu, dass die Antwort mindestens einen Beitrag enthält, und führen Sie sie jedes Mal aus, wenn Sie Ihre RLS-Richtlinien ändern. Sie werden fehlerhafte Richtlinien abfangen, bevor sie in Produktion gelangen.

Beginnen Sie mit dem Testen Ihrer Supabase APIs mit Apidog

Edge Functions: lokal erstellen und testen

Edge Functions laufen auf Deno am Edge, nahe bei Ihren Benutzern. Sie sind perfekt für Webhooks, Hintergrundaufgaben und API-Endpunkte, die serverseitige Logik benötigen.

Eine Funktion erstellen

supabase functions new send-welcome-email

Dies erstellt supabase/functions/send-welcome-email/index.ts:

import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2'

serve(async (req) => {
  const { user_id } = await req.json()

  // Dienstrolle umgeht RLS – mit Vorsicht verwenden
  const supabase = createClient(
    Deno.env.get('SUPABASE_URL')!,
    Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
  )

  const { data: profile } = await supabase
    .from('profiles')
    .select('email, full_name')
    .eq('id', user_id)
    .single()

  // Ihre E-Mail-Sende-Logik hier
  console.log(`Sending welcome email to ${profile?.email}`)

  return new Response(
    JSON.stringify({ success: true }),
    { headers: { 'Content-Type': 'application/json' } }
  )
})

Lokal mit Hot Reload testen

supabase functions serve

Der Funktionsserver überwacht Dateiänderungen und lädt automatisch neu. Testen Sie es:

curl -X POST http://localhost:54321/functions/v1/send-welcome-email \
  -H "Authorization: Bearer YOUR_ANON_KEY" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "00000000-0000-0000-0000-000000000001"}'

In die Produktion deployen

# Eine Funktion deployen
supabase functions deploy send-welcome-email

# Alle Funktionen deployen
supabase functions deploy

Fortgeschrittene Techniken und bewährte Ansätze

Geheimnisverwaltung

Hinterlegen Sie API-Schlüssel niemals fest in Ihren Funktionen. Verwenden Sie Geheimnisse:

# Produktionsgeheimnisse setzen
supabase secrets set RESEND_API_KEY=re_xxx STRIPE_KEY=sk_live_xxx

# Alle Geheimnisse auflisten
supabase secrets list

# Ein Geheimnis entfernen
supabase secrets unset STRIPE_KEY

Greifen Sie in Funktionen darauf zu:

const resendKey = Deno.env.get('RESEND_API_KEY')
// Niemals: const resendKey = 're_xxx'

Datenbank-Branching

Arbeiten Sie an einer größeren Schemaänderung? Erstellen Sie einen isolierten Branch:

supabase branches create feature-payments
supabase branches switch feature-payments

# Änderungen vornehmen, testen, dann zusammenführen
supabase branches merge feature-payments

Dies hält Ihre Hauptentwicklungsdatenbank sauber, während Sie experimentieren.

Häufige Fehler, die vermieden werden sollten

Datenbank direkt im Studio bearbeiten. Verwenden Sie immer Migrationen. Direkte Bearbeitungen werden nicht verfolgt und stehen Ihren Teamkollegen nicht zur Verfügung.

.env-Dateien committen. Verwenden Sie supabase secrets set für die Produktion. Fügen Sie .env* zu Ihrer .gitignore hinzu.

supabase db reset nach dem Pull übergehen. Wenn Sie Änderungen von Teamkollegen pullen, müssen deren neue Migrationen lokal ausgeführt werden. Setzen Sie zurück, um sie anzuwenden.

Typen nach Schemaänderungen nicht regenerieren. Ihre TypeScript-Typen werden hinfällig, sobald Sie eine Spalte hinzufügen. Machen Sie die Typgenerierung zu einem Teil Ihres Migrations-Workflows.

Funktionen ohne lokale Tests deployen. Führen Sie immer supabase functions serve aus und testen Sie mit echten Anfragen, bevor Sie deployen.

Dienstrollen-Schlüssel im Frontend-Code verwenden. Der Dienstrollen-Schlüssel umgeht RLS. Er gehört nur in Edge Functions und serverseitigen Code, niemals in Ihren Browser.

Performance-Tipps

# Dienste überspringen, die Sie nicht benötigen, um Speicher zu sparen
supabase start --exclude-studio --exclude-inbucket

# Überprüfen, was Ressourcen verbraucht
docker stats

Alternativen und Vergleiche

Funktion Supabase CLI Firebase CLI PlanetScale CLI
Lokale Datenbank Vollständiges PostgreSQL Nur Emulator Nur Cloud
Migrationen SQL-Dateien in Git Keine native Unterstützung Branching
Edge Functions Deno-Laufzeit Cloud Functions Nicht enthalten
Lokale Authentifizierung Vollständiges GoTrue Emulator Nicht enthalten
Open Source Vollständig offen Proprietär Proprietär
Typgenerierung Eingebaut Manuell Manuell

Der lokale Emulator von Firebase eignet sich gut für schnelles Prototyping, bietet Ihnen aber keine echte PostgreSQL-Instanz. Das Branching-Modell von PlanetScale ist hervorragend für Schemaänderungen, aber Sie arbeiten immer gegen die Cloud. Die Supabase CLI gewinnt für Teams, die eine vollständig quelloffene, PostgreSQL-native lokale Entwicklungserfahrung wünschen.

Praxisbeispiele

SaaS-Anwendung mit Multi-Tenant-Daten. Ein Fintech-Startup verwaltet 47 Migrationen über drei Umgebungen (Dev, Staging, Prod). RLS-Richtlinien werden lokal mit verschiedenen Benutzerrollen getestet, bevor Code in Produktion geht. Ergebnis: null schema-bezogene Produktionsvorfälle in sechs Monaten.

E-Commerce-Auftragsverarbeitung. Ein E-Commerce-Team verwendet Edge Functions für die Stripe-Webhook-Verarbeitung. Sie testen Webhook-Payloads lokal mit supabase functions serve und echten Stripe-Test-Events. Die Bereitstellungszeit sank von 2 Stunden auf 15 Minuten.

Backend für mobile Apps. Ein React Native-Team generiert nach jeder Migration TypeScript-Typen und teilt diese als internes npm-Paket. Frontend und Backend bleiben automatisch synchron. Keine Fragen mehr im Slack wie „Welche Felder gibt dieser Endpunkt zurück?“.

Zusammenfassung

Hier ist, was Sie jetzt tun können:

Der Workflow zahlt sich sofort aus. Ihr Team liefert schneller, fängt Fehler früher ab und hat nie wieder mit Schema-Drift zu tun.

Ihre nächsten Schritte:

  1. Installieren: brew install supabase/tap/supabase
  2. Führen Sie supabase init in Ihrem Projekt aus
  3. Erstellen Sie Ihre erste Migration
  4. Apidog einrichten, um Ihre lokalen Endpunkte zu testen
  5. Mit Vertrauen in die Produktion deployen

Testen Sie Ihre Supabase APIs mit Apidog – kostenlos

Button

Häufig gestellte Fragen (FAQ)

Benötige ich Docker, um Supabase CLI zu verwenden?Ja. Docker Desktop muss ausgeführt werden, bevor supabase start verwendet wird. Die CLI verwendet Docker Compose, um den vollständigen Stack lokal auszuführen. Wenn Docker nicht ausgeführt wird, erhalten Sie die Fehlermeldung „Cannot connect to Docker daemon“ (Kann keine Verbindung zum Docker-Daemon herstellen).

Wie synchronisiere ich meine lokale Datenbank mit der Produktion?Verwenden Sie supabase db pull, um eine Migration von Ihrem Remote-Schema zu generieren, und dann supabase db push, um lokale Migrationen auf die Produktion anzuwenden. Führen Sie supabase db reset lokal aus, nachdem Sie gepullt haben, um sicherzustellen, dass Ihre Umgebung übereinstimmt.

Kann ich Supabase CLI ohne ein Supabase Cloud-Konto verwenden?Ja. Sie können die CLI vollständig lokal für die Entwicklung ohne Cloud-Konto verwenden. Sie benötigen supabase login und supabase link nur, wenn Sie bereit sind, in die Produktion zu deployen.

Wie gehe ich mit Migrationskonflikten in einem Team um?Pullen Sie die neuesten Git-Änderungen und führen Sie supabase db reset aus, bevor Sie neue Migrationen erstellen. Verwenden Sie aussagekräftige Migrationsnamen und kommunizieren Sie mit Ihrem Team, wenn Sie breaking schema changes vornehmen.

Was ist der Unterschied zwischen supabase db push und supabase migration up?supabase migration up wendet ausstehende Migrationen auf Ihre lokale Datenbank an. supabase db push wendet sie auf Ihr Remote- (Produktions-) Projekt an. Testen Sie immer zuerst lokal.

Kann ich Supabase CLI mit einem bestehenden Projekt verwenden?Ja. Führen Sie supabase link --project-ref IHRE_PROJEKT_ID aus, um eine Verknüpfung zu einem bestehenden Projekt herzustellen, und dann supabase db pull, um Migrationen aus Ihrem aktuellen Remote-Schema zu generieren.

Wie teste ich RLS-Richtlinien lokal?Verwenden Sie Supabase Studio unter http://localhost:54323, um zwischen Benutzerrollen zu wechseln, oder testen Sie über die API mit verschiedenen JWT-Tokens. Apidog macht dies einfach: Erstellen Sie mehrere Umgebungen mit unterschiedlichen Benutzer-Tokens und führen Sie dieselben Anfragen als verschiedene Benutzer aus.

Ist Supabase CLI kostenlos?Ja. Die CLI ist kostenlos und quelloffen. Die lokale Entwicklung kostet nichts. Sie zahlen nur für Supabase Cloud-Ressourcen, wenn Sie in die Produktion deployen.

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen

Supabase CLI Anleitung für Entwickler (2026)