A FIELD GUIDE TO LARAVEL · VOLUME II · THE ECOSYSTEM
ENTRY II.17 · ADMIN PANELS
Nova
Laravel\Nova · Product · first recorded 22 August 2018, for Laravel 5.6 and the coming 5.7
A paid admin panel for an existing Laravel app. Each Eloquent model gets a resource class in app/Nova, and Nova draws the index, detail and forms from the fields that class declares, so the admin is code in your repo.
Specification
Kind Product, paid licence; a package from Laravel's private Satis repo
Interface Resource classes in app/Nova; Inertia 2 renders the panel at /nova
Client A browser, signed in through the app's own auth guard
Installed by composer require laravel/nova · nova:install · migrate
Voice nova:resource · nova:action · nova:lens · nova:user
Scales by One resource class per model; policies and the gate decide who sees what
Range Cloud: yes; Composer credentials for nova.laravel.com go in the build commands
Forge, VPS: yes; Composer credentials in site settings, key in NOVA_LICENSE_KEY
Vapor: yes; the build runs where vapor deploy runs, so the credentials live there
Neighbours
Spark is the other paid panel, but for your customers: plans, payment methods and invoices, on Cashier. Nova is for your own staff, a resource per Eloquent model. Nova draws every screen itself, on Inertia, so the resource classes in app/Nova are the part you write.
Field marks
NOVA_LICENSE_KEY
config/nova.php
app/Nova/
Gate 'viewNova'
Fig. II.17.1 · One resource, exploded
Parts
1 Model. An ordinary Eloquent model, App\Models\User. Nova needs no trait on it; Actionable is optional, for an action log.
2 Resource. app/Nova/User.php, made by nova:resource. Its $model names the model; its fields say what to show.
3 Fields. Text, BelongsTo, Boolean and the rest. One list drives the index, the detail page and both forms.
4 Actions and lenses. nova:action runs a task on selected rows, queued if it is ShouldQueue; nova:lens lists by a custom query.
5 Gate. viewNova in NovaServiceProvider. Any user may enter in local; elsewhere, only those the gate lets in.
6 Panel. Rendered at /nova by Inertia from the resource classes found in app/Nova. Nothing is registered by hand.
Hidden joinery
The licence check is skipped on localhost and local TLDs such as .test, and on staging., dev. and four other staging subdomains, so those copies need no key. Nova uses its own exception handler, not the app's. An action always receives a Collection, even for one row. Nova 5 can take a policy class of its own, made by nova:policy.
Every line checked against nova.laravel.com/docs (v5), its pricing page and Laravel News on 2026-10-08.
TITLE
Nova · one resource per model
SOURCES
nova.laravel.com/docs/v5/installation · nova.laravel.com/docs/v5/releases · nova.laravel.com/docs/v5/resources/the-basics · nova.laravel.com/docs/v5/resources/fields · nova.laravel.com/docs/v5/resources/authorization · nova.laravel.com/docs/v5/actions/defining-actions · nova.laravel.com/docs/v5/lenses/defining-lenses · nova.laravel.com · laravel-news.com/laravel-nova-release · laravel.com/cloud/docs/environments · forge.laravel.com/docs · docs.vapor.build · spark.laravel.com/docs/introduction
STATUS
Verified · 2026-10-08
SHEET
II.17 of 48
REV
A · 2026-10-08
DRAWN
BS
FINISH
All faces, including the back