opscale-co/nova-api
A Laravel Nova package that adds a customizable REST API layer for your Nova resources, with authentication, filtering, sorting, pagination, and relationship support for exposing Nova-managed data to external apps.
Architecture fit. opscale-co/nova-api is a thin HTTP adapter over Laravel Nova's resource metadata. It registers a service provider, reads your existing app/Nova/* resource classes, and exposes them as index/show/store/update/destroy endpoints, reusing Nova fields for serialization and Nova policies for authorization. That is a strong fit for the common case: a Laravel monolith or modular monolith where Nova is the operational back office and the entities you want to expose already have a Nova resource. The architectural bet is that the admin panel definition is the API contract — one place to maintain fields, filters, and permissions. That bet is also the primary risk: the API's shape is derived from UI-oriented metadata, so response payloads, relationship expansion, and field resolution semantics are inherited from Nova rather than designed for API consumers.
Integration feasibility. Mechanically low-effort: composer require, publish the config, set a route prefix and per-resource exposure flags, wire the token middleware, ship. Realistic first-endpoint estimate is days, not weeks, assuming the token model matches your existing auth stack. The gating factor is not effort but evidence: 0 stars, 0 dependents, and documentation that is a one-paragraph description plus a changelog. You would be among the first production adopters, which means the integration work includes reading the source to answer questions the README does not.
Technical risk. Several, in rough order of severity:
resolveUsing/computed fields). A Nova major upgrade can silently reshape your external API surface with no versioning boundary between them. There is no API version in the URL, so "v1" of your API is effectively "whatever Nova 4/5 currently does."opscale-co/actions ^4.0, categorized as a feature, with no migration notes or compatibility matrix. For a package in the request path, that is a maintenance-discipline signal worth pricing in. It also confirms the surface extends beyond CRUD into Nova action invocation — which raises the audit and idempotency bar considerably.canSee, canSeeWhen) is a UI construct. Whether those gates are enforced during serialization is the single most important thing to verify, because the failure mode is silent field leakage to a partner.Key questions for the spike.
composer.json constraints — Nova 4 vs. 5, Laravel 10/11/12, PHP floor?throttle middleware?opscale-co/actions 4.0, and is the release process automated semantic-release?Stack fit. Only viable if Nova is deployed and is the system of record for the target entities. It presumes a conventional Laravel app with routes/api.php or equivalent, standard middleware groups, and an auth stack the token middleware can plug into. It does not fit a headless/decoupled architecture, a Nova-being-retired roadmap, or any service that needs a contract owned independently of the admin panel.
Migration path. There is no data migration; this is additive surface area. If bespoke API controllers already exist for the same entities, run the package in parallel behind a distinct prefix, shadow-compare payloads and authorization decisions against the incumbent for a defined window, then retire the hand-written controllers per resource. Do not cut over wholesale.
Compatibility. Three axes to pin before writing code: Nova major version, Laravel major version, and the transitive opscale-co/actions constraint. Also audit middleware collisions — the package's configurable middleware stack must not double-apply session/CSRF or conflict with existing throttle/auth groups — and route-prefix collisions with the existing api.php.
Sequencing.
nova-api and opscale-co/actions bump as a regression-test event, not a routine update.Maintenance. Assume you will eventually fork or vendor this. A 0-star, single-maintainer package sitting in your request path should be pinned to exact versions, tracked against your Nova upgrade cadence, and have a named internal owner. The realistic maintenance burden is not patching the package but re-validating your external contract every time Nova moves.
Support. Self-support. No community, no issue corpus, no vendor SLA. Budget engineering time to read the source rather than search for answers, and designate one engineer as the internal authority.
Scaling. The package inherits Nova's Eloquent query patterns. Expect N+1 behavior on relationship fields unless eager loading is explicit, and expect index endpoints to be DB-bound. There is no caching layer and no evidence of query-cost controls beyond pagination — cap page size in config and enforce it in middleware. This is appropriate for hundreds to low thousands of requests per minute against a well-indexed database, not for consumer-scale or latency-sensitive traffic.
Failure modes to design against.
store/update may accept shapes the admin UI would reject, or vice versa.opscale-co/actions ^4.0 move is exactly this class of event.Ramp-up. Low. Any Laravel-fluent engineer can be productive in a day; the learning curve is Nova's metadata model, not the package. The organizational ramp-up is the harder part: getting product and partner-facing stakeholders to accept that the external API's shape is governed by an internal admin UI, and that changes to Nova resources are therefore changes to a published interface.
How can I help you explore Laravel packages today?