awcodes/shout
Shout is a simple inline contextual notice component for Filament forms and infolists, essentially a styled placeholder for alerts and messages. Customize its content, color, icon, and icon size. Supports Filament 4.x and 5.x.
Architecture fit
Awcodes\Shout\Components\Shout), not a persistent field. It is dropped into the schema() array of forms and infolists alongside TextInput or Section. No domain model change, no migrations, no routes, no service container bindings, no queue or event surface. Server-side footprint is one Blade view plus a thin PHP class — the lowest-blast-radius category of dependency we can take on.heading(), content(), color() (Filament Color object or hex), icon()/iconSize()/icon(false), and actions() accepting real Filament Action objects. That last one matters — the notice can carry a CTA, which means it can host deprecation warnings with an "upgrade" link, compliance copy next to a destructive action, or onboarding hints that deep-link into the relevant resource. That is the actual product value: consistent, actionable in-context messaging inside the admin surface rather than a bare colored box.Placeholder is close but plainer). So the package fills a real gap, if a small one.Integration feasibility
composer require awcodes/shout, then use it. Usage is one line in a schema array.@source glob (@source '../../../../vendor/awcodes/shout/resources/**/*.blade.php'). If we use the standalone packages, the same directive goes in our app CSS.Technical risk
@source glob and the component renders structurally but unstyled — a silent failure that only shows up visually, i.e. the kind QA catches late.shout::icon.info, etc.) that never resolved before, plus an empty-<h2> bug and the icon(false) indent bug.Require awcodes/focus ^1.0. Confirm it is a dev/build-time dependency for docs screenshots and not a runtime requirement we inherit.Key questions
@source list? This gates the whole decision.awcodes/focus dev-only? What else lands in composer.lock transitively?content()/heading() safe with dynamic or user-influenced strings, and are we prepared to treat HtmlString headings as a trusted-input-only path?Shout::make() ad hoc?Stack fit
@source directive). Use v4.1.1+ for dual Filament 4/5 support; stay on 3.x only if we are pinned to Filament 4 and want a narrower branch.Migration path
Placeholder, raw TextEntry, or helper text strings. Moving to Shout is an opportunity to standardize severity, copy tone, and which notices are allowed to carry actions.App\Support\Notices::deprecation(), ::compliance(), ::onboarding(). This gives consistent colors/icons, one place to change copy, and a one-file swap if the package is ever abandoned. It also keeps vendor API surface out of hundreds of schema files.Compatibility
^4.1.1 as the floor for the icon-alias and dark-mode fixes; do not let transitive resolution land on 4.0.x/4.1.0.@source directive will not work on a Tailwind 3 pipeline.Sequencing
@source line? Blocking.composer why awcodes/focus, confirm dev-only, confirm lockfile delta is acceptable.Maintenance
@source glob plus dark-mode palette will need a visual pass. Budget it as a line item in every Filament upgrade epic — small, but non-zero and easy to forget.Support
@source wiring and the internal presets. Without that, the first Tailwind refactor silently breaks every notice.Scaling
@source glob — negligible, but it does mean the vendor path must remain stable across our theme builds.Failure modes
| Failure | Likelihood | Impact | Detection |
|---|---|---|---|
Missing/stale @source glob after theme or Tailwind change |
High | Unstyled notices, looks broken | Visual QA / screenshot diff |
| Filament major bumped without Shout bump | Medium | Component class or render breaks | Smoke test on admin boot |
| Pinned below 4.1.1 | Medium | Broken icon aliases, poor dark-mode contrast on links/outlined actions | Design review in dark mode |
| Vendor path moved in a release | Low | Styles vanish silently | CI visual regression |
HtmlString heading with untrusted input |
Low | XSS surface | Code review on wrapper |
| Upstream abandonment | Low | Frozen at last compatible Filament major | Dependency register review |
Note the pattern: every credible failure is visual and silent. That argues for one automated screenshot check on a pilot page rather than heavy test investment.
Ramp-up
@source line with a note on why it exists.TPM judgment Low cost, low risk, modest but genuine UX payoff — worth adopting if we already run a custom Filament theme, in which case it is close to free. If we do not, the theme pipeline is the real project and Shout is a two-line rider on it. The opportunity score (~47.6) and zero dependents suggest this is a convenience, not a platform bet: adopt with a pinned floor and an internal wrapper, and explicitly record that removal is a few hours of work.
How can I help you explore Laravel packages today?