Same data, every run.

Lock a seed name and we cache the generated SQL server-side. Anyone on your team — laptop, preview-per-PR, CI runner — gets byte-identical data on demand. The CLI is open source, the cache is content-addressed, and CI integration is one flag.

$npx seedkit-cli cache
Install the CLI →
Chapter 01Seed library

Every generation, saved and searchable.

Each seedkit new or seedkit seed run is preserved in your org's seed library — schema, prompt, parameters, generated dataset. Filter by status (ready / failed), search by name, download as a single .sql.gz, or spin up a fresh ephemeral DB from any past entry in one click.

The library is org-scoped, so once a teammate is invited they see the same catalog you do.

seedkit seed library catalog with cached datasets
Chapter 02Locking a seed

One flag turns “random” into “reproducible.”

Pass --seed my-fixture to new or seed and the generated SQL is cached server-side, keyed by schema + name + generator versions. The seed name itself is the handle you share with your team — commit it next to your migrations.

Re-runs against the same key serve the cached SQL — no LLM call, no PRNG roulette, byte-identical inserts.

$ seedkit new --schema schema.sql --seed my-fixture
Designing schema... ✓ 8 tables, 14 relations
Generating data... ✓ 14,820 rows
Caching SQL... ✓ key 9a2f4e01
 
// next time, anywhere:
$ seedkit seed --seed my-fixture --from-cache
from cache · 14,820 rows in 1.4s
Chapter 03Content-addressed cache

Hash the inputs. Reuse the bytes.

The cache key is a sha256 of the normalized schema, the seed name, and pinned generator versions. Two teammates running with the same inputs hit the same key — no coordination needed. Change the schema (even reorder columns) and the key changes; we regenerate.

Cache hits are free of LLM cost and run in seconds. Browse what's cached with seedkit cache from the CLI.

$ seedkit cache
KEY SEED SCHEMA ROWS HITS
9a2f4e01 my-fixture a7f102 14,820 12
1d88c0b2 demo-small a7f102 500 4
b04e7711 de-finance c1884f 12,450 0
 
// key recipe:
content_key = sha256(
  schema_normalized + // types, FKs, order-stable
  seed_name + // e.g. "my-fixture"
  generator_versions // pinned per release
)
Chapter 04CI integration

Same data in CI, fast — and on every PR.

The canonical CI pattern is seedkit seed --from-cache. Cache hit means no LLM call — just the same bytes, applied in seconds. Add --reset to truncate first so each run starts clean.

Combine with preview-environment Postgres (Neon branches, Vercel/Render preview DBs) and every PR gets the same byte-identical fixture.

.github/workflows/test.yml
# seed the test database before integration tests
- name: Seed test database
  run: npx seedkit-cli seed \
      --url $DATABASE_URL \
      --schema schema.sql \
      --seed my-fixture --from-cache --reset
  env:
    SEEDKIT_TOKEN: ${{ secrets.SEEDKIT_TOKEN }}
 
✓ from cache · 14,820 rows in 1.4s

Lock your first fixture.

Run with --seed my-fixture once. Re-run from cache forever.

$npx seedkit-cli new --seed my-fixture
How the cache works →

Your next database is a sentence away.

$npx seedkit-cli new
// or paste your schema at seedkit.dev

Free to start · No card required · MIT-licensed CLI