Synth is an open-source, declarative data generator that turns a JSON specification into large volumes of realistic test data. Written in Rust and distributed under the Apache 2.0 license, it was created by London-based YCombinator startup OpenQuery and is now maintained in the shuttle-hq organization on GitHub, where the project has gathered more than 1,500 stars.
What Synth Solves
Most development teams improvise when they need realistic data: hand-written seed scripts, sampled copies of production, or one-off fixtures that drift out of sync with the schema. Synth replaces these with a single declarative model that lives in version control alongside application code. Once a schema file is committed, the same command produces consistent data on every developer machine, every CI run, and every staging environment, making integration testing, demos, and capacity experiments more reproducible.
Core Capabilities
- Declarative schema-as-code: A namespace is a directory of JSON files; each file declares a collection such as a
users array, with each field specifying its type, range, format, and relations to other collections. - Thousands of semantic types: Field generators are powered by the fake-rs crate and cover emails, names, addresses, phone numbers, credit card numbers, IBANs, dates, time series, and structured numerics with ranges and steps.
- Database-agnostic import and export: The
synth import command inspects an existing PostgreSQL, MySQL, or MongoDB database, infers primary and foreign keys, and writes a starter schema. synth generate writes output back to any of the same targets. - Cross-collection relations: Foreign key constraints and nested object hierarchies are expressible in the same JSON dialect, so generated data respects referential integrity across tables or collections.
Use Cases
- Anonymization: Swap sensitive production records for synthetic equivalents that preserve shape and distribution without containing real personal data, useful for support reproductions and analytics.
- Seeding: Populate a fresh schema for local development, automated tests, and CI so end-to-end tests always run against meaningful, consistent data.
- Load testing: Generate datasets much larger than current production volume to measure how queries, indexes, and infrastructure behave at scale.
Installation
Synth ships as a single CLI binary. On macOS and Linux, a one-line installer drops the executable into a writable bin directory; source builds and a Nix flake are also available. Because the tool reads and writes plain JSON, it composes naturally with existing pipelines: output can be piped through jq, redirected into fixture files, or written directly into a database through the built-in adapters.
Project Status
The most recent tagged release is v0.6.9 from November 2022. Active feature development has stalled as the shuttle-hq team has shifted focus to the Shuttle cloud platform. The repository remains public and open under Apache 2.0 with no paid tier or hosted service, but new official releases have been absent since late 2022. Teams adopting Synth should evaluate it as stable-but-unmaintained open-source software.