Documentation

Ghost Bakery turns a short YAML recipe into realistic fake data for testing, demos, and load simulation. Describe the shape of one record; the engine produces as many records as you ask for, in the format you choose.

DDRR recipe

A recipe is a YAML document with an output section and a list of fields. Each field has a type; the engine produces one value per record.

recipe.yaml
version: "1"
output:
  language: en       # en, pt, es, fr, de, it, …
  format: csv        # csv, json, tsv, xlsx, pdf, xml, yaml, sql
  quantity: 100
  options: { header: true }
fields:
  - { name: id, type: autoint, start: 1 }
  - { name: name, type: person }
  - { name: email, type: email }
  - { name: cpf, type: identifier, kind: cpf }
  - { name: created_at, type: date }

The output section

KeyMeaning
languageLocale for themed data (names, words, addresses). en, pt, es, fr, de, it, …
formatOutput encoding — see Output formats below.
quantityNumber of records to generate.
optionsFormat-specific switches, e.g. { header: true } for CSV/TSV.

Common field options

Every field takes a name and a type. Depending on the type, these extra keys apply:

OptionApplies toMeaning
min / maxnumeric, date typesInclusive bounds for the generated value.
precisiondecimalNumber of decimal places.
startautointFirst value of the auto-incrementing sequence.
valuesenumThe set of allowed values to pick from.
weightsenumOptional per-value probability weights.
kindidentifierWhich identifier to emit — see the Identifiers table.
formatcolorhex, rgb, rgba, hsl, cmyk.
countrypostcode, phoneLocale of the generated identifier.
nullableanyEmit an empty value for a fraction of records.

Field types

Numbers & dates

TypeProduces
autointAuto-incrementing integer (row number).
integerRandom integer within min/max.
decimalRandom floating-point number with precision.
booleantrue or false.
dateCalendar date, optionally bounded or in the past/future.
datetimeDate and time.
datetimePartA single part — year, month, day, hour, minute, second, nanosecond.
timezoneOffsetUTC offset in hours.
ageHuman age (0–100).

Text

TypeProduces
textLorem-ipsum words, sentences, paragraphs, quotes, or phrases.
enumA value chosen from your values list (optionally weighted).
templateA string built from a template with {placeholders}.
regexpA value matching a regular expression.
patternA value built from a token pattern (e.g. license plates, SKUs).

Identifiers

TypeProduces
uuid / uuidv4Random UUID v4.
ulidLexicographically sortable ULID.
mongodbObjectId24-character MongoDB ObjectId.
slugURL-safe slug of random words.
semverSemantic version, e.g. 2.14.7.
isbn / isbn10 / isbn13Book ISBN with valid check digit.
issnSerial ISSN.
identifierNational / tax ID selected by kind: cpf, cnpj (Brazil), ssn, ein (US), uuid, slug. All carry valid check digits.

Internet & network

TypeProduces
emailEmail address (optional domain).
usernameAccount handle.
phonePhone number (optional country).
url / httpUrlWeb URL.
domainName / hostname / fqdnDomain and host names.
ipv4 / ipv6 / ipIP address.
cidrCIDR network block.
macMAC hardware address.
portTCP/UDP port (1–65535).

Web & HTTP

TypeProduces
httpStatusHTTP status code.
httpMethodGET, POST, PUT, …
httpVersionHTTP/1.1, HTTP/2, …
userAgentBrowser user-agent string.
logLevelDEBUG, INFO, WARN, ERROR, TRACE.
jwtFake (unsigned) JWT token.

Geography & locale

TypeProduces
latitude / longitudeGeographic coordinate.
countryCodeISO country code, e.g. BR, US.
currencyCodeISO currency code, e.g. BRL, USD.
postcodePostal code (optional country).

Encoding, security & binary

TypeProduces
passwordRandom password.
hashHex/hash digest string.
base64Base64-encoded random bytes.
binaryRaw random bytes.
creditCardTest credit-card number (Luhn-valid, non-real).
colorColor in hex, rgb, rgba, hsl, or cmyk.

Structured & composite

TypeProduces
personA person bundle: first name, last name, full name, age, email.
contactA contact bundle: email, phone, street, city, country, postcode.
jsonA nested JSON object assembled from sub-fields.

Output formats

  • csv
  • json
  • tsv
  • xlsx
  • pdf
  • xml
  • yaml
  • sql

Credits

Credit usage depends only on volume — every field costs the same, no matter its type:

cost = (number of fields × number of records) + 10% processing

The 10% overhead is rounded up. You always see the exact estimate before a generation runs. See pricing for free-tier limits.

API

The same engine is available over HTTP with a JWT or API key. The OpenAPI 3.1 spec and interactive docs are served by the API service at /openapi.json and /docs.