Quickstart

This walks through the whole flow in a few minutes, starting from nothing.

The zero-setup path

If you just want to see it work, tdw demo needs no database of your own:

tdw demo --seed 42

It builds a small SQLite e-commerce database (users, categories, products, orders, order items), analyzes it, and deploys a generator set against it. The --seed makes the run reproducible.

Against your own database

Point analyze at any SQLAlchemy connection string to see what the tool makes of your schema:

tdw analyze "sqlite:///shop.db"
tdw analyze "postgresql://user:pass@host:5432/shop"

The report lists tables with their inferred entity types, detected relationships, candidate business rules, and any columns flagged as potential PII. To read only structure and never touch row data, add --metadata-only (see Privacy and Data Access).

Generate the generators

deploy runs the full pipeline and writes an output tree:

tdw deploy "sqlite:///shop.db" --output ./generated --seed 42

The result:

generated/
├── generators/          # one runnable generator per table
├── scenarios/           # volume presets
├── config.yaml
└── CONTRIBUTING.md

Run a generated generator

The generators are ordinary Python. Import one and call it:

from generated.generators.users import UsersGenerator

gen = UsersGenerator(seed=42)
for row in gen.generate(5):
    print(row)

Because the seed is fixed, this prints the same five rows every time. Remove the seed for fresh data on each run.

Next steps