supabase/supabase-flutter/supabase-typegen-generate

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Generates the typed Dart schema (row, insert and update types, column constants, enums and typed rpc methods) for a Supabase database with `supabase gen types --lang dart`, and keeps it in sync with the database. Use when setting up typed queries with table(), after changing a database migration, when a table, column or function is missing from the generated file, or when the generated file fails to analyze.

Install

npx vskill@latest install supabase/supabase-flutter/supabase-typegen-generate

SKILL.md

Generating the typed Supabase schema

The supabase_typegen package turns a Supabase database schema into the Dart types that client.table() and the typed client.rpc methods use. It is never run by hand: the Supabase CLI introspects the database and runs dart run supabase_typegen --output - in the current directory with the schema on stdin, and the generated code arrives on stdout.

Rules

  • Generate with the Supabase CLI, version 2.122.0 or newer. Check with

supabase --version, or npx supabase --version when the project pins the CLI in package.json.

  • Never edit the generated file. Change the database and regenerate instead.
  • Regenerate after every database migration, before writing code against the

new schema.

  • Commit the generated file, so the app builds without a database.
  • Run the command from the directory of the app's pubspec.yaml. The CLI

finds the supabase/ folder in that directory or any parent, and runs the generator where it was started.

Setup

sh
dart pub add dev:supabase_typegen

Use flutter pub add in a Flutter app. The generator must be a dev dependency of the package the file is written into, since the CLI runs it with dart run there.

Generating

Pick the database to read from:

SourceCommand
Local stack from the supabase/ migrations (after supabase start)supabase gen types --lang dart --local > lib/supabase_schema.g.dart
The project linked with supabase linksupabase gen types --lang dart --linked > lib/supabase_schema.g.dart
Any hosted projectsupabase gen types --lang dart --project-id <ref> > lib/supabase_schema.g.dart

Prefer --local when the project keeps its schema as migrations, so the SQL in supabase/migrations stays the source of truth. --local needs Docker and a running stack.

Without --schema, the CLI generates public plus the schemas listed in api.schemas of supabase/config.toml. Pass --schema once per schema to choose them yourself:

sh
supabase gen types --lang dart --local --schema public --schema inventory > lib/supabase_schema.g.dart

Only schemas exposed through the Data API can be queried at runtime. A table in a schema other than public carries the schema as a prefix, inventory.books becomes InventoryBooks, and its table definition carries the schema, so no .schema() call is needed.

After generating, analyze the file, with flutter analyze in a Flutter app. It must be clean:

sh
dart analyze lib/supabase_schema.g.dart

The file is already formatted for the project's language version, so dart format leaves it unchanged.

What the file contains

For a table books in public:

GeneratedUse
BooksRowThe row type returned by select(), with one typed getter per column
BooksInsertThe only value insert() and upsert() accept; required columns are required parameters
BooksUpdateThe only value update() accepts, plus set…ToNull() for nullable columns
Books.tableThe table definition passed to client.table()
Books.title, Books.authorId, …Column constants for filters, orderings and selectOnly
Books.authorsA relation constant per foreign key, for embedding
MoodA Dart enum per Postgres enum
client.rpc.bookById(…)A typed method per function PostgREST exposes
dart
final List<BooksRow> books = await supabase
.table(Books.table)
.select()
.where(Books.mood.eq(Mood.happy));
final BooksRow? book = await supabase.rpc.bookById(bookId: 1);

Read-only relations, such as materialized views, get a row type and column constants but no insert or update type, so writes to them do not compile.

When something is missing

  • A table is missing. Its schema was not generated: add --schema, or

add the schema to api.schemas. A table without columns is skipped, and the CLI says so in its summary.

  • A relation constant is missing. Foreign keys into another schema and

self-referencing foreign keys get no relation, since PostgREST cannot embed them. Query those through a second request.

  • A name has a suffix. A name the generated code itself uses, such as

String, gets $.

  • A function has no method. The generated file has a comment where the

method would be, explaining why. Call it untyped with supabase.rpc('fn', params: {...}).

  • A column has an unexpected type. numeric maps to num, date to

PostgresDate, interval to PostgresInterval, and array elements are assumed non-null. The full list is in the `supabase_typegen` README.

Errors

The CLI reports a generator failure as failed to generate dart types: dart run supabase_typegen exited with code N: …, followed by the generator's own message.

SymptomFix
dart run cannot find supabase_typegenAdd the dev dependency and run pub get in the directory the command runs in.
The project is on Dart X, but the generated code needs Dart Y or newerRaise the lower bound of environment.sdk in pubspec.yaml.
The database has no schema "x"Check the schema name, or that the stack has run the migration that creates it.
The project resolves supabase_flutter 2.x, but the generated code needs version 3 of supabase_flutterUpgrade the package to version 3 following MIGRATION.md, then run pub get.
The document describes no tables, views, enums or functionsCheck the schema names, or that the stack has run the migrations.
The document has no "rpcFunctions" collection, so no RPC methods are generatedUpgrade the Supabase CLI to the latest release and regenerate.
--lang dart is rejectedUpgrade the Supabase CLI to 2.122.0 or newer.
--local cannot reach the databaseRun supabase start first.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
1,039
Repository forks
312
7-day trend score
0

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/supabase/supabase-flutter/supabase-typegen-generate/badge)](https://verified-skill.com/skills/supabase/supabase-flutter/supabase-typegen-generate)

Something wrong with this skill or its page? Tell us.