Introducing Weavori: FK-intact Postgres test data
Weavori is live — a zero-config CLI that turns any PostgreSQL schema into realistic, referentially intact synthetic data in one command. Free tier, flat-fee Pro, 14-day trial, no credit card.
Today we're launching Weavori: a zero-config CLI for PostgreSQL synthetic data. Point it at any Postgres database and it generates realistic, referentially intact test data in one command. No YAML. No DSL. No per-column mapping.
The problem: seed scripts rot
Every team has a version of this: a seed script that fills local and staging databases with mock data. It works at first. Then production data gets messy in ways the script never modeled — value distributions shift, columns appear, foreign keys multiply — and the script quietly starts producing data that lies to your tests.
The failure modes are predictable: dangling foreign keys, uniform random values that never exercise real query plans, and rows that are internally impossible (an invoice paid before it was issued). Each one is a bug that ships to production because the test environment didn't look like reality.
This community articulated the problem better than we could. From the Neosync Show HN thread last year:
"The problem is that production data is messy and it's very difficult to replicate that with mock data."
The two hardest parts people named in that thread — referential integrity and matching real value distributions — are exactly what Weavori solves by construction instead of by configuration.
One command, from schema to data
Weavori connects, introspects the schema — tables, foreign keys, column types, constraints, enums, defaults, triggers — and builds a generation plan. You review it, refine it, and approve. Then it streams production-shaped data to JSON/CSV on stdout or directly into a target database via COPY.
The interactive plan shows every table, row count, and generator choice before anything is written. --yes skips the prompt for CI.
How it works
- Schema-aware inference. Every column gets a generator chosen from its name and type: ~230 token-based rules across 25+ domains (
first_namebecomes a name,zipbecomes a ZIP, a status enum samples its own labels), with PostgreSQL type fallbacks. No config to write, nothing to maintain when the schema changes. - Referential integrity by construction. Foreign keys are resolved topologically — parents before children, via Kahn's algorithm — with a streaming, constant-memory FK cache. Composite primary keys work. Integrity is guaranteed by construction, never checked after the fact.
- Distribution-aware generation. By default Weavori samples
pg_stats(most-common values + frequencies) and weights generated values accordingly. If 70% of your realstatusvalues areactive, ~70% of generated ones are.--fast,--sample-rows N, and--no-samplingtrade accuracy for speed. - Cross-column coherence. Timelines make sense (
created_atprecedesupdated_at), lifecycle states are coherent (paid_atis NULL unlessstatus = 'paid'), and multi-column CHECK constraints are honored. All detected from the schema, enforced per row.
What's different
- It reads your schema instead of asking you to describe it. Zero-config is the product, not a feature.
- Everything runs on your machine or CI. Source data never leaves your infrastructure.
- DDL paste mode. Generate from pasted
CREATE TABLEstatements — no database at all. - A built-in MCP server. AI assistants (Claude Desktop, Cursor, VS Code Continue, Qoder) can drive introspect, estimate, generate, doctor, and sync in-conversation. We don't know of another synthetic-data tool that offers this.
- Flat-fee pricing. No credit meters, no per-row charges.
- A fingerprint-keyed schema cache. Repeated runs against the same database skip re-introspection and start in milliseconds.
How fast
- 100,000 rows across 14 tables in 12.4 seconds
- 25,000 rows in 2.1 seconds; 2,500 rows in 384 ms
- Typical schemas (under 200 tables) complete in under 2 minutes
- Constant memory regardless of row count — million-row tables stream without million-row buffers
- Stress-tested against a 500 GB benchmark database
Methodology
Benchmarks measured against Weavori's internal benchmark suite (pgbench-derived schema, PostgreSQL 17, generation into a target database via COPY). Numbers vary with hardware and schema shape.
What it costs
- Free — 2,000 rows/month, forever, unlimited tables and runs, direct database export, CSV datasets and formulas.
- Pro — $15/month flat: 1M rows, unlimited tables,
syncincluded. No per-table or credit charges at any tier. - 14-day full-Pro trial — server-side, no credit card required.
The upgrade trigger is scale, not time
The free tier never expires. You upgrade because you need a million rows — not because a countdown told you to.
Privacy by design
- Generation runs locally; only license activation and auth credentials touch the server.
- Telemetry is anonymous — command name, duration, success/failure, error category, version, OS. Never database names, hosts, schemas, SQL, or file contents.
- Licenses are Ed25519-signed and validate offline, so air-gapped CI works.
- No superuser, no extension installs, no data leaving your network.
What we deliberately don't do (yet)
Honest boundaries
PostgreSQL only — by design. No deterministic seeding yet (--seed is on the roadmap). No masking of existing data — we generate fresh rows, so no production value ever appears; sync copies real rows unmasked. The formula language (v1) covers concat, lower, upper, trim, substr, coalesce, length, and replace — but deliberately no arithmetic or regex.
Get started
- Install:
npx --yes @weavori/cli - Run:
weavori generate <dsn> - Review the plan, approve, and use the data
Join the discussion on Hacker News — we're reading every comment and shipping fixes as they surface.