Vague Language
Quick Start
schema Invoice {
id: unique int in 1000..9999,
status: "draft" | "sent" | "paid",
total: decimal in 100.00..5000.00,
line_items: 1..5 of LineItem,
tax: round(total * 0.2, 2),
assume total > 0
}
dataset TestData {
invoices: 100 of Invoice
}
Core Syntax
- Types:
string, int, decimal, boolean, date
- Superposition:
"a" | "b" or weighted 0.7: "a" | 0.3: "b"
- Ranges:
int in 1..100, date in 2020..2024
- Collections:
1..5 of Item or 100 of Item
- Let bindings:
let statuses = "active" | "pending" (reusable values)
- Computed:
total: sum(items.amount), median(), first(), last(), product()
- Constraints:
assume due_date >= issued_date
- Refine:
} refine { if type == "A" { field: int in 1..10 } }
- Match:
match status { "a" => "Alpha", "b" => "Beta" }
- References:
any of companies where .active == true
- Parent ref:
= ^parent_field
- Nullable:
string? or string | null
- Unique:
id: unique int in 1..1000
- Private:
age: private int (generated but excluded from output)
- Ordered:
[48, 52, 55, 60] (cycles through values)
- Conditional:
field: string when condition (field only exists if condition is true)
Reference Files
- references/syntax.md - Complete syntax
- references/functions.md - Built-in functions
- references/plugins.md - All plugins (Faker, Issuer, Regex, Date, HTTP, SQL, GraphQL)
- references/cli.md - CLI usage
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: vague-23description: Use when writing Vague (.vague) files - a declarative language for generating realistic test data with superposition, constraints, and cross-references4---56# Vague Language78## Quick Start910```vague11schema Invoice {12 id: unique int in 1000..9999,13 status: "draft" | "sent" | "paid",14 total: decimal in 100.00..5000.00,15 line_items: 1..5 of LineItem,16 tax: round(total * 0.2, 2),17 assume total > 018}1920dataset TestData {21 invoices: 100 of Invoice22}23```2425## Core Syntax2627- **Types**: `string`, `int`, `decimal`, `boolean`, `date`28- **Superposition**: `"a" | "b"` or weighted `0.7: "a" | 0.3: "b"`29- **Ranges**: `int in 1..100`, `date in 2020..2024`30- **Collections**: `1..5 of Item` or `100 of Item`31- **Let bindings**: `let statuses = "active" | "pending"` (reusable values)32- **Computed**: `total: sum(items.amount)`, `median()`, `first()`, `last()`, `product()`33- **Constraints**: `assume due_date >= issued_date`34- **Refine**: `} refine { if type == "A" { field: int in 1..10 } }`35- **Match**: `match status { "a" => "Alpha", "b" => "Beta" }`36- **References**: `any of companies where .active == true`37- **Parent ref**: `= ^parent_field`38- **Nullable**: `string?` or `string | null`39- **Unique**: `id: unique int in 1..1000`40- **Private**: `age: private int` (generated but excluded from output)41- **Ordered**: `[48, 52, 55, 60]` (cycles through values)42- **Conditional**: `field: string when condition` (field only exists if condition is true)4344## Reference Files4546- [references/syntax.md](references/syntax.md) - Complete syntax47- [references/functions.md](references/functions.md) - Built-in functions48- [references/plugins.md](references/plugins.md) - All plugins (Faker, Issuer, Regex, Date, HTTP, SQL, GraphQL)49- [references/cli.md](references/cli.md) - CLI usage5051---52> Converted and distributed by [TomeVault](https://tomevault.io/claim/mcclowes) — claim your Tome and manage your conversions.53<!-- tomevault:4.0:skill_md:2026-04-13 -->