njxqlus/filament-relation-manager-component
Use Filament Relation Managers anywhere in your app, not just on resource pages. Drop them into forms, schema components, or tabs with a simple RelationManager component, control lazy loading, and optionally publish the package views.
Architecture fit
Njxqlus\Filament\Components\Forms\RelationManager and ...\Infolists\RelationManager, both fluent (->manager(Class::class)->lazy(bool)) schema components that let an existing Filament RelationManager class be mounted anywhere a schema slot exists — Tabs, form schemas, infolists, custom layouts.Integration feasibility
composer require njxqlus/filament-relation-manager-component, no migrations, no config file, no service provider wiring beyond package discovery. Views are optionally publishable via vendor:publish --tag="filament-relation-manager-component-views".form()/infolist() schema. No data-model or routing changes.Technical risk
ownerRecord assignment for modal/slideover contexts. Expect a break-or-fix cycle on every Filament major, and occasionally on minors.wire:key uniqueness, and multiple-instance isolation on the same page must be validated. This is the highest-probability source of subtle UI defects (table state bleeding between tabs, pagination/search state collisions).canViewAny, canAccess, resource policy checks) that normally guards the relation manager slot. Table-level and action-level policies still apply, but the outer guard is now your schema's responsibility. This needs explicit review before any form-based (mutating) usage.laravel-shift bot PRs for Laravel 13 compatibility. Low popularity means low field-testing, but the surface area is small (~2 component classes plus views) and MIT-licensed, so forking or vendoring is a realistic fallback measured in hours, not weeks.Key questions
canViewAny, canCreate, canAttach, and multi-tenancy ownerRecord resolution?getOwnerRecord() derived from the enclosing form's record, and what is the behavior on CreateRecord pages where no persisted owner exists yet?Stack fit
Versions / Stands / Contexts tab pattern is exactly the shape to look for.Migration path
RelationManager classes are consumed unchanged, so the migration is purely additive at the schema level. There is no data migration, no route change, and no deprecation of the current relation manager registration — you can run both paths side by side.Compatibility
^1.1 for Filament 3, ^2.2 for Filament 4/5) and lock it in composer.json with an explicit constraint rather than a floating range. Add a CI job that resolves the package against your pinned Filament version so a routine composer update cannot silently drag in a breaking combination.composer.json in the repo directly — the release notes claim Laravel 13 compatibility but do not state a PHP floor.Sequencing
lazy(true) and measure. No mutations yet.CreateRecord pages until question 5 is answered — owner-record semantics are least well-defined there.Maintenance
Support
Scaling
lazy(false) multiplies first-paint query count and HTML payload roughly linearly — this is the main scaling hazard, and it is entirely configurable on our side.lazy(true); treat lazy(false) as an explicit, justified exception (e.g., a single tab where the extra round-trip is user-visible).Failure modes
Ramp-up
How can I help you explore Laravel packages today?