asignua/filament-image-meta
A Filament plugin for working with image metadata, letting you view and manage details like EXIF data alongside your uploaded images in forms and tables. Adds handy meta fields and columns to Filament resources with minimal setup.
Architecture fit. This is a form-layer package for Laravel/Filament applications: a custom upload/details panel component, a metadata value object (ImageMeta), and a requireAlt validation rule. It does not touch the domain or persistence layer — no migrations, no model contracts, no service bindings are implied by the notes. It fits where editorial teams manage images through Filament resources and alt text is a governance requirement (WCAG/accessibility, SEO, brand policy), including nested Repeater/Builder content stored as JSON without a relationship. That nested case is the genuinely hard part, and this release is largely about it.
Integration feasibility. Low effort: composer patch bump, no asset republish (the built asset is unchanged; esbuild 0.28 is a dev-only bump), no configuration or schema migration described. The surface area that changes is behavioural, not structural.
Technical risk. The version number says patch, but the contents are mixed severity:
requireAlt now validates images already stored on the record, not just files uploaded in the current request. Any legacy record with an undescribed image — or one whose alt text was cleared — will fail to save. This is a silent workflow break for editors, discovered at save time.fallback_locale is now render-only and no longer satisfies requireAlt or the "Alt text set" badge. Multilingual sites that relied on fallback to pass validation will begin failing._stored snapshot is now HMAC-signed against the app key and bound to the field name, closing an injection/limit-bypass path via the reserved _stored key. Positive, but it introduces a key dependency.ImageMeta::ownAlt() / hasOwnAlt().Key questions for the maintainer. Was the requireAlt behaviour change intended for a patch release, and is there a config switch to stage it? What is the supported Filament/PHP version matrix? Is the _stored envelope documented, and what is the intended behaviour across APP_KEY rotation or a database restored into a different environment? Does the per-state file read cache invalidate within a request after a modal edit? Is there a reporting command or query to enumerate records that would now fail validation?
Stack fit. Laravel + Filament, local and remote disks (S3 et al.). The performance change targets remote disks specifically, so the value is highest where uploads live off-box. Because snapshots are HMAC-bound to the app key, the behavioural contract is per-environment — staging and production will not share snapshot validity, which is correct but must be understood during data copies.
Migration path. No schema or data migration is required by the package. A data remediation step is required by the behaviour: query production (or a copy) for records with images lacking alt text per required locale before enabling the stricter rule, then backfill or explicitly waive. Prefer a phased rollout — upgrade the code, keep requireAlt off (which now also removes a PHP deprecation per upload), backfill, then enable.
Compatibility. Confirm PHP and Filament major constraints from composer.json rather than the changelog. Audit any custom panel views, CSS targeting the old error location, and tests asserting error bag keys or rendered markup. Audit locale configuration for teams depending on fallback_locale to satisfy validation.
Sequencing.
requireAlt disabled for affected resource types.requireAlt per resource.APP_KEY or restore cross-environment databases in the same window — a missing/forged snapshot is treated as "nothing stored" and uncollected details are dropped.Maintenance. Active patch cadence with unusually detailed changelog entries — a good maintenance signal. The only dependency movement is a dev tool, and the distributed asset is unchanged, so no front-end rebuild or cache-bust is needed on upgrade.
Support. Expect a ticket spike at enablement: editors hitting save failures on legacy content, and multilingual editors confused that fallback text no longer counts as described. Publish internal guidance before rollout, and brief the support desk on the two messages they will see (missing alt on stored image; required-language alt missing). Escalate to the maintainer if the patch-level behaviour change was not intentional — it warrants at least a minor version and a documented upgrade note.
Scaling. Meaningful improvement: the panel previously re-read file metadata on every render, every rule run and every modal open; it now reads once per state, and the requireAlt rule makes no disk calls at all. On remote disks with several files per item this removes a per-render fan-out of size/mime/URL requests — lower latency on large forms, fewer S3 GETs and lower egress cost, and fewer timeouts when the disk is slow. HMAC signing is negligible compute.
Failure modes.
requireAlt is active — user-visible, blocks editing, and not caught by CI unless fixtures include undescribed images._stored snapshot; a missing or invalid snapshot is treated as empty. Key rotation, cross-environment DB restores, and replaying queued jobs against stale state are the realistic triggers, and the failure is quiet.Ramp-up. Low for engineers — a composer bump plus a test pass. Moderate for content operations, which owns the backfill and the enablement decision. Treat this as a small upgrade with a content-governance project attached, not a drop-in patch.
How can I help you explore Laravel packages today?