Skip to content
All work
LiveMay 2026 — present· open-source

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.

bash
composer require iammuttaqi/filament-fakester --dev

The 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

LiveAug 2021 — present

Gymscanner

Global platform for booking gym memberships, tourist passes and personal training sessions across 100+ cities.

LaravelLivewireFilament +6
LiveJun 2023 — Jul 2026

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.

Laravel 13PHP 8.4Filament 5 +7