Swift 6 · Apache-2.0 · no dependencies
Fake data you can
generate twice.
319 generators across 29 namespaces and 63 locales. Pick a number and you get the same people every time — on any machine, on any day.
.package(url: "…/decoy", from: "1.0.0")import Decoy
import DecoyLocaleEN
var faker = Faker(seed: 1337, locale: DecoyLocaleEN.locale)
faker.person.fullName() // "Ms. Marguerite Ledesma"
faker.location.streetAddress() // "537 Richard Crest"
faker.company.name() // "Hardy Corp"
faker.internet.email() // "angelo.diaz@example.com"
faker.person.jobTitle() // "Intuitive capability Producer"
The same number, the same people
Two knobs
A seed is just a number you choose. Decoy's randomness is deterministic, so the same number always makes the same choices — seed 1337 gives you these six people today, next year, on your laptop and in CI. Change the number, get a different six. That is what makes generated fixtures safe to rely on.
A locale changes the shape, not just the vocabulary. Watch the address column: English puts the number first, German puts it last, Japanese uses no spaces at all. Some locales fall back to English for some fields — the locale matrix says exactly which.
| № | name | address | city | company | phone |
|---|
Click any row — every value can name the licensed source it was drawn from.
Everything it generates
319 generators
Pick a namespace to see real output, or open its page for every method it has.
Invented, not sourced
Nobody owns these
Some namespaces are assembled from patterns rather than drawn from a real-world list, so the output is plausible without belonging to anyone. There is no pub called The Gecko & Atlas. That is the point: a fixture, a screenshot or a demo can use these without naming a business that has to live with it.
whimsy.pubName()- The Nimble Jackal
- The Old Spindle
- The Gecko & Atlas
- The Old Prism
whimsy.bandName()- The Umbral Panthers
- Copper Foothill
- The Orbital Dippers
- The Amber Cormorants
whimsy.codename()- Project Fleeting Hollow
- Operation Upright Dunlin
- Project Lucid Estuary
- Operation Endless Adder
whimsy.superheroName()- Keen Compass
- Earnest Ledger
- The Eager Ocelot
- Doctor Thicket
beverage.beer()- Willing Gannet Tripel
- Stoat Wheat Beer
- Earnest Sturgeon Wheat Beer
- Vivid Bittern Gose
sport.club()- Moor County
- Shoal Narwhals
- Tundra Urchins
- Harbour Athletic
whimsy.ssid()- Get Off My LAN
- Router? I Hardly Know Her
- Silence of the LANs
- Bill Wi the Science Fi
whimsy.boardGame()- Headland: Willing Spindle
- Rise of the Badgers
- Gannet & Cipher
- The Thicket Expedition
whimsy.talkTitle()- Zero-Downtime Cutovers and the Noble Tessera
- Observability: Lessons from Reef
whimsy.technobabble()- You cannot index the firewall without synthesizing the solid-state bus
- If we reboot the array, we can get to the mobile protocol through the back-end firewall
system.databaseError()- deadlock detected while waiting for ShareLock on transaction 41821
- canceling statement due to statement timeout
Seed a database
A million coherent rows. Rows are independent, so a run splits across tasks and resumes after a failure at the row it stopped on.
Guide →Use it in tests
Fixtures that read like real records and never change under you. When one fails, the seed in the message reproduces it exactly.
Guide →Describe a type once
Forge maps generators onto your own struct with key paths, and carries traits, uniqueness and one-to-many children.