arsenaltech/nova-header
arsenaltech/nova-header adds a customizable header to Laravel Nova, making it easy to surface branding, navigation, and quick links in your admin panel. Simple to install and configure for a more polished Nova experience.
This is a small-footprint package (10 stars, low assessment score), so treat the README and the src/ directory as the source of truth before wiring it into a production Nova app. Start there, not with assumptions from the package name.
Minimal setup, in order:
Install into a Nova-enabled app
composer require arsenaltech/nova-header
Nova packages usually auto-discover a service provider; if not, register the provider in config/app.php.
Publish whatever the package exposes
php artisan vendor:publish --provider="Arsenaltech\NovaHeader\NovaHeaderServiceProvider"
Inspect the publish tags — a header package typically publishes a Blade view, a config file, and/or compiled JS/CSS assets.
Register it with Nova — usually one of:
// app/Providers/NovaServiceProvider.php
Nova::script('nova-header', __DIR__.'/../../vendor/arsenaltech/nova-header/dist/js/header.js');
Nova::style('nova-header', __DIR__.'/../../vendor/arsenaltech/nova-header/dist/css/header.css');
Or via a tool/card registration depending on what the source actually ships.
Verify with php artisan nova:check and a hard refresh of /nova.
First use case: a branded top banner or custom dashboard header (logo, environment label, quick links, support contact) rendered above Nova resources without forking Nova's layout. That's the job this package is scoped to.
Nova header packages all boil down to getting a custom view or component rendered in the shell above Nova's main content. Common patterns to expect:
Service-provider registration
public function boot()
{
Nova::serving(function (ServingNova $event) {
Nova::script('nova-header', __DIR__.'/../dist/js/header.js');
Nova::style('nova-header', __DIR__.'/../dist/css/header.css');
});
}
Keep this in your own NovaServiceProvider if you need to gate it by environment.
Blade override / view partial If the package publishes a view, point it at your branding:
{{-- resources/views/vendor/nova-header/header.blade.php --}}
<header class="nova-header">
<img src="{{ asset('img/logo.svg') }}" alt="{{ config('app.name') }}">
<span class="env-badge">{{ app()->environment() }}</span>
</header>
This is the cleanest path for static branding — no JS needed.
Environment-conditional rendering Common pattern: only show the banner in non-production, or badge staging clearly.
if (! app()->isProduction()) {
// register header with an env label prop
}
Integration with existing tools/cards
If it ships as a tool, add it in NovaServiceProvider::tools():
public function tools()
{
return [
new \Arsenaltech\NovaHeader\NovaHeader,
];
}
Tools render on their own route; a header is usually better as a script/style injection or layout partial than as a tool — confirm which the package supports.
Wiring into the layout
Nova 4+ allows view publishing. If the package relies on slotting into the layout, you may need to publish vendor/nova/resources/views/layout.blade.php and include the component. This is the highest-friction path and the one most likely to break on Nova upgrades — prefer script/style injection if both are options.
composer.json constraints before installing.php artisan nova:publish and hard-refresh; also check public/vendor/nova for stale files.dist/ assets, you don't need to rebuild. If it ships only src/, you'll need Node and the package's build toolchain — often undocumented and a common source of "it installed but nothing renders."Nova::script calls later in the boot sequence override earlier ones with the same key. If your own NovaServiceProvider also registers scripts, ensure ordering doesn't clobber the header.!important or a wrapper class to override padding/height. Scope your styles to .nova-header to avoid leaking into Nova's own chrome.layout.blade.php, you're coupling to Nova internals. Keep that override minimal and document the Nova version it targets.php artisan nova:check; (2) browser console for 404s on header.js/header.css; (3) view-source to confirm the script tag is present; (4) check storage/logs/laravel.log for provider boot errors.Nova::script/Nova::style pair pointing at your own compiled assets, or publish Nova's layout and drop in a Blade partial. Keep that option in mind before investing in workarounds.How can I help you explore Laravel packages today?