Real Fake Data
Insert realistic synthetic test data straight into your editor — valid national identifiers, VAT
numbers, IBANs, addresses, companies and people across 27 EU countries, the United States and
Canada. Output looks real; nothing behind it is.
Backed by the Real Fake Data API. No account needed to start —
requests run on the anonymous lane until you add a key.
Two ways to use it
A value at the cursor. Ctrl+Shift+P → Real Fake Data: Generate…, pick one of 326
generators, and the record lands where you were typing.
A whole dataset. Describe the shape your app expects in a .rfd.json file and get it back
filled — nested objects, arrays, foreign keys that line up, dates in order.
Generating single values
| Command |
What it does |
Real Fake Data: Generate… |
Pick from every generator the API offers |
Real Fake Data: Generate UUID |
A UUID, no picker |
Real Fake Data: Generate Person |
A whole person record |
Real Fake Data: Generate Email |
An email address |
Real Fake Data: Generate Lorem Ipsum |
One paragraph |
Real Fake Data: Regenerate Last |
Run the last call again for a different value |
The generator list comes from the API itself, so a generator added there shows up here without an
update. Regenerate Last is worth a keybinding — press it until a value reads well.
Insertion follows your cursors: with three cursors and three records, each cursor gets its own.
Presets
A preset pins a generator, its parameters, and the one field you want inserted.
// .vscode/settings.json
{
"realFakeData.presets": {
"plate": {
"generator": "de/vehicle-registration",
"params": { "district": "M" },
"extract": "value"
}
}
}
Real Fake Data: Run Preset… → plate inserts M AB 1234 rather than the whole
{ value, type, district, state, city } record. Bind one to a key with its name as the argument:
{ "key": "ctrl+alt+c", "command": "realFakeData.runPreset", "args": "plate" }
Presets in .vscode/settings.json travel with the repo; presets in your user settings follow you
everywhere. uuid, person, first-name, email and lorem ship built in — define one of those
names yourself and yours wins.
Don't write them by hand: generate something, then run
Real Fake Data: Save Last Generation as Preset…. It writes the entry and opens the file with the
cursor on it.
Project-wide defaults
Same shape as a preset, but applied on every call — the picker, any preset, and Regenerate
alike.
{
"realFakeData.generatorDefaults": {
"any.offering": { "params": { "countries": "pl,de,fr" } },
"any.email": { "extract": "value" }
}
}
"In this project, offerings only come from Poland, Germany and France, and I only ever want the
email address itself." What a preset states explicitly still wins.
Seeding a whole dataset
Real Fake Data: New Schema File opens a working example. Save it as anything ending .rfd.json.
{
"$generators": {
"author": { "generator": "any.person-name" }
},
"id": "$generator.any.uuid.value",
"firstName": "$alias.author.name",
"lastName": "$alias.author.surname",
"status": "active",
"posts": {
"$count": 2,
"id": "$generator.any.nanoid.value",
"publishedAt": "$date.-30d~+0d.day"
}
}
You own the field names and the nesting. Anything starting with $ is filled in; everything else
passes through untouched. firstName and lastName describe the same person because both read
from one alias.
Press the ↻ button (or Real Fake Data: Reseed) and the data opens beside the file. Edit, reseed,
look again.
| Command |
What it does |
Real Fake Data: Reseed |
Fill the schema and show the result beside it |
Real Fake Data: Reseed Preview (count ≤ 2) |
Same, with every $count capped — check the shape cheaply |
Real Fake Data: New Schema File |
Start from a working example |
Real Fake Data: Compose Documentation |
Open the full grammar guide |
The file holds the shape, not the request: dates work without configuring anything, and the whole
document is sent as one call.
While you type
.rfd.json files get completion and validation from the live API:
$ offers the four sources; $generator. offers every generator id
- a completed id plus
. offers that generator's actual response fields
$alias. and $shared. offer the names your document declares
- unknown ids, fields and aliases are underlined as you type, before you spend anything
Not spending more than you meant to
Compose is billed per draw, and nested counts multiply — $count: 100 around a node with
$count: 50 is 5,000 records.
- a
$count over 100 is flagged as a warning
- a reseed estimated over 1,000 draws asks first, naming the cost
Reseed Preview caps every count at 2, so checking the structure is nearly free
Your API key
Optional. Without one, requests use the anonymous lane and everything works — edge cases, invalid
values, extreme encodings, compose. Add a key with Real Fake Data: Set API Key… to lift calls onto
your own plan.
The key goes into VS Code's secret storage, not into settings.json, so it never lands in a
committed dotfile.
One exception: custom-regex generation requires a free account, for an audit trail rather than for
revenue.
Settings
| Setting |
Purpose |
realFakeData.presets |
Named generator calls, run on demand |
realFakeData.generatorDefaults |
Standing settings applied to every call |
realFakeData.baseUrl |
Point at a different API — a local one, say |
Links
Also available as an MCP server for
AI assistants and as Playwright fixtures.
This repository is auto-generated from a private upstream monorepo. Open
issues here, but code changes are made upstream and re-synced — pull
requests against this repo are applied upstream, not merged directly.