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 Header Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Implementation Patterns

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.

Gotchas and Tips

  • Low score, small audience. At 0.08 with 10 stars, budget time to read the source. Check the last commit date, open issues, and whether it targets Nova 4 or 5. Version drift is the most likely failure mode.
  • Nova major-version compatibility. Nova 4 and 5 changed asset registration and layout structure. A header package built for Nova 3 will silently fail on Nova 4. Verify in composer.json constraints before installing.
  • Asset cache. Nova aggressively caches compiled assets. After install, run php artisan nova:publish and hard-refresh; also check public/vendor/nova for stale files.
  • Vite vs. Mix. If the package ships pre-built 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."
  • Registration order matters. 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.
  • CSS specificity. Nova's header styles are opinionated. Expect to need !important or a wrapper class to override padding/height. Scope your styles to .nova-header to avoid leaking into Nova's own chrome.
  • Don't fork Nova. If the package requires overriding layout.blade.php, you're coupling to Nova internals. Keep that override minimal and document the Nova version it targets.
  • Debugging checklist: (1) 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.
  • Extension points to look for in source: published config (for enabling/disabling per environment), a Blade slot or named section, and whether the component accepts props (env label, links, logo URL). If none exist, wrap the published view in your own partial rather than editing vendor files.
  • Fallback plan. If the package proves unmaintained, the same result is ~15 lines: register a 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.
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.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
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