illuminate/html
HTML and Form helpers for Laravel, offering convenient Blade methods for building forms, inputs, links, and other HTML elements. This legacy package was part of Laravel 5 but is no longer maintained; for newer projects use Laravel Collective HTML or native Blade components.
What it is. illuminate/html is the read-only subtree split of Laravel 4's HTML and Form helper component (Illuminate\Html\HtmlBuilder, FormBuilder, and their facades). It is not an independent library with its own roadmap — it is a build artifact of laravel/framework, published so Laravel 4 applications could pull individual components. It was removed from core in Laravel 5 and superseded by the community fork laravelcollective/html.
Architecture fit. The package assumes a Laravel 4-shaped container: a service provider that binds html and form singletons, facades resolved through Illuminate\Support\Facades\Facade, URL generation via Illuminate\Routing\UrlGenerator, CSRF token handling via Illuminate\Session, and aggregate illuminate/support/illuminate/session constraints. It is a thin, view-layer convenience library — it builds strings, it does not own persistence or business logic. That makes it architecturally low-risk to remove and low-value to keep, which is the central fact for a build-vs-migrate decision.
Integration feasibility. Effectively zero for a greenfield or modern-Laravel codebase, and moderate for a legacy Laravel 4 estate. Composer will not resolve it against current illuminate/* versions because the split branches are pinned to 4.0.x/4.1.x/4.2.x. The practical install path on Laravel 5–8 is laravelcollective/html (near drop-in; namespace shifts from Illuminate\Html to Collective\Html, facade aliases updated in config/app.php). On Laravel 9+ the honest answer is that no maintained equivalent exists, and the correct target is native Blade (@csrf, route(), old(), <x-…> components).
Technical risk: high.
<form>/<script>/<style> tags. Escaping regressions here are XSS vectors, and form-token mismatches are outage-class failures.Key questions to resolve before committing:
composer.json today?Html::/Form:: (including Form::model, Form::select, HTML::script, HTML::style, HTML::ul)? Is it 20 or 2,000? This drives the entire estimate.Html::macro()/Form::macro()? Custom macros are the long tail of any migration and are invisible to a naive grep.Form::model() binding and its automatic field repopulation? That behavior has no one-line Blade equivalent.assertSee('<form'))? Those tests become migration work.Recommendation. Treat as a retire-and-replace dependency, not an adopt-and-extend one. Do not introduce it into new code under any circumstance. If it is already present, scope a removal project rather than a version bump.
Stack fit. The package only fits a Laravel 4 stack, where it is redundant (already in core) rather than additive. There is no stack where adding illuminate/html is the right call. The realistic integration scenarios are (a) inheriting it inside a legacy Laravel 4 app, or (b) deliberately pinning laravelcollective/html as the interim bridge on Laravel 5–8.
Compatibility matrix (target state per platform):
| Platform | Path | Status |
|---|---|---|
| Laravel 4.0–4.2 / PHP 5.3–5.6 | In core; split package redundant | Legacy, unsupported runtime |
| Laravel 5.x–8.x / PHP 7.x | laravelcollective/html, namespace Collective\Html |
Bridge only; shrinking maintenance |
| Laravel 9–12 / PHP 8.1+ | Native Blade: @csrf, @method, route(), old(), @error, anonymous components |
Supported target |
Migration path. Use a strangler pattern rather than a big-bang rewrite:
Html::/Form::/HTML:: and all *::macro registrations; classify each call site as trivial (link, script, style), moderate (input, select, textarea), or hard (Form::model, custom macros, dynamic attribute arrays).laravelcollective/html first — a near-mechanical namespace change that buys time and removes the archived-package liability from the dependency graph immediately.old()/route() helpers, hardest-first, with markup-diff tests as the safety net.Sequencing dependencies. The PHP upgrade is the forcing function — do the runtime upgrade and this removal in the same workstream, because a PHP 8 move almost certainly breaks this package anyway. Land the namespace bridge before the PHP bump (it is cheap and reversible), and the Blade conversion after or in parallel with it (it is the expensive, one-way step). Schema/middleware changes are not involved, which keeps blast radius contained to views and controllers.
Estimation shape. Cost is dominated by call-site count and macro count, not by technical difficulty — the replacements are well-documented and low-ambiguity. Expect the hard 10–15% of call sites (model binding, custom macros) to consume roughly half the effort.
Maintenance. Zero. Archived and read-only means no commits, no releases, no issue triage. Budgetting "maintenance" for this package is budgeting for nothing; the real cost is the unaddressed technical debt it represents and the eventual forced migration, which grows more expensive the longer the surrounding framework advances.
Support. No vendor, no maintainer, no security advisory channel. If a vulnerability is found in how it escapes attributes or emits CSRF tokens, there will be no patch, no CVE coordination, and no notification — the team learns via incident. Internal support burden falls entirely on whoever last touched the code, which is a bus-factor problem: the engineers who knew Laravel 4 idioms have likely rotated off.
Scaling. Not a concern. The component is stateless string assembly with negligible CPU and memory footprint; it will not be a throughput bottleneck at any realistic traffic level. The scaling risk is organizational, not infrastructural: it constrains the ability to upgrade PHP, adopt a supported Laravel LTS, and hire — the pool of engineers fluent in Laravel 4-era form helpers is effectively empty.
Failure modes to plan for.
illuminate/html and laravelcollective/html, or duplicated Html/Form aliases, produces confusing "class not found" or wrong-binding behavior.Ramp-up. Low for anyone who knows Blade — the helper API is small and discoverable. The cost is not learning it, it is unlearning the need for it and recognizing that the modern equivalents are more verbose but safer. Plan for roughly half a day of onboarding per engineer plus a written migration guide with before/after examples, and pair the guide with the CI grep gate so the convention is enforced rather than merely documented.
Bottom line for the roadmap. Carry this as a named remediation item with an owner and a target quarter, tied to the next PHP or Laravel upgrade. The cheapest moment to remove it is now; the cost curve only steepens.
How can I help you explore Laravel packages today?