12 releases

0.2.8 Apr 3, 2024
0.2.7 Mar 25, 2024
0.2.3 May 15, 2023
0.2.2 Jul 20, 2021
0.1.2 May 31, 2021

#287 in Database interfaces

Used in spawnflake-cli

MIT license

1.5K SLoC

a pixel fish Spawnflake Rust

Spawnflake is a schema agnostic, random and/or patterns based data generator, for MySQL databases.

what's new

See CHANGELOG for updates and new features.


This library works by providing a configuration file (config.json). The configuration is divided into two sections.

connection properties (mandatory)

 "mysql_configuration": {
        "address": "localhost",
        "port": 3306,
        "user": "local",
        "password": "password",
        "schema": "test"

type patterns (optional)

 "types": {
        "string": [
                "name": "column_name",
                "rules": []
        "integer": [
                "name": "column_name",
        "float": [
                "name": "column_name",


  • Rules for numeric types and dates just desired ranges (from, to). Important!! the small values need to be first in the lists.
  • Rules for strings are combinatinatory, you provide collections that are mixed and matched. i.e.
   "rules": [

This could create real names like David but also complete random combinations like Jophack

known limitations

  • When handling cyclic dependencies, keys are not currently updated retrospectively. This feature is planned for a future version
  • If a foreign key is unique, fewer records will be inserted into that table. Unique foreign key values are not supported yet.
  • In certain cases, number validation in the configuration is not performed, records assosiated with problematic tables cloud be
    • skipped
    • panic
    • use default values depending on a case by case basis.


Database support


  • supported data types and generators:
Datastore Data type Random Pattern
Mysql varchar ✔️ ✔️
Mysql int ✔️ ✔️
Mysql unsigned int ✔️ ✔️
Mysql smallint ✔️ ✔️
Mysql unsigned smallint ✔️ ✔️
Mysql tinyint/unsigned tinyint ✔️ ✔️
Mysql mediumint ✔️ ✔️
Mysql bigint ✔️ ✔️
Mysql unsigned bigint ✔️ ✔️
Mysql decimal ✔️ ✔️
Mysql float ✔️ ✔️
Mysql double ✔️ ✔️
Mysql bit ✔️
Mysql time ✔️ ✔️
Mysql timestamp ✔️ ✔️
Mysql date ✔️ ✔️
Mysql year ✔️
Mysql char ✔️
Mysql binary ✔️
Mysql text ✔️
Mysql longtext ✔️
Mysql blob/longblob ✔️
Mysql enum ✔️


The main project in this repository is a library, but there is also a CLI version available published in crates.io. The code for the CLI is available at ./cli. Check README for usage and more information.

Running the example

Running the example requires running docker-compose inside the test folder. Make sure you have

  • Docker
  • An SQL client/ or a way to access the MySQL cli to view the generated records

To run the example execute

cargo run --example generate_mysql


You are more than welcome. All you need to do is a pull request


~549K SLoC