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

Filament Curator Laravel Package

awcodes/filament-curator

Filament Curator is a media picker and manager plugin for Filament Admin, offering a full media library UI with Glide-signed image URLs and a one-command installer. Supports Filament 3, 4, and 5. Note that it does not work with Spatie Media Library.

View on GitHub
Deep Wiki
Context7
v5.4.0

Added

  • One hook for every action that deletes media. Curator::configureDeleteActionsUsing() configures the resource table's row and bulk delete actions, the edit page's delete action, and the picker panel's delete action. Use it to add a warning or a guard without a global DeleteAction::configureUsing(). Call it from a service provider's boot() method:

    use Awcodes\Curator\Facades\Curator;
    use Awcodes\Curator\Models\Media;
    use Filament\Actions\Action;
    
    Curator::configureDeleteActionsUsing(function (Action $action): void {
        $action->modalDescription(fn (?Media $record) => "Delete {$record?->name}? It may still be in use.");
    });
    

    The callback receives the Filament action, so any action method works, including before() with $action->halt(). Single-record actions receive the media as $record and the bulk action receives $records. Type $record as nullable: the picker panel only resolves it once the delete dialog opens, and not at all if the user may not delete that item. If you have replaced the resource's page or table classes, pass your delete actions through Curator::configureDeleteAction() to pick up the hook. See Customising delete actions.

Fixed

  • Bulk delete now checks the media policy for each record. Filament authorizes bulk actions only through deleteAny(). If your policy restricted delete() on individual records but didn't define deleteAny(), bulk delete from the media table removed records the policy denies. Each selected record is now checked. Records the user may not delete are skipped, and Filament reports a partial delete.

Added in #739, with tests for each delete path.

Filament 4 users are covered: 5.x serves both majors.

v3.7.11

Security release

See GHSA-3xm3-q2fj-x8rq for the full advisory.

  • Media streamed from disk was typed by sniffing its contents. SVG markup stored under another extension came back as image/svg+xml under an inline disposition and could render as a document in the application's origin. The serving layer now pins Content-Type from the stored extension, forces a download when the extension is unknown and the sniff would render as a document, and sends X-Content-Type-Options: nosniff throughout.
  • The curation modal wrote to a client-supplied path. saveCuration() consumed the crop payload unvalidated, so a key such as ../../other could overwrite a sibling file inside the storage disk. The payload is now validated before anything is written.
  • curator:sanitize-svgs could never finish on larger libraries. Its two selection criteria were or'd at the top level, so chunkById's and id > ? bound to only one of them and every type-matched row was handed back on each pass. Any library with more than 100 SVG records looped until the command was killed. If a scan appeared to hang on an earlier version, re-run it.

The upload-side half of the advisory does not affect 3.x: its uploader already decided whether to sanitize from the detected type rather than the filename.

After upgrading

php artisan curator:sanitize-svgs --dry-run   # report only
php artisan curator:sanitize-svgs

Reported by Afsana Alijabarova ([@afa114](https://github.com/afa114)).

v4.2.1

Security release

Fixes an SVG sanitization bypass and unvalidated curation paths. See GHSA-3xm3-q2fj-x8rq for the full advisory.

  • SVG sanitization could be bypassed by renaming the file. Sanitization was gated on the client-supplied filename extension while acceptance and the served content type were decided from the file's contents, so SVG markup uploaded as payload.txt was stored unsanitized. Sanitizing now keys off the detected type as well as the extension, in both the uploader and CuratorUtils::importMedia, and the serving layer pins Content-Type from the stored extension instead of the sniffed bytes.
  • The curation modal wrote to a client-supplied path. saveCuration() consumed the crop payload unvalidated, so a key such as ../../other could overwrite a sibling file inside the storage disk. The payload is now validated before anything is written.
  • curator:sanitize-svgs now selects on the detected type as well as the extension, so rows stored under a spoofed filename are no longer invisible to it.

After upgrading

Re-scan stored media to clean up anything already on disk:

php artisan curator:sanitize-svgs --dry-run   # report only
php artisan curator:sanitize-svgs

The serving-layer change already prevents affected rows from rendering as documents, so this is cleanup rather than the primary fix.

Also in this release

  • Removed the unused exif form view. It was not referenced anywhere in the package and could not render as shipped, since it requested an Alpine component that is never registered. If you published views with vendor:publish --tag=curator-views, your local copy is untouched by this removal and still contains a raw {!! !!} echo of EXIF metadata — escape or delete it.

Reported by Afsana Alijabarova ([@afa114](https://github.com/afa114)).

v5.3.2

Security release

Fixes an SVG sanitization bypass and unvalidated curation paths. See GHSA-3xm3-q2fj-x8rq for the full advisory.

  • SVG sanitization could be bypassed by renaming the file. Sanitization was gated on the client-supplied filename extension while acceptance and the served content type were decided from the file's contents, so SVG markup uploaded as payload.txt was stored unsanitized. Sanitizing now keys off the detected type as well as the extension, in both the uploader and CuratorUtils::importMedia, and the serving layer pins Content-Type from the stored extension instead of the sniffed bytes.
  • The curation modal wrote to a client-supplied path. saveCuration() consumed the crop payload unvalidated, so a key such as ../../other could overwrite a sibling file inside the storage disk. The payload is now validated before anything is written.
  • curator:sanitize-svgs now selects on the detected type as well as the extension, so rows stored under a spoofed filename are no longer invisible to it.

After upgrading

Re-scan stored media to clean up anything already on disk:

php artisan curator:sanitize-svgs --dry-run   # report only
php artisan curator:sanitize-svgs

The serving-layer change already prevents affected rows from rendering as documents, so this is cleanup rather than the primary fix.

Also in this release

  • Removed the unused exif form view. It was not referenced anywhere in the package and could not render as shipped, since it requested an Alpine component that is never registered. If you published views with vendor:publish --tag=curator-views, your local copy is untouched by this removal and still contains a raw {!! !!} echo of EXIF metadata — escape or delete it.

Reported by Afsana Alijabarova ([@afa114](https://github.com/afa114)).

v5.3.1

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.3.0...v5.3.1

v5.3.0

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.2.0...v5.3.0

v5.2.0

Added

The media picker's search now matches each term on its own instead of looking for the whole input as a single substring. A file named my-image.png could not previously be found by typing "my image".

The search is split on whitespace, hyphens and underscores, and every term has to match — though any of the five searchable columns (name, title, alt, caption, description) may be the one matching it. So my-image.png is now found by "my image", "my_image", "my-image", or "image my", while my-document.png stays out of those results.

LIKE wildcards typed into the search are now escaped, so searching for 100% looks for a literal percent sign rather than matching everything. Worth knowing that _ has always been an unescaped single-character wildcard, so photo_8-sunset matched photo-8-sunset by accident while a hyphen did nothing; that inconsistency is gone.

Case sensitivity is still left to the database — Postgres LIKE is case-sensitive where MySQL and SQLite are not. That is unchanged from previous versions.

Thanks to @amywestlake for reporting this and proposing the original approach in #623.

Fixed

Search results are now ordered by the panel's sort direction, matching the unfiltered list. There was no ORDER BY at all before, so the 50-row limit truncated an arbitrary slice of matches.

GliderFallback's setters were typed to require a value, while every property except the name is optional and every getter already returned null. Building a fallback from a conditional expression — the usual reason to have one — threw a TypeError in a service provider before the application could boot:

GliderFallback::make('logo')
    ->alt(config('app.name'))
    ->source(filled(setting('logo')) ? $logo->url : Vite::image('logo.webp'))

alt(), height(), source(), type() and width() now all accept null.

A registered fallback that ends up with no source still cannot be rendered, but it now names itself — The [logo] glider fallback does not have a source. — instead of reporting the media item as invalid, which pointed at the wrong thing.

Thanks again to @battulga0719 for reporting this in #718.

Upgrading

No changes are required for ordinary use. Two notes:

  • If you extended GliderFallback and overrode any of the setters with the narrower string/int signature, widen it to ?string/?int to match the parent.
  • Typing 0 into the picker search previously reset the list to show everything. It now searches for "0"; whitespace-only input is what falls back to the unfiltered list.
v4.2.0

Added

The media picker's search now matches each term on its own instead of looking for the whole input as a single substring. A file named my-image.png could not previously be found by typing "my image".

The search is split on whitespace, hyphens and underscores, and every term has to match — though any of the five searchable columns (name, title, alt, caption, description) may be the one matching it. So my-image.png is now found by "my image", "my_image", "my-image", or "image my", while my-document.png stays out of those results.

LIKE wildcards typed into the search are now escaped, so searching for 100% looks for a literal percent sign rather than matching everything. Worth knowing that _ has always been an unescaped single-character wildcard, so photo_8-sunset matched photo-8-sunset by accident while a hyphen did nothing; that inconsistency is gone.

Case sensitivity is still left to the database — Postgres LIKE is case-sensitive where MySQL and SQLite are not. That is unchanged from previous versions.

Thanks to @amywestlake for reporting this and proposing the original approach in #623.

Fixed

Search results are now ordered by the panel's sort direction, matching the unfiltered list. There was no ORDER BY at all before, so the 50-row limit truncated an arbitrary slice of matches.

GliderFallback's setters were typed to require a value, while every property except the name is optional and every getter already returned null. Building a fallback from a conditional expression — the usual reason to have one — threw a TypeError in a service provider before the application could boot:

GliderFallback::make('logo')
    ->alt(config('app.name'))
    ->source(filled(setting('logo')) ? $logo->url : Vite::image('logo.webp'))

alt(), height(), source(), type() and width() now all accept null.

A registered fallback that ends up with no source still cannot be rendered, but it now names itself — The [logo] glider fallback does not have a source. — instead of reporting the media item as invalid, which pointed at the wrong thing.

Thanks again to @battulga0719 for reporting this in #718.

Upgrading

No changes are required for ordinary use. Two notes:

  • If you extended GliderFallback and overrode any of the setters with the narrower string/int signature, widen it to ?string/?int to match the parent.
  • Typing 0 into the picker search previously reset the list to show everything. It now searches for "0"; whitespace-only input is what falls back to the unfiltered list.
v5.1.5

Security

Curator's upload components fell back to a default list of accepted file types that included text/html, application/xhtml+xml, text/javascript, application/xml and application/octet-stream. An authenticated user with permission to upload media could upload an HTML file containing a <script> tag. The file was stored unmodified and later served from the application's own origin, executing the script with the session of whoever opened it.

This affected the Media resource form, MultiUploadAction, CuratorPicker and the rich editor's attachment flow, which all share the same default. Applications that already set acceptedFileTypes() themselves — globally or per field — were never affected, because the vulnerable list was only used as a fallback.

The default is now MimeType::defaults(): the full list minus types that are effectively executable content. MimeType::toArray() is unchanged, so code referencing the enum directly still works. As defense in depth, media served through Curator's own route now sends X-Content-Type-Options: nosniff, and restricted types are forced to Content-Disposition: attachment.

If your application genuinely needs to host these types, opt back in explicitly:

use Awcodes\Curator\Enums\MimeType;

Curator::acceptedFileTypes([...MimeType::defaults(), 'text/html']);

Note that Curator only sanitizes SVG uploads. Anything else you allow is stored and served verbatim, and with the default public disk it is also reachable through the storage symlink, where the new response headers do not apply. Serve deliberately-allowed executable types from a private disk.

The 3.x line is not affected — its accepted types come from config('curator.accepted_file_types'), whose default has always been limited to images and PDFs.

Fixed

Glider fallbacks could not be used at all. Several faults compounded:

  • GliderFallback::make() passed the name through the container, but the class has no constructor, so Laravel discarded it. The name stayed null and getName() threw a TypeError, meaning a fallback built exactly as documented failed before it could be registered.
  • The <x-curator-glider> component rejected a null media item, which is the main reason to configure a fallback in the first place. It now accepts null.
  • handleInt() checked the raw id rather than the looked-up record, so the fallback branch never ran and a missing record produced "Attempt to read property path on null" instead. The documented <x-curator-glider :media="1" fallback="thumbnail"/> could not work.

Fallback resolution now happens in one place, so a null media item, an id that does not resolve, and a blank string all reach it. An unregistered fallback name, or one with no source, no longer dereferences null.

Also fixed while in there:

  • GliderFallback's optional getters were typed non-nullable while every property defaults to null, so a partially configured fallback threw. They are nullable now.
  • GliderFallback::isPreviewable() called Curator::isResizable(), reporting svg sources as not previewable.

Thanks to @battulga0719 for reporting the fallback issues in #717.

v4.1.5

Security

Curator's upload components fell back to a default list of accepted file types that included text/html, application/xhtml+xml, text/javascript, application/xml and application/octet-stream. An authenticated user with permission to upload media could upload an HTML file containing a <script> tag. The file was stored unmodified and later served from the application's own origin, executing the script with the session of whoever opened it.

This affected the Media resource form, MultiUploadAction, CuratorPicker and the rich editor's attachment flow, which all share the same default. Applications that already set acceptedFileTypes() themselves — globally or per field — were never affected, because the vulnerable list was only used as a fallback.

The default is now MimeType::defaults(): the full list minus types that are effectively executable content. MimeType::toArray() is unchanged, so code referencing the enum directly still works. As defense in depth, media served through Curator's own route now sends X-Content-Type-Options: nosniff, and restricted types are forced to Content-Disposition: attachment.

If your application genuinely needs to host these types, opt back in explicitly:

use Awcodes\Curator\Enums\MimeType;

Curator::acceptedFileTypes([...MimeType::defaults(), 'text/html']);

Note that Curator only sanitizes SVG uploads. Anything else you allow is stored and served verbatim, and with the default public disk it is also reachable through the storage symlink, where the new response headers do not apply. Serve deliberately-allowed executable types from a private disk.

The 3.x line is not affected — its accepted types come from config('curator.accepted_file_types'), whose default has always been limited to images and PDFs.

Fixed

Glider fallbacks could not be used at all. Several faults compounded:

  • GliderFallback::make() passed the name through the container, but the class has no constructor, so Laravel discarded it. The name stayed null and getName() threw a TypeError, meaning a fallback built exactly as documented failed before it could be registered.
  • The <x-curator-glider> component rejected a null media item, which is the main reason to configure a fallback in the first place. It now accepts null.
  • handleInt() checked the raw id rather than the looked-up record, so the fallback branch never ran and a missing record produced "Attempt to read property path on null" instead. The documented <x-curator-glider :media="1" fallback="thumbnail"/> could not work.

Fallback resolution now happens in one place, so a null media item, an id that does not resolve, and a blank string all reach it. An unregistered fallback name, or one with no source, no longer dereferences null.

Also fixed while in there:

  • GliderFallback's optional getters were typed non-nullable while every property defaults to null, so a partially configured fallback threw. They are nullable now.
  • GliderFallback::isPreviewable() called Curator::isResizable(), reporting svg sources as not previewable.

Thanks to @battulga0719 for reporting the fallback issues in #717.

v5.1.4

Fixed

  • The media picker breadcrumb's root Disk label and the Selected Files heading in the selection modal were hardcoded in English and ignored the active locale. Both now resolve through the translation layer. The breadcrumb reuses the existing curator::views.details.disk key, so it is already translated in every shipped locale.

Localization

Adds a new attach_curator_media.modal.selected_files key under resources/lang/en/views.php. Other locales fall back to English until translated — contributions welcome.

Thanks to @Elgorm for reporting and fixing this in #716.

v4.1.4

Fixed

  • The media picker breadcrumb's root Disk label and the Selected Files heading in the selection modal were hardcoded in English and ignored the active locale. Both now resolve through the translation layer. The breadcrumb reuses the existing curator::views.details.disk key, so it is already translated in every shipped locale.

Localization

Adds a new attach_curator_media.modal.selected_files key under resources/lang/en/views.php. Other locales fall back to English until translated — contributions welcome.

Thanks to @Elgorm for reporting and fixing this in #716.

v5.1.3

Security

Fixes a broken access control vulnerability (CWE-862 / CWE-639, CVSS 7.6 High): the media picker modal's per-item Edit, Delete, and Download actions resolved their target Media record from client-supplied input without a per-record authorization check or tenant scoping. Any authenticated user able to reach a form containing a CuratorPicker field could edit, delete, or download arbitrary Media records by id — bypassing any MediaPolicy the host app defines and Curator's own multi-tenancy scoping. The Download action also streamed a client-supplied disk/path directly.

These actions now enforce the resource's authorization policy per-record and apply the same tenant scoping used elsewhere in the picker, and Download streams from the stored record instead of the request payload. No configuration changes are required after upgrading.

See the security advisory for full details: https://github.com/awcodes/filament-curator/security/advisories/GHSA-3m5g-3j68-ghvp

v4.1.3

Security

Fixes a broken access control vulnerability (CWE-862 / CWE-639, CVSS 7.6 High): the media picker modal's per-item Edit, Delete, and Download actions resolved their target Media record from client-supplied input without a per-record authorization check or tenant scoping. Any authenticated user able to reach a form containing a CuratorPicker field could edit, delete, or download arbitrary Media records by id — bypassing any MediaPolicy the host app defines and Curator's own multi-tenancy scoping. The Download action also streamed a client-supplied disk/path directly.

These actions now enforce the resource's authorization policy per-record and apply the same tenant scoping used elsewhere in the picker, and Download streams from the stored record instead of the request payload. No configuration changes are required after upgrading.

See the security advisory for full details: https://github.com/awcodes/filament-curator/security/advisories/GHSA-3m5g-3j68-ghvp

v3.7.10

Security

Fixes a broken access control vulnerability (CWE-862 / CWE-639, CVSS 7.6 High): the media picker modal's per-item Delete, Download, and Edit/Save actions resolved their target Media record from client-supplied input (action arguments / the selected item) and, while gated by a global ability check, applied no per-record authorization or tenant scoping. A user holding the delete/update/download ability could act on arbitrary Media records by id — including across tenants — and the Download action streamed a client-supplied disk/path.

These actions now perform a per-record policy check and apply the picker's tenant scoping before touching a record, and Download streams from the stored record instead of the request payload. No configuration changes are required after upgrading.

See the security advisory for full details: https://github.com/awcodes/filament-curator/security/advisories/GHSA-3m5g-3j68-ghvp

v5.1.2

Security

Fixes a stored XSS vulnerability (CWE-79, CVSS 5.4 Moderate): SVG files uploaded through the Curator panel were served inline without sanitization, allowing embedded JavaScript to execute in the application's origin when a user opened the file via the View action. SVG uploads are now sanitized (scripts, event handlers, and remote references stripped) before being written to storage.

After upgrading, run php artisan curator:sanitize-svgs to clean any SVGs uploaded before this release (use --dry-run to preview first).

See the security advisory for full details: https://github.com/awcodes/filament-curator/security/advisories/GHSA-8vm9-f75m-5h2m

Maintenance

  • Added enshrined/svg-sanitize as a dependency.
v4.1.2

Security

Fixes a stored XSS vulnerability (CWE-79, CVSS 5.4 Moderate): SVG files uploaded through the Curator panel were served inline without sanitization, allowing embedded JavaScript to execute in the application's origin when a user opened the file via the View action. SVG uploads are now sanitized (scripts, event handlers, and remote references stripped) before being written to storage.

After upgrading, run php artisan curator:sanitize-svgs to clean any SVGs uploaded before this release (use --dry-run to preview first).

See the security advisory for full details: https://github.com/awcodes/filament-curator/security/advisories/GHSA-8vm9-f75m-5h2m

Dependencies

  • Added enshrined/svg-sanitize.
v3.7.9

Security

Backports the fix for a stored XSS vulnerability (CWE-79, CVSS 5.4 Moderate): SVG files uploaded through the Curator panel were served inline without sanitization, allowing embedded JavaScript to execute in the application's origin when a user opened the file via the View action. SVG uploads are now sanitized (scripts, event handlers, and remote references stripped) before being written to storage.

After upgrading, run php artisan curator:sanitize-svgs to clean any SVGs uploaded before this release (use --dry-run to preview first).

See the security advisory for full details: https://github.com/awcodes/filament-curator/security/advisories/GHSA-8vm9-f75m-5h2m

Dependencies

  • Added enshrined/svg-sanitize.

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.7.8...v3.7.9

v3.7.8

🔒 Security

Backports the fix for a cross-tenant media metadata disclosure in the Curator picker search (introduced in v3.2.4 with multitenancy support). In multitenant panels, an authenticated user could retrieve other tenants' media metadata by typing in the picker search box. Single-tenant installs are not affected.

  • Severity: Medium (CVSS 5.0 — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N)
  • CWE: CWE-284 (Improper Access Control)

Upgrade recommended for any multitenant deployment. Also fixed in 4.1.1 and 5.1.1. A GitHub Security Advisory and CVE will be linked here once published.

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.7.7...v3.7.8

v5.1.1

🔒 Security

Fixes a cross-tenant media metadata disclosure in the Curator picker search. In multitenant panels, an authenticated user could retrieve other tenants' media metadata by typing in the picker search box. Single-tenant installs are not affected.

  • Severity: Medium (CVSS 5.0 — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N)
  • CWE: CWE-284 (Improper Access Control)

Upgrade recommended for any multitenant deployment. Also fixed in 3.7.8 and 4.1.1. A GitHub Security Advisory and CVE will be linked here once published.

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.1.0...v5.1.1

v4.1.1

🔒 Security

Fixes a cross-tenant media metadata disclosure in the Curator picker search. In multitenant panels, an authenticated user could retrieve other tenants' media metadata by typing in the picker search box. Single-tenant installs are not affected.

  • Severity: Medium (CVSS 5.0 — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N)
  • CWE: CWE-284 (Improper Access Control)

Upgrade recommended for any multitenant deployment. Also fixed in 3.7.8 and 5.1.1. A GitHub Security Advisory and CVE will be linked here once published.

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.1.0...v4.1.1

v5.1.0

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.8...v5.1.0

v4.1.0

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.8...v4.1.0

v5.0.8

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.7...v5.0.8

v5.0.7

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.6...v5.0.7

v4.0.7

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.6...v4.0.7

v5.0.6

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.5...v5.0.6

v4.0.6

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.5...v4.0.6

v5.0.5

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.4...v5.0.5

v4.0.5

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.4...v4.0.5

v5.0.4

What's Changed

  • Fix: version conflicts from 4.x merge

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.3...v5.0.4

v5.0.3

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.2...v5.0.3

v4.0.4

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.3...v4.0.4

v5.0.2

What's Changed

  • Fix: glide server config in GlideManager and update upgrade guide

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.1...v5.0.2

v4.0.3

What's Changed

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.2...v4.0.3

v4.0.2

What's changed

  • Fix composer version constraints

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.1...v4.0.2

v5.0.1

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v5.0.0...v5.0.1

v4.0.1

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.0...v4.0.1

v5.0.0

What's Changed

  • Filament v5 support

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.0...v5.0.0

v4.0.0

Let’s do this

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.4.6...v4.0.0

v4.0.0-alpha.7
v4.0.0-alpha.5
v4.0.0-alpha.4
v4.0.0-alpha.3

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v4.0.0-alpha.2...v4.0.0-alpha.3

v4.0.0-alpha.1

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.4.6...v4.0.0-alpha.1

v3.7.7

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.7.6...v3.7.7

v3.7.6

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.7.5...v3.7.6

v3.7.5

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.7.4...v3.7.5

v3.7.4

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.7.3...v3.7.4

v3.7.3

What's Changed

New Contributors

Full Changelog: https://github.com/awcodes/filament-curator/compare/v3.7.2...v3.7.3

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.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings