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 Relation Manager Tabs Laravel Package

asignua/filament-relation-manager-tabs

A Filament plugin that adds tabs to relation managers, letting you group multiple relationship tables into one clean tabbed interface on resource pages. Simple setup and native Filament styling.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Package shape (inferred): A Filament 5 plugin that embeds a Relation Manager inside a tab/section of a Resource Edit/View page, with lazy loading, badge/tooltip metadata, and inline editing. It sits on top of Filament internals (Tabs, Livewire component parameter injection, Alpine attribute rendering) rather than on documented public APIs.

Architecture fit

  • Good conceptual fit for Filament-based admin panels: it fills a real gap (relation managers as tabs on the parent record page) without forking Filament or duplicating resource scaffolding.
  • Coupling is the concern. The release notes reference Filament's Livewire component always injecting record, Tabs reading badges in the nav and both dropdown loops, and two badge APIs (deferBadge() 5.3+, isBadgeDeferred() 5.6+). That is a dependency on framework internals and render-loop behaviour, not a stable contract. Expect recurring compatibility work every Filament minor.

Integration feasibility

  • Low effort: Composer install, register the plugin on the panel, add the tab to specific Edit/View pages. No data model changes, no migrations. A developer familiar with Filament can wire a first tab in well under a day.
  • The hard prerequisite is Filament 5.6+. Any environment on 5.0–5.5 cannot take this release; Composer will block it, which is the correct failure mode (the alternative, per the notes, was a runtime crash on every Edit/View page carrying a tab).

Technical risk

  • Information disclosure (fixed, but verify exposure): prior versions rendered the owner record as a record="{…json…}" attribute on the lazy placeholder. That is server-side model data emitted into the DOM of a hidden panel, reachable by anyone who can see the page and liable to land in screenshots, browser caches, log capture, and client-side error reports. If we have run any pre-1.1.1 version in a shared or lower-trust environment, treat this as a security review item, not a bug fix. Need to know exactly which attributes were serialized (relation manager pages typically operate on records the viewer is authorised for, but the parent record may carry columns the viewer shouldn't see).
  • Nested form semantics: the Enter-key fix shows the embedded manager's inputs were participating in the outer Edit page form submit, persisting half-edited records. That is a data-integrity defect class, not cosmetic, and it implies the form/DOM boundary between outer and embedded components is handled by convention and keydown.enter guards rather than by structure. Guards are brittle; a future Filament form refactor or a custom input we add could reintroduce it.
  • Constraint tightening: ^5.0 → ^5.6 is a breaking constraint change shipped in a patch version. Safe at install time, but it means the library's version numbers are not a reliable signal of breakage.
  • Behaviour change in a patch release: custom key: values containing & now throw InvalidArgumentException at render time. Rare, but a render-time throw on a tab means a 500 on the Edit/View page. Also note the documented rule previously claimed a stricter allowlist than the code enforced — documentation drift, now reconciled; anyone who wrote keys against the old docs is fine, anyone who relied on the old code may not be.
  • Bus factor / maturity: version 1.1.1, single-issue fix list, one external contributor credited. Assume a small maintainer surface and that Filament upgrades will land here with a lag.

Key questions

  1. What Filament versions are in production and in our other panels? Anything below 5.6 blocks this release and needs its own upgrade track.
  2. Have we deployed a pre-1.1.1 version anywhere? If yes, run a disclosure assessment on the record attribute (which columns, which audiences, retention in logs/APM).
  3. Do we have custom key: values, and do any contain &? Grep the codebase before upgrading.
  4. Does anything rely on the old undocumented key allowlist (i.e. keys we assumed were invalid but silently worked)?
  5. Do we pass ->data(['record' => …]) anywhere? The fix preserves that override path — confirm we don't depend on the old implicit injection.
  6. What is the memoization cache scope (ManagerReference::memoized())? Per record and page — confirm badges don't go stale after an inline edit inside the tab changes the counted relation.
  7. Is there a CI matrix pinning Filament minors, or will we discover the next internal-API break in production?

Integration Approach

Stack fit

  • Laravel + Filament 5.6+ panel. No database, queue, or storage implications. Fits existing Filament resource conventions; no change to authorisation model beyond what the host Relation Manager already enforces.
  • Only viable in panels we control end-to-end. Not appropriate for a panel whose Filament version is governed by another team's release cadence.

Migration path

  1. Inventory usages of the package: which resources, which tabs, which are lazy, which use badges/tooltips, which use custom key: values or ->data(['record' => …]).
  2. Raise the floor: upgrade Filament to ≥5.6 on the target panel first, in isolation, and confirm no regressions before touching this package. If we cannot move off 5.0–5.5, stay on the previous package version and assess the JSON-leak exposure — don't sit on it unknowingly.
  3. Key audit: scan for & in custom keys and migrate to safe characters. Treat this as a required pre-upgrade step, since the failure is a render-time exception on a page users depend on.
  4. Upgrade the package, then QA the specific surfaces the changelog touches: lazy placeholder markup (confirm no record= JSON in the DOM), Enter key inside embedded search/filter/inline-edit inputs (confirm the outer form does not save), badge and tooltip rendering in both the tab nav and any dropdown overflow, and inline-edit → badge refresh.
  5. Roll out behind the normal release train. No data migration, so rollback is a Composer revert — but note that reverting reinstates the disclosure and form-submit defects, so rollback should be a short-lived, monitored action.

Compatibility

  • Forward: fine on Filament 5.6.x. Unknown on 5.7+/6.x; the package's reliance on internal Tabs iteration order and badge APIs is exactly what will move.
  • Backward: breaks below 5.6 (hard block) and breaks keys containing & (runtime). Both are acceptable if sequenced, both are surprises if not.
  • Our own additions on top (custom badge callbacks, custom tab contents) are not covered by the changelog; they need explicit test coverage, not just the library's happy path.

Sequencing Filament floor → key audit → package upgrade → targeted QA on DOM output, nested-form Enter behaviour, badge resolution → security sign-off on the disclosure item → deploy. Parallelisable except that the security sign-off should not wait for the upgrade if we have pre-1.1.1 in production.

Operational Impact

Maintenance

  • Low code footprint, but the maintenance cost is externalised to Filament releases. Budget a compatibility review on every Filament minor bump; this release is the second consecutive one driven by internal API drift.
  • Documentation drift already occurred once (the key rule). Assume the README is a lagging indicator and verify constraints against the changelog when upgrading.
  • Pin the version explicitly rather than floating on ^1.1, given that patch releases here can carry constraint changes and render-time behaviour changes.

Support

  • Failure modes are user-visible admin breakage (500 on Edit/View, tabs opening empty, forms saving half-edited records) rather than silent degradation, which is good for detection and bad for blast radius — these are the pages staff work in all day.
  • Support burden concentrates on: keys (new exception path), Filament version mismatches, and any nesting of this component inside custom forms we build later.
  • The security item needs an owner and a documented position (deployed or not, remediated or not), not just a changelog line.

Scaling

  • The memoization change (badge, colour, tooltip resolved once per record per page instead of up to three times per render) matters on tab-heavy resources and on any dropdown list enumerating many records — that is the realistic scaling pressure here, not request volume.
  • Lazy loading is the right default; keep tabs lazy on resources whose relation managers are expensive, and be aware that the badge resolution still runs per record even when the panel is lazy.
  • No new infrastructure, no shared state, no background work. Scaling risk is effectively UI-render cost and framework-version breadth, not throughput.

Failure modes

  • Render-time exception on an invalid key: → whole Edit/View page fails, not just the tab. Validate keys in code review.
  • Nested-form submit leakage → partially edited records persisted by an Enter keystroke. Mitigated by 1.1.1 for known inputs only; any custom input we add inside the embedded manager should be explicitly checked.
  • Data exposure via DOM attributes → mitigated, but the pattern (model serialised into markup) is one the package has now demonstrated it can produce. Add a regression check that asserts no model JSON appears in rendered tab markup.
  • Badge staleness → memoization is per record per page; if an inline edit changes the counted relation, confirm the badge refreshes on the next page load at minimum, and decide whether in-page staleness is acceptable.
  • Silent version skew → a panel left on an older Filament pins the package backwards and quietly keeps the disclosure defect. Track this as an inventory problem, not a per-team choice.

Ramp-up

  • Low for anyone fluent in Filament resources and Relation Managers: one page of README, one registration call, one tab definition. Half a day to productive, inclusive of reading the key constraints.
  • The ramp-up cost that matters is not learning the API but learning the failure surface: engineers need to know that Enter inside the embedded manager is a guard rather than a structural boundary, and that keys have a decode-time constraint imposed by Alpine attributes. Put both in the internal Filament guidelines rather than leaving them in the package changelog.
  • For the TPM: this is a small, useful, tightly-coupled dependency. Adopt it deliberately, pin it, treat Filament upgrades as a joint change, and close out the disclosure question before this release is marked done.
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.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox