DSL Reference

Complete reference for the FakeDataDSL syntax.

Schema Definition

A schema starts with a name followed by a colon:

SchemaName:
  field1: type1
  field2: type2

Field Types

Basic Types

User:
  id: uuid              # UUID v4
  name: name            # Full name
  email: email          # Email address
  age: number(18..65)   # Number in range
  active: boolean       # True/false
  bio: text(100..500)   # Text with length range

Type Arguments

Many types accept arguments:

User:
  age: number(18..65)           # Range
  price: number(min: 10, max: 100)  # Min/max
  status: enum(active, inactive, pending)  # Enum values
  tags: array(text, 3..10)     # Array with element type and size

Nullable Fields

Add ? to make a field nullable:

User:
  middle_name: name?    # May be null
  nickname: text?       # Optional field

Optional Fields

Use optional modifier to omit fields sometimes:

User:
  phone: phone optional  # May be omitted

Comments

Use # for comments:

User:
  # Primary identifier
  id: uuid
  name: name  # User's full name

Behaviors

Behaviors modify how data is generated:

Schema-Level Behaviors

User:
  @latency 100ms        # Add 100ms delay
  @failure 5%           # 5% chance of failure
  id: uuid
  name: name

Field-Level Behaviors

User:
  id: uuid @latency 50ms
  name: name @failure 1%

See Behaviors Guide for details.

Arrays

Generate arrays of values:

User:
  tags: array(text, 3..10)           # 3-10 text items
  scores: array(number(0..100), 5)  # Exactly 5 numbers

Nested Objects

Use the object type for nested structures:

User:
  address: object(
    street: text,
    city: city,
    zip: postal_code
  )

References

Reference other schemas:

User:
  id: uuid
  name: name

Order:
  id: uuid
  user_id: reference(User, id)  # Reference User's id field

Custom Functions

Use custom functions for computed values:

User:
  id: uuid
  name: name
  slug: custom(:generate_slug)  # Custom function

Conditional Fields

Fields can be conditional:

User:
  is_admin: boolean
  admin_key: text if is_admin  # Only if is_admin is true

Multiple Schemas

Define multiple schemas in one file:

User:
  id: uuid
  name: name

Order:
  id: uuid
  user_id: reference(User, id)
  total: number(10..1000)

See Also