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

Nova Relationship Selector Laravel Package

eminiarts/nova-relationship-selector

A Laravel Nova field that adds a searchable relationship selector to forms. It lets users pick related Eloquent models from a dropdown, making belongsTo and belongsToMany inputs easier without manually entering IDs or keys.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a Laravel/Nova extension whose entire public surface, as evidenced by 1.0.0, is a single fluent method ->inTabs() that binds Nova field/panel definitions to tab groups provided by eminiarts/nova-tabs. Architecturally this is a thin adapter, not a framework: it sits on top of two third-party contracts (Laravel Nova's field resolution pipeline and nova-tabs' tab registry). That is a favourable shape for us — small blast radius, no persistence, no queue or runtime services, and no schema ownership. The risk is not in the code volume but in the fact that we would be depending on a coupling between two packages we do not control.

Integration feasibility. Integration is a Composer install plus service-provider auto-discovery, followed by adding ->inTabs('Tab Name') to field definitions. There is no migration, no config publishing implied by the release note, and no data model change. Effort to a working proof-of-concept in a single Nova resource is measured in hours, not days. The gating item is version compatibility, not engineering effort.

Technical risk. Concentrated in four areas:

  1. Nova version coupling. Nova is a commercial, closed-source product with breaking changes across majors. Any package that hooks Nova's field pipeline inherits that volatility.
  2. Transitive dependency on eminiarts/nova-tabs. Our stability is now a function of a second community package's release cadence. If nova-tabs changes its registration API, ->inTabs() silently becomes a no-op rather than throwing — the worst failure class for a UI concern.
  3. Macro/mixin-style extension. If the method is registered as a fluent macro, it can collide with same-named methods on other packages or on Nova itself, and collisions surface at render time, not install time.
  4. Maturity. 1.0.0 with a single documented feature and no prior assessment history means zero track record. We are effectively the first production cohort.

Key questions.

  • Which Nova major versions and which eminiarts/nova-tabs versions are supported, and is that range declared in composer.json or merely "tested against"?
  • Does ->inTabs() fail loudly (exception) or silently (ignored) when nova-tabs is absent or mismatched?
  • Is the method added via macro, mixin, or trait, and what happens on a name collision?
  • Who maintains the package — individual or organisation — and what is the issue/PR response history?
  • Does the package do anything beyond tab placement (ordering, visibility, authorization), and is that behaviour documented?
  • Is there a test suite, and does CI cover the Nova versions we run?

Integration Approach

Stack fit. Direct fit for any Laravel application running Nova that already groups fields into panels and wants tabbed layouts. If we do not run Nova, or do not run nova-tabs, this package has no purpose for us — that is the first decision gate, and it is a product decision before it is an engineering one.

Migration path. Additive and reversible. composer require in a branch, annotate fields in one low-traffic Nova resource, verify rendering, then expand. Because the feature is presentational, rollback is a composer remove plus reverting the field annotations — no data remediation, no backfill, no dual-write period. This is the cheapest possible class of change and should be treated as such: timebox it, do not put it through a heavyweight design review.

Compatibility. Three version axes must be pinned and verified before merge: Nova major, eminiarts/nova-tabs, and PHP/Laravel. Lock all three in CI. I would require an explicit supported-version matrix in the README or composer.json; absent that, treat compatibility as unverified and confirm empirically in a throwaway branch before committing to the dependency.

Sequencing.

  1. Confirm Nova + nova-tabs are already in the stack and on supported versions.
  2. Spike: one resource, one field group, dev environment.
  3. Verify silent-failure behaviour by deliberately removing nova-tabs and observing the result.
  4. Add a smoke test or at minimum a documented manual check to our Nova upgrade checklist.
  5. Roll out to remaining resources only after the next Nova or nova-tabs upgrade has passed once with the package in place — that upgrade is the real compatibility test.

Operational Impact

Maintenance. Low ongoing code maintenance, non-trivial dependency maintenance. We inherit an obligation to track two upstreams rather than one, and the package itself may lag either of them. Budget a small recurring line item for version bumps rather than a one-off install cost.

Support. Community-supported, no vendor SLA, single-feature 1.0.0. If the maintainer goes quiet we cannot escalate; our mitigations are (a) vendor the method into our own codebase if it is genuinely a handful of lines, or (b) accept that we can drop it and flatten the affected resources back to panels. Because the feature is cosmetic, the exit cost is genuinely low — this is the package's strongest operational property and the main reason to tolerate its immaturity.

Scaling. Negligible runtime cost: the method affects how Nova composes field definitions, not query volume or request throughput. Scaling concerns are organisational, not technical — the number of resources and developers touching tab annotations grows, and conventions for tab naming and grouping will drift without a written standard.

Failure modes.

  • Silent no-op: nova-tabs missing or incompatible; tabs simply do not appear. Highest likelihood, lowest severity, hardest to notice.
  • Fatal at boot: macro registration or service provider failing after a Nova upgrade. Low likelihood, high severity, affects the whole admin panel.
  • Layout corruption: fields landing in the wrong tab or duplicated when nested inside panels. Cosmetic but erodes trust in the admin UI.
  • Version skew across environments: one environment resolves a compatible nova-tabs, another does not. Mitigated by committing composer.lock, which we should treat as mandatory here.

Ramp-up. Hours for a Laravel developer already fluent in Nova. The unfamiliar concept is nova-tabs, not this package. Document the tab-naming convention and the supported version matrix in the team wiki; that documentation is worth more than any onboarding session, because it is what prevents the layout-drift failure mode.

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.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route