Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Advanced Nova Media Library Laravel Package

marshmallow/advanced-nova-media-library

Advanced media library for Laravel Nova. Manage images and files through a polished Nova field, organize assets in folders, and attach reusable media to your Eloquent models with conversions and responsive images. Built for developers who need more than Nova's default file field.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged: the package is a Laravel Nova field/tool wrapping spatie/laravel-medialibrary, giving Nova admins upload, crop, conversion, responsive-image, ordering, and custom-property controls. It fits only where Nova is licensed, Spatie Media Library is the canonical media layer, and models use HasMedia with defined collections/conversions. It remains a UI layer over Spatie; persistence, conversions, and URL generation stay Spatie's responsibility, which is the right separation — media data survives a field failure.

Integration feasibility. Composer-installable Laravel package with a Nova field class (AdvancedNovaMediaLibrary::make(...)). The 5.3.2 release materially changes the feasibility picture in two directions:

  • Better: the release notes evidence real production use ("destroyed a product image on a production site… took that site's homepage down"), reference an upstream issue (#24) and an internal ticket (MM-25314), and the version line (5.x) aligns with ebess/advanced-nova-media-library — strongly consistent with the fork hypothesis. This is a maintained internal fork with a working tracker, not an abandoned placeholder.
  • Worse: the package is demonstrably capable of shipping a destructive data-loss regression to production, and did. 5.3.1 silently emptied media collections when a submitted reference failed to resolve; that reached a live site and broke a rendered page within minutes.

Ecosystem adoption is still zero (0 stars, 0 dependents, no community compatibility reports), and the anomalous future-dated release metadata (2026-09-07) remains untrusted — but it now reads as a private/forked release pipeline rather than an untagged stub. Nova's proprietary license still blocks CI on public runners.

Technical risk.

  • Provenance risk (partially resolved): namespace marshmallow-packages plus a 5.3.2 version line confirms we are almost certainly dealing with a fork/rename of ebess/advanced-nova-media-library. Still required: confirm lineage, diff against upstream at the corresponding tag, verify license, and determine whether the 5.3.1 regression exists upstream or is fork-local. The answer changes the remediation burden significantly.
  • Destructive-write risk (new, highest severity): handleMedia() runs removeDeletedMedia() before reconciling submitted values, so any submitted reference that is unresolvable — a row deleted after form render, or null/'' coerced by ConvertEmptyStringsToNull — is treated as "not kept" and the collection is emptied. 5.3.2 validates first and throws ValidationException before the destructive path. The ordering of that method is the single most important code to review.
  • Release-process risk (new): a regression this severe shipped to production, which implies no automated regression test on the destructive path prior to release, and the fix verification is described as a manual four-input table against production data rather than a CI suite. Treat every version bump as untested until we test it.
  • Behavior-change risk (new): 5.3.2 converts a silent success into a user-facing ValidationException for null, '', and stale ids. Any non-Nova caller of handleMedia() — API resource, import job, artisan command, Nova action — now throws where it previously 500'd or silently passed. Queue workers will surface these as failed jobs.
  • Version-matrix risk: Nova 4/5 field APIs and Spatie v10 → v11 breaking changes remain unverified by any community usage.
  • Runtime risk: conversions require GD/Imagick and queue workers; misconfiguration yields permanently pending conversions.
  • Metadata risk: unchanged — interesting gap, now with a demonstrated failure, still unproven execution.

Key questions.

  1. Does 5.3.2 still allow an admin to intentionally clear a collection? With null and '' now raising ValidationException, what is the sanctioned "remove all media" path, and does the Nova field's own UI produce it?
  2. Is the 5.3.1 regression fork-local or present upstream? What is the diff against ebess/advanced-nova-media-library at the matching tag, and what is the license?
  3. Are there automated tests covering handleMedia() / removeDeletedMedia() for null, stale id, empty string, and valid id — or is the verification table the only record?
  4. Who else calls handleMedia() in this codebase or in the package (API controllers, actions, jobs), and do those paths now throw where they previously did not?
  5. Supported matrix: Laravel 10/11/12, PHP 8.1+, Nova 4/5, spatie/laravel-medialibrary v10/v11?
  6. Release/test story: CI, JS build artifacts committed, changelog discipline, and why the future-dated release metadata persists?
  7. Maintainer, issue SLA, security disclosure path — and specifically, is (MM-25314) the only tracked defect or are there others behind it?
  8. Did 5.3.1 exist long enough, in enough environments, that other sites may have lost media silently? Is there an audit query to detect collections that shrank unexpectedly?

Integration Approach

Stack fit. Unchanged: Laravel 10–12, Nova 4/5, spatie/laravel-medialibrary v10/11, PHP 8.1+, queue driver (Redis/SQS), configured disk (local or S3). The package remains UI-only; all persistence and conversions are Spatie's.

Migration path.

  1. Pin 5.3.2 exactly, never 5.3.1, and never a floating ^5.x constraint. Use an exact version constraint and commit the lockfile. If a lockfile currently resolves to 5.3.1 in any environment — including local and staging — treat that environment as a potential data-loss incident and audit its media collections immediately.
  2. Diff against the incumbent / upstream — map disk names, collection names, and conversion names before touching production resources. Do not rename collections. Confirm whether the 5.3.1 regression is upstream-inherited.
  3. PoC in a scratch Nova app — exercise upload/edit/delete/reorder/crop plus the four regression inputs: null, '', stale id, valid id. Confirm the collection survives all three failure inputs and that the field still provides a working way to intentionally clear media.
  4. Backfill — existing Spatie rows should appear if collection names match; verify against a resource with pre-existing media.
  5. Pilot one resource — low-risk content type, 2–4 weeks, with media-count monitoring before broadening.
  6. Vendor/pin — fork into an internal namespace with a documented patch process; cherry-pick upstream fixes manually.

Compatibility. Build the matrix from your own smoke tests: Nova version, Laravel, PHP, Spatie Media Library, image driver. Because there are zero dependents, no community compatibility reports exist. Nova 5's field/Vue build changes still need checking against committed compiled assets. Add one compatibility dimension the original assessment lacked: package version × destructive-path behavior, since 5.3.1 and 5.3.2 are behaviorally different in a way that affects data durability, not just rendering.

Sequencing. (1) Pin to 5.3.2 / audit any environment on 5.3.1 → (2) license and upstream-lineage diff, including whether the regression is fork-local → (3) scratch-app PoC with regression inputs → (4) compatibility matrix and CI smoke test → (5) single-resource pilot → (6) broaden to all media-bearing resources → (7) runbook, backup/restore drill, fork contingency. Do not sequence the pilot before the queue, disk, and backup/restore path are proven — the 5.3.1 incident shows media loss propagates to rendered pages within minutes, so recovery speed matters as much as prevention.

Operational Impact

Maintenance. Effectively self-supported. Budget an internal owner, quarterly dependency reviews, and a fork fallback. Track both Spatie Media Library and Nova release notes. If this is a renamed fork, upstream fixes will not flow automatically — plan to cherry-pick, and diff every release rather than reading changelogs alone.

Support. Zero stars and zero dependents means no Stack Overflow corpus and unknown issue responsiveness. The 5.3.2 notes are unusually candid and well-reasoned — a positive maintainer signal — but a single responsive maintainer is not an escalation path. Escalation is internal engineering plus Spatie docs.

Scaling. Media is I/O- and storage-bound, not CPU-bound in the admin. Conversions need queue workers with retry/backoff; large uploads need chunking or direct-to-S3 and tuned upload_max_filesize/post_max_size/Nginx limits. Nova edit pages with many media items can get slow — verify pagination/lazy loading. Plan CDN and responsive URLs to avoid serving originals.

Failure modes.

  • Silent destructive deletion of a media collection when a submitted reference is unresolvable (deleted row, null, ''). Present in 5.3.1, fixed in 5.3.2 by validating before removeDeletedMedia(). Highest-severity mode; recovery requires a media-table and object-store restore.
  • Cascading front-end outage — the incident took a homepage down, so media loss is a site-availability event, not just an editorial annoyance. Add page-render health checks that fail on missing media, not just 500s.
  • Validation now throws where it previously didn't — non-Nova callers of handleMedia() will surface as ValidationException in jobs, APIs, or actions. Enumerate callers before upgrading.
  • Nova upgrade breaks the field's compiled JS or field API contract.
  • Spatie major-version bump breaks conversions/responsive images.
  • Disk/path misconfiguration writes media but serves 404s.
  • Queue backlog or missing image driver leaves conversions permanently pending.
  • Orphaned media rows after model deletion if HasMedia cleanup is unconfigured.
  • Upload validation gaps (MIME spoofing, SVG/EXIF payloads).
  • Multi-tenant disk path collisions or cross-tenant URL leakage.
  • Future-dated release metadata defeats vulnerability scanning and changelog trust.
  • Unversioned or floating constraints silently reintroducing 5.3.1 on a fresh install or CI rebuild.

Ramp-up. A Laravel developer familiar with Nova fields completes a PoC in about half a day and a production integration in 2–3 days excluding review. Operational ramp-up rises modestly with the new evidence: queue workers, storage lifecycle, image driver, and CDN add 1–2 days for platform/ops, plus half a day to establish and drill a media restore path (DB row restore plus object-store versioning), which the 5.3.1 incident shows is not optional. TPM framing: this is now a low-cost UI convenience with a demonstrated destructive failure mode and an actively patching maintainer — the provenance question is largely answered, but the package must be version-pinned, upgrade-staged, and backed by a tested restore path before it touches anything with unrecoverable content. Evaluate against Nova's native File field plus a small custom tool, or upstream ebess/advanced-nova-media-library at a known-good version, before committing.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle