Write one field and generator per line, then choose the record count and JSON or CSV output. Reuse the same template and seed to reproduce a test fixture.
Runs locally in your browserOne field per line: fieldName: generator. Use a seed when you need the same example data again.
fullName, email, uuid, url, word, sentence(8), isoDate, boolean, integer(1,99), decimal(0,1), enum(red,blue), and array(word,3).
A seed makes output repeatable; leave it blank to use a one-time browser seed. This generator is intended for fixtures, demos, and test data—not production identities.
Generate fixtures to preview JSON or CSV here.
Downloads are created from a local browser Blob. No fixture content is uploaded to VoriTools.
Use the output for UI states, API examples, contract tests, or a quick import into the JSON → Code tool. Keep real customer names, emails, and tokens out of test fixtures.
One field per line, written as fieldName: generator. The page turns that list into records — JSON for an API sample or a request body, CSV for a spreadsheet or a database import — and names the line that is wrong instead of returning a partial file.
A seed fixes the whole value stream: the same template, seed and record count produce a byte-identical file, and raising the count later leaves the records you already pasted into tests unchanged.
The template accepts thirteen generators: fullName, email, uuid, url, word, sentence, isoDate, boolean, integer, decimal, enum, array and ip. Names are case-insensitive, and brackets are optional where a generator takes no arguments — uuid() and uuid are the same call.
The brackets carry the rules. integer() defaults to 0–100 and refuses a maximum below its minimum; decimal() behaves the same but rounds every value to two decimal places, so decimal(0,0.01) can only ever return 0 or 0.01. sentence() defaults to 8 words and clamps its argument to 1–40. array(generator,count) needs exactly two arguments and produces at most 100 items. enum() needs at least one non-empty option, and since options are separated by commas an option cannot contain a comma itself.
The seed is hashed into the random stream, so the same seed always replays the same values: eight records generated today and eight records generated tomorrow are identical character for character. Leave the seed empty and the page mixes the clock with Math.random, which is right for a one-off demo and wrong for a fixture that a test asserts against.
Two details decide whether a fixture stays stable. Field order is part of the stream, so moving a field or inserting one in the middle changes every value after it — append new fields at the end instead. The record count is not part of the stream: five records now and fifty later, same seed, leave the first five untouched.
email and url only ever use the reserved domains example.test, demo.invalid and fixture.local, so a generated address cannot be delivered; ip keeps the first octet at or below 223 and never ends in 0 or 255, which stays inside the range a parser accepts as a unicast host address.
The template, the seed and the records stay in the tab: a run with a marker string in both template and seed sends no request carrying it, and the only outbound traffic the page produces is the site’s own analytics beacon, which never sees the fixture. The values are still placeholders — production identities and real customer records belong in your own data.
JSON is a pretty-printed array with two-space indentation, ready to paste into a request body or a fixture module. CSV starts with a header row of the field names and quotes every cell; an array() field is written as JSON inside its cell, with the quotes doubled the way RFC 4180 requires.
Changing Output reformats the rows already on screen instead of generating new ones, so the JSON you were reading becomes the matching CSV with identical values. Volume is no obstacle: 5,000 records of five fields take about 0.2 seconds and roughly a megabyte, and the download is built from a local Blob named kivtools-mock-data.json or kivtools-mock-data.csv.