Filament Fakester
A Filament plugin that fills form fields with sensible fake data in development, one click per field.
- Role
- Author
- Team size
- 1 person
- Timeline
- May 2026 — present
- Status
- Live
The problem
Testing a form with twelve fields means typing into twelve fields, and then doing it again after every schema change. Faker solves this for seeders and never solved it for the form you are actually looking at.
A small itch, scratched properly
This package does one thing and the whole design question was where to put it. The obvious answer — a Filament plugin you register on a panel — is worse than it looks, because half the forms in a real application are not inside a panel. Registering against the form component instead means the install is `composer require --dev` and nothing else.
composer require iammuttaqi/filament-fakester --devThe resolver reads the field name and the input type and picks something that fits: `email` gets an email, `phone` gets a phone number, `latitude` gets a real coordinate, `slug` gets a slug. It is a lookup table with fallbacks, not a clever system, and the clever version would be harder to predict without being more useful.
Safe by default
Nothing renders in production unless you explicitly set FAKESTER_ENABLED. A development tool that can leak into production is not a development tool.
Architecture decisions
Register through Laravel package discovery rather than as a Filament panel plugin
Why · A panel plugin only works inside a panel. Hooking the form component itself means the button appears anywhere a Filament form renders — inside a panel, inside a standalone Livewire component, it does not matter. Install and it works; there is nothing to wire up.
Trade-off · Less control over where it shows up, which is why the config exists.
Resolve values from the field name first, the HTML input type second
Why · A field called `email` should produce an email whether or not anyone set `type="email"`. Names carry more intent than types in practice, so names win and types fill the gaps.
Trade-off · A heuristic, and heuristics are wrong sometimes. Being wrong costs one click in development.
Disabled in production by default, via `! app()->isProduction()`
Why · The failure mode of the opposite default is a sparkles button in a customer's admin panel. Anyone who genuinely wants it on can flip `FAKESTER_ENABLED`.
What broke, and how it was fixed
Filament renders several different text-like components, and a plugin that only handled `TextInput` would be missing most of the form.
Extended the hint action across `TextInput`, `Textarea`, `RichEditor` and `MarkdownEditor`, so the button turns up on everything that takes prose.
Outcomes
- Packagist downloads
- 75
- Since the first release
- Install command
- --dev
- Never ships to production
Keep reading
Gymscanner
Global platform for booking gym memberships, tourist passes and personal training sessions across 100+ cities.
Aurora
Product authenticity platform: manufacturers and shops get verified, every unit gets a serial number and a QR code, and buyers can check the chain themselves.