Go-powered CLI and library for generating fake/test event data based on structured templates and inline modifiers.
- CLI and library mode (
ducto-faker) for streaming newline-delimited fake records - YAML/JSON-based config with template path resolution (relative to config)
- Mustache-compatible templating with inline modifiers:
{{ "field:type:min=1:max=10" }} - Supports:
- Primitive types:
int,float,uuid,datetime - Enums:
status,severity, etc. - Faker data:
first_name,last_name,phone,address_line1,postcode,country,zip_us
- Primitive types:
- Custom types and reusability via top-level
custom_types - Weighted sampling between multiple templates
- JSONL output streamed to
stdoutfor easy piping into files or other services - 100% unit test coverage, clean Go idioms, fully testable components
- Fully MIT licensed
# Install
go install github.com/tommed/ducto-faker/cmd/ducto-faker@latest
# Run from config
ducto-faker -config sample.yaml > output.jsonl
# Pipe into another process
ducto-faker -config sample.yaml | ducto-orchestrator -config orchestrator.yml{
"id": {{ "user_id:uuid" }},
"first_name": {{ "first_name" }},
"status": {{ "status:enum:values=ACTIVE,INACTIVE" }},
"score": {{ "score:float:min=0:max=10:dps=2" }},
"created": {{ "created:datetime:min=2021-01-01T00:00:00Z:max=2022-01-01T00:00:00Z" }}
}total_records: 1000
custom_types:
status:
type: enum
values: 'OPEN,CLOSED,UNKNOWN'
templates:
- path: templates/login.json.mustache
weight: 60
- path: templates/logout.json.mustache
weight: 40- See the specification document for full syntax and implementation details.
- All specifications are available here.
Pull requests are welcome! Please see our Contributing Guide.
- ducto-dsl — Declarative transformation engine
- ducto-featureflags — Pluggable feature flag engine
- ducto-orchestrator — Event-driven transformation runtime
- MIT licensed — see LICENSE
- The Ducto name, logos and robot illustrations are © 2025 Tom Medhurst. All rights reserved.