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 Modal Relation Managers Laravel Package

guava/filament-modal-relation-managers

Open any relation manager inside a modal with a Filament action, from table rows, schema entries, or page headers, no edit page needed. Supports Filament 3, 4, and 5.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This is a narrow, additive UI affordance — not a framework, not a persistence layer, not an authorization layer. RelationManagerAction extends Filament's existing action/modal primitives and mounts a stock Filament RelationManager class inside the modal's Livewire lifecycle. Practically: you author relation managers exactly as you do today and gain a second mount point (table row action, schema component, page header action). No migrations, no new tables, no service-provider behavior that alters the request lifecycle, no custom relation abstraction competing with Eloquent.

The decision-relevant property is substitutability. A relation manager in a modal is the same class reachable from the record edit page, so removal of the package restores prior behavior with zero data migration and zero domain-layer refactor. The 1.3.0 removal of the CanBeEmbeddedInModals trait is a positive signal: no opt-in marker is required on your relation manager classes, so coupling is confined to the single line where the action is declared. That is a small blast radius for a UI dependency — the right shape for something you may need to fork.

Integration feasibility. Two prerequisites decide whether this is a half-day task or a sprint line item:

  1. composer require guava/filament-modal-relation-managers — trivial. MIT, no credentials, no external service, no telemetry.
  2. A custom Filament theme with @source '../../../../vendor/guava/filament-modal-relation-managers/resources/**/*' added to theme.css, so modal-specific CSS compiles into your asset bundle.

Item 2 is the real gate and it is understated by the one-line installation framing. Panels running stock Filament with default assets must first create a custom theme, register it on the panel, and wire it into the build. That is a build-system change: CI/CD review, a new compiled artifact, and a deploy-ordering dependency between compiled assets and PHP. Not hard, but a different class of change than composer require, and the item most likely to be underestimated at estimation time. If your panel already has a custom theme, this collapses to one line and roughly an hour of work.

Technical risk.

  • Version lock-step with Filament (medium, planned). Plugin majors are hard-pinned to Filament majors — 1.x → Filament 3, 2.x → Filament 4, 3.x → Filament 5. No plugin version spans multiple Filament majors. A Filament upgrade therefore forces a coordinated plugin major upgrade in the same change window. The package has actually shipped those majors (v2 for Filament 4, v3 for Filament 5), and each was marked as a breaking change at the plugin level. Net: two upgrade calendars become one release train. Acceptable and foreseeable — but it must be on the upgrade checklist, not discovered mid-upgrade.
  • Silent CSS failure mode (medium-high, self-inflicted). Styling is sourced from vendor files compiled into your theme. A stale, skipped, or misordered asset build yields a visually broken modal with no runtime error and no failing test. This is the highest-severity risk in the package and it is entirely inside your control: pin the @source directive, make the asset build a hard CI gate, and add a smoke test that asserts a modal renders.
  • Modal-context fidelity (low, actively worked). The changelog shows real iteration in exactly this area — pageClass passing (1.4.0), the CanBeEmbeddedInModals trait removal (1.3.0), and styling fixes against Filament v4 (f9a28ce). Reading this positively: the maintainer is fixing fidelity bugs, not accumulating them. Reading it cautiously: relation managers that assume full-page context (custom page headers, breadcrumbs, $this->getOwnerRecord() assumptions, nested relation managers) are the ones most likely to misbehave. Budget a spike to validate your two or three most complex relation managers before committing to broad rollout.
  • Supply-chain surface (low-medium). 79 stars, 0 dependents, effectively a single-maintainer package from an agency (GuavaCZ, Lukas Frey). Small surface area mitigates this: the package is a thin wrapper, so forking or vendoring is a realistic contingency rather than a rewrite.

Key questions.

  1. Does every target panel already have a registered custom Filament theme, and does CI build it? If not, who owns that change?
  2. Which relation managers will be embedded, and does any of them depend on full-page context (page class methods, breadcrumbs, nested relation managers)?
  3. What is our Filament major upgrade cadence, and will we accept the coupled plugin major bump as a standing constraint?
  4. Do embedded relation managers inherit the correct policy/authorization checks from RelationManager::canViewForRecord()? We need to confirm per-row visibility gating is not weakened by the modal mount point.
  5. Is composer pinned to a caret or an exact version, and do we have a documented fork-and-vendor procedure if maintenance stalls?

Integration Approach

Stack fit. Requires a Filament panel (3.x, 4.x, or 5.x) on Laravel, with Livewire and Tailwind already in place — which a Filament app has by construction. Laravel 13 support landed in 3.1.0, so current Laravel is covered. There is no database, queue, cache, or third-party API dependency; the package's runtime footprint is one action class plus view/blade assets. If the application is Filament-based, this fits with no architectural persuasion required. If it is not Filament-based, the package is irrelevant — this is strictly an intra-Filament ergonomics improvement, not a way to introduce relation management.

Migration path. There is nothing to migrate. The pattern is additive and reversible:

  • Adopt: add the composer dependency, add the @source line to the existing theme, run the asset build.
  • Apply: attach RelationManagerAction::make(...)->relationManager(XRelationManager::class) to the places where navigating to an edit page is currently the friction point — most commonly table record actions on the parent list page.
  • Revert: delete the action lines; the relation managers are untouched and remain reachable from the edit page. Remove the composer dependency and the @source line at leisure. No data shape changes, so rollback is a code revert with no backfill.

Because the pre-existing "navigate to edit page → relation manager tab" path remains fully functional, you can adopt this incrementally, per-resource, and even A/B it behind a feature flag on a single list page without splitting the codebase.

Compatibility. Three axes to confirm before pinning:

  • Filament major ↔ plugin major is a hard pairing (3↔1.x, 4↔2.x, 5↔3.x). Pin the plugin major explicitly in composer.json and record the pairing in your upgrade runbook.
  • Laravel — 3.1.0 added Laravel 13; earlier plugin majors may not cover it. Verify the resolved plugin version supports your Laravel version before assuming the latest Filament major is safe.
  • Tailwind/theme pipeline — the @source directive is a Tailwind v4-era construct. If your custom theme still uses Tailwind v3 content config, the integration is different than the README implies and needs verification against your actual theme scaffold.

One additional compatibility check that is easy to miss: if your project uses a shared theme compiled once for multiple panels, confirm the @source line lands in the theme that every panel using the action actually loads.

Sequencing. Proposed order, deliberately front-loading the risky and cheap-to-verify steps:

  1. Spike (1–2 days). Install on a branch. Create or reuse a custom theme, add the @source line, build assets. Attach the action to exactly one list page and embed the most complex relation manager in the codebase — ideally one with custom actions, bulk actions, and a nested relation. This single test surfaces both the CSS risk and the modal-fidelity risk at once.
  2. Authorization review (0.5 day, parallel). Confirm row-level visibility and per-record policies behave identically in the modal mount as on the edit page. This is a security check, not a functional one; do not let it slip to post-rollout.
  3. Build gating (0.5 day). Make the theme build a required CI step and add a deploy-order guard so PHP never ships ahead of compiled assets.
  4. Pilot rollout (1 sprint). Convert 2–3 high-traffic resources. Instrument support tickets and watch for styling complaints and "actions inside modal don't work" reports.
  5. Broad rollout. Convert remaining resources; document the pattern in the internal Filament guidelines so new resources use it by default rather than by discovery.

Steps 1–3 are the whole risk; steps 4–5 are mechanical. Do not fund 4–5 until 1–3 are green.

Operational Impact

Maintenance. Low, with one standing constraint. The package has no runtime state, no scheduled jobs, no migrations to reconcile. The maintenance burden is entirely: (a) upgrading the plugin major whenever Filament majors upgrade, and (b) keeping the @source directive and theme build healthy. Item (a) is real work — the 2.0.0 and 3.0.0 releases were both flagged as breaking changes — but it is co-scheduled work that would happen anyway as part of the Filament upgrade, not net-new overhead. Item (b) is a one-time setup plus CI enforcement.

Bus factor is the honest caveat: a single primary maintainer, 79 stars, 0 dependents. Mitigate cheaply by vendoring the package path into the repo or keeping a documented fork procedure. The thinness of the wrapper makes this a genuine option rather than a theoretical one — the class surface is small enough that a fork is a day of work, not a project.

Support. Internal support load should be near zero for the integration itself and concentrated in two predictable buckets: "the modal looks broken" (a theme build problem, not a package problem — point the runbook at the asset pipeline first) and "the action inside the modal doesn't behave like it does on the edit page" (a modal-context problem — check whether that relation manager relies on page-level context). Both have a single diagnostic first step, which is what keeps tier-1 support cheap. External support is community-only via GitHub issues; there is no commercial SLA, so treat escalation to the maintainer as best-effort and rely on the fork path for anything time-critical.

Scaling. Renders inline via Livewire inside a modal, so the cost is bounded by whichever relation manager is embedded — same query and pagination profile as the edit page version, not an amplified one. The relevant scaling nuance is user behavior, not infrastructure: making relations reachable from a list row invites much heavier use of those pages than a tab buried on an edit screen. Expect increased query volume and heavier table pagination on the parent list pages. If an embedded relation manager is unpaginated, or if its table loads a wide relation eagerly, that becomes visible at scale in a way it wasn't before. Audit the embedded relation managers' $table->paginated() and eager-loading before broad rollout.

Failure modes. Ranked by likelihood × severity:

Failure Signal Severity Mitigation
Theme build skipped / stale / @source missing Modal renders unstyled; no error, no failing test High Required CI build step; deploy-order guard; visual smoke test
Filament upgraded without plugin major bump Resolve/compile error or broken modal internals Medium Pin plugin major; add to upgrade runbook as a coupled item
Relation manager assumes full-page context Broken actions, wrong owner record, missing breadcrumbs Medium Spike against your most complex relation manager before rollout
Authorization behaves differently in modal mount Records visible that shouldn't be Medium Explicit policy/visibility test in step 2, pre-rollout
Maintainer stalls No upstream fixes Low Fork/vendor procedure documented and rehearsed
Query load on parent list pages Slow list pages after adoption Low Verify pagination and eager loading on embedded relation managers

The first row is the one that bites. It is the only failure mode that is silent, and it is the only one that cannot be caught by the application test suite as normally configured — so the CI gate is not optional hardening, it is the control.

Ramp-up. For a developer already fluent in Filament, this is under an hour of reading and one action definition to be productive — the API is a single fluent builder on a Filament action, and the README's four-line example is essentially the whole surface. The ramp-up cost is not in the package; it is in the theme scaffolding for teams that have never built a custom Filament theme. Budget that as a distinct, front-loaded task with its own owner, and do not let it hide inside "install the package." Total organizational ramp-up, assuming a theme exists: roughly one day for the first developer and no formal training beyond a short internal note documenting the @source line, the version-pairing rule, and the "broken modal = check the asset build first" triage step.

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.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log