awcodes/html-faker
A Laravel package that adds HTML-aware fake data generators to Faker, letting you seed tests and demos with realistic markup—headings, paragraphs, lists, links, and more—instead of hand-written placeholder HTML.
Fixture strategy for any surface that renders stored markup. If the roadmap touches a WYSIWYG editor, CMS content blocks, email/notification templates, or any Blade view that renders HTML from the database, the team needs realistic markup to test against. This package is a candidate for replacing hand-written <p> tags in seeders and tests. The decision it informs is a resourcing/quality one — "do we standardize a fixture generator, or keep hand-rolling?" — not a customer-facing feature call.
Build vs. borrow vs. vendor, resolved toward "vendor." Three live options exist: (a) add it as require-dev and inherit a frozen, unowned dependency; (b) copy the FakerPHP provider into tests/Support or app/Support with attribution and own it; (c) do nothing and keep plain-text Faker. Given it is MIT-licensed, a few hundred lines, archived, and pre-1.0, option (b) is the defensible default. You keep the logic, drop the supply-chain and abandonment risk, and gain room to add domain-specific blocks (product cards, pricing tables, testimonial modules) that a generic generator will never ship.
A concrete precedent for dev-dependency governance. Eleven stars, zero dependents, archived, pre-1.0 — this is a clean worked example for a standing rule: what bar must a dev-only dependency clear? Making that explicit ("archived packages are acceptable only when vendored, pinned, or wrapped behind one seam with a named owner") is worth more than this package itself, because it will govern every future test utility the team wants to pull in.
Separating test data from demo data — two budgets, two owners. When someone asks for "realistic demo content" for sales demos, onboarding sandboxes, or customer-visible staging, that is a curated, semi-permanent product asset with its own budget. This package is not the answer for that. It is the answer for ephemeral, internal, disposable fixtures. Forcing that distinction out of a small tooling evaluation is a legitimate outcome.
Engineering-enablement prioritization. It justifies a small, time-boxed investment (roughly 1–2 engineer-days once, plus half a day for the wrapper) in fixture and seeder tooling to raise QA velocity. It does not justify a roadmap line item and should never appear in planning materials as a customer-facing capability.
Consider it when:
composer.json.Look elsewhere (or don't adopt) when:
For executives — the one-paragraph version:
This is a tiny, MIT-licensed developer utility that generates realistic fake HTML for testing and seeding. It is not a product feature, not customer-facing, and not a line item. It is a candidate for a small, time-boxed internal tooling investment to make content-rendering work — WYSIWYG editors, CMS blocks, email templates — cheaper to test. Its practical value is modest and its risk profile is manageable only if we adopt it as vendored code rather than as a live dependency, because the upstream repository is archived. Recommendation: do not add it to composer.json; instead, use it as a reference implementation for a small internal fixture helper we own, with a named owner and a one-file blast radius. The spend is measurable in engineer-days, not budget, and the downside is capped.
For engineering — the ask and the guardrails:
awcodes/html-faker to production dependencies. We are approving a spike (~half a day) to read the provider and adapt it behind a single HtmlFixture wrapper in tests/Support (or app/Support if seeders live in app code), then use it in one factory state on one body/longText column as the proof point.{!! !!} outside a local-gated preview route, and no assertions on exact generated strings (assert on structure or seed the generator — and remember fake()->seed() is global state that leaks across the suite).The one-line pitch: "A cheap, archived fixture generator we should read and own, not depend on — buys QA velocity on content-rendering work at a capped cost, and gives us a worked example for our dev-dependency policy."
How can I help you explore Laravel packages today?