pixelcreation/nova-field-sortable
Pixelcreation Nova Field Sortable adds drag-and-drop ordering to Laravel Nova fields, making it easy to reorder fields in the Nova UI. This lightweight package helps build more flexible, intuitive admin forms and resource layouts with minimal setup.
Architecture fit
This is a Nova field package — a presentation-layer extension to Laravel Nova's admin UI, not domain logic. It sits on top of spatie/eloquent-sortable (the maintained dependency that supplies the Sortable trait, sort_order column convention, and ordered scopes) and adds a drag-handle column to the Nova resource index. Architecturally it is low-invasiveness: adopting it means accepting one column convention (sort_order) on selected tables plus a Nova field registration. That is a reasonable pattern and independently useful even if the package is later dropped.
Integration feasibility
Mechanically trivial: composer require, add the trait to the model, add sort_order via migration with a deterministic backfill, register the field in fields(). Realistic effort is well under a day for a Nova-fluent developer. The blocker is not effort, it is version alignment and provenance, not code volume.
Technical risk — high, and mostly not about code quality
Key questions
naxon/nova-field-sortable? Is it published on Packagist, or would we pin a VCS commit?laravel/nova and spatie/eloquent-sortable, and does that constraint prevent an incompatible install or merely permit it?Stack fit
Laravel + Nova + spatie/eloquent-sortable. Assume Laravel 8/9-era and PHP 7.4/8.0 compatibility; treat Laravel 10/11 and PHP 8.2+ as unverified until tested. Fit is good only if we are on a Nova 3-era install; on Nova 4+ assume non-functional until proven otherwise.
Migration path (additive, no replacement)
sort_order column plus a deterministic backfill (ordered by existing created_at/id) in the same migration so no row is left null.Compatibility and alternatives
Maintain a small compatibility matrix (Nova major × Laravel × PHP) and record the verified cell. If the spike fails, the realistic options in preference order are: (a) evaluate an actively maintained Nova sortable field — outl1ne/nova-sortable is the obvious candidate to screen, since it tracks Nova 4/5; (b) build a thin in-house field over spatie/eloquent-sortable (~1–2 dev-days, and we own the upgrade path anyway); (c) fall back to a plain numeric sort_order text field — no drag affordance, zero dependency risk. Because the license is MIT, vendoring the fork's code as a starting point is legitimate, but only if we accept ownership explicitly.
Sequencing Spike → decision → backfill migration → single-resource rollout → documentation. Gate the whole thing on the Nova upgrade roadmap: if Nova 4/5 is within 18 months, do not build on this package.
Maintenance
Effectively unowned upstream; adopting it means we own it. Every Nova major becomes a small internal fork project. Budget that as recurring cost, not a one-off install. The one durable asset is the sort_order column convention, which survives dropping the package.
Support and ramp-up No vendor, no SLA, negligible community. Ramp-up for a Laravel/Nova developer is an afternoon — there is no new mental model beyond the spatie trait — but the knowledge will be concentrated in whoever ran the spike. Document the version matrix and the fork diff in the repo.
Scaling Drag-and-drop reorder is appropriate for bounded, curated lists — navigation menus, categories, homepage sections, FAQs — not high-cardinality tables. On large datasets the index listing and reorder interaction degrade, and bulk position rewrites get expensive. Keep it off any table expected to grow into the tens of thousands of rows.
Failure modes to watch
sort_order from manual inserts or seeders → unstable, non-deterministic ordering.How can I help you explore Laravel packages today?