igrik/nova-inline-relationship
A Laravel Nova field for managing has-one and belongs-to relationships inline: search, create, and link related records directly from the parent form without leaving the page. A simple drop-in alternative to Nova's default relationship fields.
Architecture fit. This is a Laravel Nova-only extension. It sits at the presentation layer of Nova's field system, turning related-model attributes into columns/properties rendered on the parent resource (e.g. surfacing user.company.name or joined hasMany values directly in a resource table). That makes it a shallow, low-blast-radius dependency — it does not touch Eloquent models, migrations, queues, or auth. The trade-off is that its entire value depends on Nova's extension surface (Field resolution, resolveUsing/displayUsing, meta, and the Vue/Inertia component layer), which is closed-source, commercially licensed, and has historically broken across major versions (Nova 4→5 was a full Vue 3/Inertia rewrite). A package of this shape is effectively a bet on Nova internals remaining stable.
Integration feasibility. Mechanically trivial: composer require, register in a Nova service provider or use the field directly in a Resource::fields() method, no migrations or config publishing expected. The real friction is epistemic — zero stars, zero dependents, no observable CI, and Nova's private Composer distribution means public CI cannot even install the dependency. There is no meaningful community signal to substitute for reading the source ourselves.
Technical risk.
Text::make('Company', 'company.name')), and BelongsTo fields cover most sortable/filterable cases. Until we read the source, the package's actual delta over stock Nova is unproven — the most likely outcome is that it saves a small amount of boilerplate for hasMany flattening or adds sorting/filtering on dotted columns.$resource::with() / relatableQuery), a 50-row index becomes 51+ queries. This is the single highest-probability production incident.Key questions.
composer.json or only implied?with() on the resource?Stack fit. Only viable if Nova is already licensed and in use; there is no non-Nova fallback. It is additive — no changes to application domain code, no migration, no queue or config footprint. Suitable for internal admin tooling where a broken panel is an inconvenience, not a customer-facing outage.
Migration path. Do not composer require directly. Fork into a private VCS or vendor the source into packages/, pin an exact commit, and treat it as first-party code we now own. If the delta over native Nova proves small after source review — which I expect — the cheaper path is to reimplement the specific field in ~100 lines inside our own Nova namespace and skip the dependency entirely.
Compatibility. Gate on Nova version: verify against our exact installed Nova release in a staging branch before any resource adopts it. Add a composer.json constraint tight enough to fail loudly on Nova upgrades rather than degrade silently. Verify PHP/Laravel matrix against our runtime.
Sequencing.
Maintenance. Effectively orphaned — zero dependents means zero downstream pressure to fix breakage, and a single author means bus factor of one. We should budget this as internally owned: an estimated 1–2 days per Nova major upgrade to re-verify, plus source review time up front. That recurring cost is the strongest argument for reimplementation.
Support. No community, no issue history to mine, no documentation surface implied by the repo metadata. Internal Slack/on-call is the only escalation path.
Scaling. Fine at the code level, risky at the query level. A flattened relation column on a high-row-count index without eager loading degrades linearly with page size and can turn a 200ms admin page into multi-second responses; under Nova's pagination this is bounded per page but compounds with the number of flattened columns. Enforce eager loading at the resource level and add a regression test rather than trusting the package.
Failure modes.
Ramp-up. Low for a Laravel-fluent engineer — half a day to read and exercise. Low for the team to consume; the effort concentrates in the initial source review and the ongoing ownership burden, not in learning an API.
Bottom line for the TPM: treat this as a code snippet, not a dependency. Fund a half-day spike with a reimplementation as the default outcome, and only adopt the fork if it demonstrably handles sorted/filtered relationship columns in SQL — the one thing native Nova makes awkward.
How can I help you explore Laravel packages today?