vitisstudio/filament-header-schema
Build Filament page headers with a schema-based API. Compose titles, actions, breadcrumbs, and custom header content consistently across resources and custom pages, cutting boilerplate and keeping headers clean, reusable, and easy to maintain.
headerSchema() alongside the Forms, Tables and Infolists the team already composes. Frame it as a standardization decision, not a capability one: Filament can already render these headers, just inconsistently and with more boilerplate each time.Adopt when all of these hold:
headerSchema() reads as native next to the rest of the panel.@container queries against a named fi-hs-header container — the header answering its own width rather than the window — is the right fix and exactly what you would never get around to building yourself.Look elsewhere, or hand-roll, when:
40rem and 64rem of container width and adding a wrapper element. Budget a visual QA pass per upgrade.Adoption cost: low integration effort, moderate diligence. No data layer, no migrations, no auth surface — the failure domain is one rendered region per page. But nine stars and zero dependents means the README is not a substitute for reading the source.
To executives: Our admin panel has accumulated several hand-built page headers that each do roughly the same job slightly differently. This package lets us declare a header the same way we already declare forms and tables, so we get consistency without commissioning a design project. It is MIT-licensed, small and free — the cost is a few days of integration and a small ongoing maintenance line item, not a contract. Risk is low and bounded: it is presentation-layer, so removing it means reverting one region of a page to Blade, not re-architecting anything. Fund it as hygiene, not as a feature.
To engineering: Schema-driven Filament page headers instead of Blade views — headerSchema() alongside the existing getHeaderActions(), composed the way you already compose forms. v1.1.0 wraps the header in a named inline-size container and moves layout rules to @container queries, so the actions row responds to the header's own width rather than the window; this fixes the case where an open sidebar squeezes the heading until it wraps mid-word. No API changes on upgrade, with two cosmetic notes: one extra wrapper element (check any sibling-position CSS or tests), and headers between 40rem and 64rem of container width now stack where they sat side by side. Known open item: HeaderSection's own ->from() breakpoints are still media queries against the window — the same class of bug, one level down, deliberately deferred. Integration is incremental and reversible per page; start with one rich header, keep the old Blade partial until it has shipped for a sprint, and only standardize house conventions after two or three conversions. Pin the version, verify the Filament and Tailwind constraints in composer.json, and plan on vendoring it if upstream stalls.
How can I help you explore Laravel packages today?