SkillAgentSearch skills...

Seedfaker

Deterministic synthetic data generator for realistic, correlated, and noisy test records across 68 locales. Rust CLI/Python/Node.js/Browser WASM/Go/PHP/Ruby/MCP

Install / Use

/learn @opendsr-std/Seedfaker

README

seedfaker

0.1.0-alpha.30 · sf0-158dc9f79ce46b43

Deterministic synthetic data generator. 200+ fields, 68 locales, native scripts.

CLI (crates.io) · CLI (npm) · Python · Node.js · Browser/WASM · Go · PHP · Ruby · MCP

$ seedfaker name email phone --ctx strict --locale en -n 5 --seed hero --until 2025
Janet Marsh     janet.marsh@inbox.com           +1 (957) 226-4272
Emma Hines      hinesy2@caltech.edu             (779) 640-3402
Amy Schwartz    aschwartzl@yahoo.com            +1-566-391-4136
Ronald Elliott  elliottronaldr@wellsfargo.com   557-470-1277
Cruz Hoffman    hot.hoffman65@slack.com         (432) 491-2668

Same seed = identical output. Adding or removing fields does not change existing columns.

Install

brew install opendsr-std/tap/seedfaker         # CLI (macOS / Linux)
cargo install seedfaker                        # CLI (from source)
npm install -g @opendsr/seedfaker-cli          # CLI (npm)
pip install seedfaker                          # Python
npm install @opendsr/seedfaker                 # Node.js
npm install @opendsr/seedfaker-wasm            # Browser (WASM)
go get github.com/opendsr-std/seedfaker-go     # Go
composer require opendsr/seedfaker             # PHP
gem install seedfaker                          # Ruby

What it does

Generation

200+ fields across 17 groups with modifiers, ranges, and transforms. 68 locales with native scripts:

$ seedfaker phone:e164 amount:usd credit-card:space -n 3 --seed readme --until 2025
+47412578114     $793.66   3715 236662 87984
+3118148237758   $123.30   4174 0785 8323 6433
+4901707888425   $473.87   3736 553912 88602

$ seedfaker name -l be --abc native -n 3 --seed readme --until 2025
Лявон Леўшкін
Валянціна Асіпенка
Камілія Анікееў

$ seedfaker name -l ja --abc native -n 3 --seed readme --until 2025
石本 和彦
楠木 康夫
川田 朋恵

Data quality

--ctx strict locks all fields in a record to one identity — email follows name, phone matches locale:

$ seedfaker name email phone --ctx strict --locale en -n 3 --seed docs --until 2025
Eric Martin       eric.martin.xxy@okta.com         498-944-8646
Rayyan Shelton    scroll.rayyan7721@aol.com         584-542-1839
Kimberly Harvey   kimberlyloot03@aol.com            439-347-4269

--corrupt corrupts values — OCR errors, mojibake, truncation, field swaps:

$ seedfaker name email --corrupt mid -n 5 --seed demo --until 2025
Paulina Laca                                    im.ivana@eunet.rso6Wzw
Irene MichaelidesFmfL Irene MichaelidesFm fL    sigitas.staniulis@protonmail.com
Elv!ra C@stro Gonz@13z                          imhannes@omv.com

Workflows

Expressions — arithmetic between columns:

$ seedfaker price=amount:1..500:plain qty=integer:1..20 "total=price*qty" --seed shop --format csv -n 5 --until 2025
price,qty,total
424.49,14,5942.86
459.67,3,1379.01
309.44,12,3713.28

Templates — free-form output with conditionals and loops:

$ seedfaker name email -t '{{name}} <{{email}}>' --seed demo -n 3 --until 2025
Paulina Laca <im.ivana@eunet.rs>
Irene Michaelides <sigitas.staniulis@protonmail.com>
Elvira Castro Gonzalez <imhannes@omv.com>

13 presets for common formats. Replace PII in existing data. Stream to pipes:

seedfaker run nginx -n 0 --rate 5000 --seed demo | kafka-console-producer --topic logs
seedfaker name email --format sql=users -n 10000 --seed ci --until 2025 | psql mydb

Determinism

Each field is independently derived from (seed, record_number, field_name). Adding field B does not change field A. Output format does not affect values.

--until defaults to current time. Pin it with --seed for reproducibility:

seedfaker name email --seed demo --until 2025 -n 3
# Paulina Laca    im.ivana@eunet.rs
# Run again — same output. Change seed — different output.

A warning is printed when --seed is set without --until (suppress with -q). See determinism.

How it compares

| | Traditional faker | seedfaker | | -------------- | ------------------ | ------------------------------------------------------------ | | Determinism | Random by default | Byte-identical with --seed | | Correlation | Fields independent | Email follows name, phone follows locale | | Distribution | Uniform | Realistic (names from dictionaries, tiered amounts) | | Data quality | Always clean | 15 corruption types, 4 levels | | Scale | Library calls | CLI streaming, configs, SQL/CSV/JSONL/template | | Cross-language | Language-specific | Same output: CLI = Python = Node.js = WASM = Go = PHP = Ruby |

Performance

Rust core, native bindings (PyO3, NAPI, FFI, WASM).

| Runtime | 3 fields | 10 fields | 20 fields | | ------------- | -------- | --------- | --------- | | CLI (100K) | 0.049s | 0.142s | 0.304s | | Python (10K) | 0.010s | 0.028s | 0.058s | | Node.js (10K) | 0.015s | 0.064s | 0.194s |

Per-field benchmarks · CLI tiers · vs competitors · uniqueness

Documentation

| | | | ---------------- | ------------------------------------------------------------------------------------------------- | | Start here | Quick start | | CLI | Commands and flags · Determinism | | Fields | Syntax and modifiers · Full reference | | Configs | YAML configs · Presets · Expressions | | Output | Templates · Annotated · Streaming | | Data quality | Context · Corruption · Replace | | Integrations | Library (Python, Node.js, Go, PHP, Ruby, Browser/WASM) · MCP |

Safety

Generated data is synthetic. Not for authentication, identity verification, or compliance. Passwords are deterministic — never use them for real authentication. See password modifiers.

License

MIT

View on GitHub
GitHub Stars14
CategoryData
Updated7h ago
Forks0

Languages

Rust

Security Score

80/100

Audited on Apr 10, 2026

No findings