Weave Code
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

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • FilamentPHP Integration: The package is tightly coupled with FilamentPHP (v2.x–4.x), making it ideal for projects already using Filament for admin panels. It replaces or augments Spatie Media Library (explicitly incompatible) with a Filament-native media management solution.
  • Modular Design: The plugin follows Filament’s plugin architecture, allowing granular configuration (e.g., per-field settings, custom path generators, curations). This aligns well with Laravel’s modular ecosystem.
  • Media Abstraction: Centralizes media handling (upload, storage, relationships) into a single source of truth, reducing boilerplate for CRUD operations involving media.
  • Glide Integration: Leverages Glide for on-demand image processing, reducing server load and enabling dynamic resizing/cropping without pre-generating variants.

Integration Feasibility

  • Low Friction for Filament Users: Requires minimal setup (composer require, php artisan curator:install, theme integration). No database migrations unless customizing the Media model.
  • Storage Agnostic: Works with Laravel’s default storage (local, S3, etc.) but requires explicit disk/directory config. No vendor lock-in to specific storage backends.
  • Relationship Support: Native support for single/multiple media relationships, reducing N+1 query issues with eager loading guidance.
  • RichEditor Plugin: Seamless integration with Filament’s RichEditor, enabling WYSIWYG media embedding without custom JS.

Technical Risk

  • Filament Version Lock: Breaking changes between Filament major versions (e.g., v3→v4) may require manual upgrades (see UPGRADE.md). Risk mitigated by:
    • Clear version compatibility table.
    • Explicit upgrade command (php artisan curator:upgrade).
  • Customization Overhead: Advanced features (e.g., custom path generators, Glide server config) require service provider registration or model extensions. Risk:
    • Steeper learning curve for teams unfamiliar with Filament’s plugin system.
    • Potential for configuration drift if not documented.
  • Performance Implications:
    • Glide signed URLs: Enabled by default for cloud storage (e.g., S3), which may impact performance if overused.
    • Lazy loading: Default behavior may not suit real-time previews (configurable via lazyLoad()).
  • Incompatibility:
    • Explicitly blocks Spatie Media Library. Projects using both would need a migration strategy.
    • No Laravel Nova support (Filament-only).

Key Questions

  1. Storage Strategy:
    • Is the project using local storage or a cloud provider (e.g., S3)? If cloud, are signed URLs acceptable, or will a custom Glide server be needed?
  2. Media Volume:
    • For high-volume media, will custom path generators (e.g., UserPathGenerator) or disk partitioning be required?
  3. Caching:
    • Is Glide caching configured optimally for the deployment environment (e.g., CDN, shared hosting)?
  4. Fallbacks:
    • Are fallback images (e.g., placeholders) needed for missing media, and how will they be managed?
  5. Upgrade Path:
    • If migrating from Spatie Media Library, what’s the data migration plan (e.g., copying existing files, updating relationships)?
  6. Team Familiarity:
    • Does the team have experience with Filament plugins or Glide? If not, budget time for ramp-up.

Integration Approach

Stack Fit

  • Primary Use Case: Ideal for FilamentPHP-based admin panels needing:
    • Media uploads (images, videos, files).
    • Relationships (e.g., posts → featured image, products → gallery).
    • Dynamic image processing (cropping, resizing).
  • Secondary Use Case: Can replace Spatie Media Library in Filament-only projects, but requires data migration if existing media exists.
  • Unsupported Stacks:
    • Laravel Nova: No compatibility.
    • Non-Filament Laravel: Would need significant refactoring (e.g., replacing Filament-specific components).

Migration Path

Step Action Notes
1 Backup Existing Media Copy files from current storage (e.g., Spatie’s public/media) to the new disk/directory.
2 Install Package composer require awcodes/filament-curator + php artisan curator:install.
3 Configure Storage Update config/curator.php for disk/directory.
4 Migrate Relationships Update models to use Awcodes\Curator\Models\Media (or custom model).
5 Replace Spatie Fields Swap Spatie\MediaLibrary\HasMedia traits and fields for CuratorPicker.
6 Update Frontend Replace Spatie’s media helpers (e.g., {{ $model->getFirstMediaUrl() }}) with <x-curator-glider>.
7 Test Glide Routes Verify /curator (or custom path) serves processed images correctly.
8 Deprecate Spatie Remove Spatie package and cleanup unused migrations/traits.

Compatibility

  • Filament v4.x: Fully supported (latest release).
  • Laravel v10/11: Compatible (no Laravel-specific constraints).
  • Storage Drivers: Works with any Flysystem-supported driver (local, S3, GCS, etc.).
  • Database: Uses a single media table by default (customizable via config['model']).

Sequencing

  1. Pilot Phase:
    • Start with non-critical resources (e.g., a "Blog Post" model with featured images).
    • Test CuratorPicker in forms and CuratorColumn in tables.
  2. Core Migration:
    • Migrate high-priority media relationships (e.g., e-commerce products).
  3. Frontend Update:
    • Replace all media display logic with <x-curator-glider> or <x-curator-curation>.
  4. Optimization:
    • Configure Glide caching, path generators, and curations for performance.
  5. Rollback Plan:
    • Keep Spatie Media Library as a fallback until all features are verified.

Operational Impact

Maintenance

  • Vendor Updates:
    • Monitor awcodes/filament-curator for Filament version compatibility.
    • Minor updates (e.g., v3.x → v3.y) are likely safe; major updates (e.g., v3 → v4) require php artisan curator:upgrade.
  • Dependency Risks:
    • Relies on Filament, Glide, and Flysystem. Breaking changes in these libraries could impact Curator.
  • Customization:
    • Path generators, Glide configs, and model extensions may need updates if underlying systems change (e.g., storage provider).

Support

  • Documentation:
    • Good: README covers installation, usage, and upgrade paths. Missing:
      • Troubleshooting for common issues (e.g., Glide route conflicts, permission errors).
      • Performance tuning (e.g., Glide cache invalidation).
    • Workaround: Leverage Filament’s discord or GitHub issues.
  • Community:
    • Active: 436 stars, regular updates (last release: 2026-06-30). Low-risk for abandonment.
  • Error Handling:
    • Graceful fallbacks: Glider component supports fallback images for missing media.
    • Validation: CuratorPicker inherits Filament’s FileUpload validation (e.g., acceptedFileTypes, maxSize).

Scaling

  • Performance:
    • Glide: On-demand processing reduces server load but may increase latency for first requests (mitigated by caching).
    • Database: Single media table may grow large; consider partitioning by created_at or user_id if >1M entries.
    • Storage: Cloud providers (S3) may incur costs for requests; optimize with CDN caching.
  • Concurrency:
    • File uploads: Filament’s FileUpload handles concurrent uploads, but disk I/O could become a bottleneck for high-volume uploads (e.g., user-generated content).
    • Glide routes: Ensure web server (e.g., Nginx) can handle high QPS for image processing.
  • Horizontal Scaling:
    • Stateless: Glide routes can be behind a load balancer; cache responses at the CDN level.
    • Database: Read replicas for media table queries.

Failure Modes

Scenario Impact Mitigation
**Glide
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.
besmartand-pro/php-quality-config
sentix/ai-chatbot
terminal42/code-quality-tools
codifyo/ts-generator-bundle
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity