Declare the shape. Vague handles the rest.
Describe structure, constraints, distributions, and relationships. Vague generates data that follows the rules.
- Weighted distributions:
0.8: "active" | 0.2: "inactive" - Constraints:
assume due_date >= issued_date - Cross-references:
any of customers where .status == "active" - Computed fields:
total: sum(line_items.amount)
schema Customer {
id: uuid(),
name: fullName(),
status: 0.8: "active" | 0.2: "inactive"
}
schema Invoice {
customer: any of customers where .status == "active",
amount: decimal in 100..10000,
issued_date: date in 2024..2024,
due_date: date in 2024..2024,
assume due_date >= issued_date
}
dataset TestData {
customers: 50 of Customer,
invoices: 200 of Invoice
}
The language core goes further than fixtures.
Vague exposes its lexer, expression system, schemas, constraints, and plugin hooks for specialized declarative languages.
Reqon uses that foundation to define durable API synchronization pipelines with validation, concurrency, scheduling, and resumable execution.
Explore ReqonA declarative language for fetching, transforming, validating, and storing API data.
Useful data, not random noise.
Generate realistic test data that respects your constraints and relationships.
Declarative schemas
Define the shape of your data once. Schemas describe structure, types, ranges, and constraints — Vague handles generation.
Realistic distributions
Express intent with weighted choices: 0.8: "active" | 0.2: "inactive". Statistical distributions like gaussian, poisson, and beta for realistic patterns.
Constraints that work
Hard constraints like assume due_date >= issued_date are enforced. Conditional constraints for complex business logic.
Cross-record references
Reference other records naturally: customer: any of customers where .status == "active". Build realistic relational data.
OpenAPI integration
Import schemas from OpenAPI specs. Validate generated data. Populate specs with realistic examples.
Edge-case testing
Built-in generators for Unicode exploits, SQL injection patterns, and boundary values. Generate constraint-violating data with violating datasets.