Hands-free test data generator for JDBC databases — Bloviate auto-discovers your schema, respects foreign keys, and fills tables (or CSV/TSV files) with realistic, reproducible data.
It generates from your schema, not from a copy of production — so the privacy story is simple and the data is reproducible by construction. Bloviate never touches production data, is deterministic by seed, and runs inside your JUnit/Testcontainers pipeline.
Full documentation, guides, and examples live at bloviate.io.
- Quick Start — install and fill a database or flat file
- Database Support — PostgreSQL, MySQL, MariaDB, CockroachDB, H2, SQLite
- Configuration — per-table/column control, distributions, seeds, parallelism
- Generators — registry, realistic data, composite keys, TPC-C
- Testing Integrations — JUnit 5 and Testcontainers
- File Generation — CSV, TSV, pipe-delimited
- Architecture — FK dependency DAG, topological fill, deterministic seeding, extension points
- Benchmarks — JMH micro-benchmarks and end-to-end fill throughput
- Why Bloviate — where it fits and how it compares
- Automatic schema discovery with foreign-key-aware fill ordering (topological sort)
- Deterministic by seed — same seed + schema ⇒ byte-identical data, even under parallel fills
- Per-column control and pluggable generators; realistic semantic values via Datafaker
- Parallel & partitioned fills for large datasets, with referential integrity preserved
- PostgreSQL, MySQL, MariaDB, CockroachDB, H2, SQLite, plus CSV/TSV/pipe flat-file output
- First-class JUnit 5 and Testcontainers integrations
See the full feature tour and guides on bloviate.io.
Requires Java 25+ and a JDBC-compatible database.
<dependency>
<groupId>io.bloviate</groupId>
<artifactId>bloviate-core</artifactId>
<version>LATEST</version>
</dependency>Bloviate is a multi-module build. bloviate-core is the dependency-free engine; the optional
integration modules (bloviate-junit, bloviate-testcontainers, bloviate-datafaker) pull in
their framework as a provided dependency. See the
Quick Start for module coordinates and the GitHub
Packages repository setup.
import io.bloviate.db.DatabaseFiller;
import io.bloviate.db.DatabaseConfiguration;
import io.bloviate.ext.PostgresSupport;
new DatabaseFiller.Builder(connection,
new DatabaseConfiguration(
5, // batch size
100, // records per table
new PostgresSupport(),
null // optional per-table configuration
))
.build()
.fill();More examples — per-column overrides, distributions, composite keys, parallel fills, flat files — are in the documentation.
Curious how Bloviate works under the hood — the foreign-key dependency DAG and topological fill ordering, the schema-identity seeding that makes data reproducible, and the Strategy/Registry/SPI extension points? The technical deep-dive (with diagrams) and the performance numbers now live on the site:
- Architecture — design, diagrams, extension points
- Benchmarks — JMH and end-to-end fill throughput
Contributions are welcome! See CONTRIBUTING.md for how to build the project, run the test suite, spin up local databases, and submit pull requests.
- The project targets Java 25 and uses TestContainers (so Docker is required to run the integration tests).
- Commit messages and PR titles follow Conventional Commits, which drives automatic semantic versioning.
The documentation site lives in website/ (Astro + Starlight), with the canonical
guide content under docs/.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions