Seedfast

Seedfast

Large-Volume Seeding: Seed Millions of Records

Describe what you need in plain English β€” Seedfast generates realistic data at any scale, directly into your database.

Seedfast generates data at whatever volume you describe. Fifty records for local development, a million for load testing β€” the scope is defined in natural language, and Seedfast builds a plan that matches.

Volume and realism aren't in tension. Whether you're seeding 50 rows or 5 million, Seedfast generates values that fit your domain. Names, statuses, timestamps, and relational data are inferred from your schema β€” not randomized.

seedfast seed --scope "seed 1 million orders with line items"
  1. You describe the scope β€” what tables, how many records, any constraints
  2. Seedfast builds a plan β€” analyzes your schema, resolves dependencies, determines row counts per table
  3. You see a preview β€” table names, record counts, and descriptions
  4. You approve or refine β€” if something's off, describe what to change; Seedfast replans without restarting
  5. Data is written directly into your database β€” no exports, no intermediate files

If there are dependency issues β€” a table that needs data from another table you didn't include β€” Seedfast warns you before seeding starts, not halfway through.

Thirty rows won't surface the slow query that only appears at 100K. You need a database that behaves like production under realistic load.

seedfast seed --scope β€œseed 1 million orders with line items”
Seeding Plan:
  public.orders         β€” 1,000,000 records
  public.order_items    β€” 3,500,000 records
  public.customers      β€” 200,000 records

Total: 4,700,000 records across 3 tables

Approve? (Y/n)

β€œOrders with line items” β€” Seedfast resolved that customers are required to place orders and worked backward through the dependency chain automatically.

A populated database for local development: enough data to test pagination, search, and filters without using production data.

seedfast seed --scope β€œseed 50 users with orders and invoices”
Seeding Plan:
  public.users          β€” 50 records
  public.orders         β€” 250 records
  public.invoices       β€” 250 records
  public.order_items    β€” 800 records

Total: 1,350 records across 4 tables

Approve? (Y/n): I need more orders, at least 500

Type what you'd change instead of pressing Y. Seedfast replans:

Updated Seeding Plan:
  public.users          β€” 50 records
  public.orders         β€” 500 records
  public.invoices       β€” 250 records
  public.order_items    β€” 1,600 records

Total: 2,400 records across 4 tables

Approve? (Y/n)

The session stays alive β€” no restarting, no re-authenticating.

A demo database needs data that looks real β€” not three rows that reveal it's synthetic. The quality of generated data matters as much as the volume.

seedfast seed --scope β€œseed 500 customers across 3 regions with support tickets”

Seedfast catches dependency problems before writing anything:

Heads up β€” 1 issue to resolve before seeding

  public.support_tickets depends on public.agents which has 0 rows.
  Add public.agents to scope, or remove public.support_tickets from scope.

How would you like to proceed
Your answer: add agents too, around 20

Updated Seeding Plan:
  public.regions         β€” 3 records
  public.agents          β€” 20 records
  public.customers       β€” 500 records
  public.support_tickets β€” 1,200 records
  public.ticket_comments β€” 3,500 records

Total: 5,223 records across 5 tables

Approve? (Y/n)

Edge cases only appear when there's volume β€” and when the scope covers the whole domain.

seedfast seed --scope "seed all e-commerce tables, 10K products and 50K orders"
Scope Exceeds Plan Limit

Your scope resolves to 35 tables, but your plan allows 20 per seeding.

You can:
  Refine your scope to reduce the number of tables
  Upgrade your plan at https://seedfa.st/pricing

Describe the updated scope:
  seed only products, orders, order_items, categories, and customers β€” 10K products, 50K orders

Seedfast replans with the narrower scope:

Seeding Plan:
  public.categories     β€” 25 records
  public.customers      β€” 8,000 records
  public.products       β€” 10,000 records
  public.orders         β€” 50,000 records
  public.order_items    β€” 150,000 records

Total: 218,025 records across 5 tables

Approve? (Y/n)

No restart, no guessing which tables to cut. The whole conversation happens in one terminal session.

The scope is plain text. You describe what you want, Seedfast interprets it. The better your description, the closer the plan matches your intent.

Specific table names and counts:

seedfast seed --scope "seed 1000 users and 5000 orders"

Proportions between tables:

seedfast seed --scope "seed 100 customers, each with 10 orders"

Schema-level targets:

seedfast seed --scope "seed all tables in the billing schema, 500 records each"

Volume with relationships:

seedfast seed --scope "seed 1 million transactions with associated accounts and categories"

Tips

  • Be explicit about numbers. "500 users" beats "a lot of users".
  • Name the tables when you can. "seed users, orders, and products" is clearer than "seed the main tables".
  • State proportions when they matter. "100 customers, each with 5 orders" gives Seedfast enough context to plan the right ratios.
  • Start small, then scale. Try with 100 records first. Once the plan looks right, bump to 100K.

Before any data is written, you see exactly what Seedfast intends to do:

Seeding Plan:
  public.users          β€” 1,000 records
  public.orders         β€” 5,000 records
  public.order_items    β€” 15,000 records
  public.products       β€” 200 records
  public.categories     β€” 12 records

Total: 21,212 records across 5 tables

Approve? (Y/n)

Each line shows the table name and the number of records.

If the plan doesn't match β€” don't approve. Just type what you'd change:

Approve? (Y/n): double the products and add shipping_addresses

Seedfast replans and shows an updated preview. Repeat until it's right.

# Seedfast asks what to seed β€” you describe it live
seedfast seed
# Auto-approves if the plan fits your subscription
seedfast seed --scope "seed 1000 users with orders"

When you provide --scope, Seedfast skips the interactive prompt, builds the plan, and starts seeding immediately. This is how you use it in scripts and CI/CD pipelines.

If the scope exceeds limits in --scope mode, Seedfast exits with an error instead of entering interactive replan β€” because there's nobody at the terminal to refine.

# Default: rich terminal UI with progress bars
seedfast seed --scope "..."

# Timestamped logs for CI/CD
seedfast seed --scope "..." --output plain

# Machine-readable JSON
seedfast seed --scope "..." --output json