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 Dynamic Page Title Laravel Package

klepak/nova-dynamic-page-title

A Laravel Nova package for setting dynamic page titles in your admin panel. Customize browser tab and page headings per resource or screen, making navigation clearer and improving context for users across your Nova application.

View on GitHub
Deep Wiki
Context7

Getting Started

Install with Composer alongside Nova (the package is a thin Vue/JS layer; there is no PHP API to learn):

composer require klepak/nova-dynamic-page-title

Where to look first: the package's service provider and its compiled JS bundle. Confirm:

  1. It boots automatically via Laravel package discovery (check vendor/klepak/nova-dynamic-page-title/composer.json for extra.laravel.providers).
  2. If it doesn't, register the provider manually in config/app.php or your NovaServiceProvider::boot().

Check composer.lock and the package's composer.json for the laravel/nova version constraint before installing — this package was published in late 2020 and is almost certainly pinned to Nova 2.x/3.x. On Nova 4/5 it will not load.

First use case: verify the title actually changes during SPA navigation. Open Nova, click through Dashboard → a Resource index → a detail page, and watch the browser tab. A hard refresh and an in-app navigation should produce the same title; if only the refresh works, the Vue router hook isn't firing and the asset isn't loaded.

Implementation Patterns

  • Confirm the data source. The package subscribes to the Nova Vue router and reads the current route to derive a title. Before customizing, log the route object (this.$route) in a Nova tool or via the browser console to see what fields the package actually consumes — meta.title, name, or the resource label.
  • Per-resource titles. Nova's route names and meta are what drive the title. If a resource title looks wrong, adjust the resource's $title / label() in the resource class rather than patching the package — the title inherits from Nova's own labelling.
  • Compose with breadcrumbs/labels. If you already override the Nova page title via a small custom JS snippet in NovaServiceProvider::boot() (e.g. Nova::script('title', __DIR__.'/../dist/title.js')), remove it first; two document.title writers will race.
  • Pair with Nova::script() for edge cases. For pages the package doesn't cover well (custom Tools, dashboards), register a tiny additional script that sets document.title in a mounted() hook of a wrapper component.
  • Use it as the single source of truth. Standardize all tab-title formatting (e.g. "{page} — {app}") in one place so dashboards, tools, and resources stay consistent.

Gotchas and Tips

  • Version lock. Treat this as a Nova 2/3 package. Pin laravel/nova and the package together, or fork it. Testing on Nova 4+ without a fork is wasted effort.
  • Unmaintained. Last release Dec 2020, 11 stars, no CI. Assume no support for new Nova route structures; budget for a fork or replacement.
  • SPA timing. document.title updates after the Vue router resolves. If you're asserting titles in Dusk/Pest browser tests, add a waitFor on the title rather than checking immediately after visit().
  • Asset caching. php artisan nova:publish and your asset build step matter. A stale compiled JS bundle is the usual reason "the title stopped working after deploy."
  • Headless/SSR caveat. Nova is client-rendered, so crawlers and link previews (Slack, OG tags) see the default title, not the dynamic one. Don't rely on this for SEO or share previews.
  • Debugging. In the browser console: check window.Nova is present, confirm the package's JS is in the loaded bundle (view-source: / network tab), and set a breakpoint in the router afterEach hook to see the route being passed to the title logic.
  • Extension points are minimal. Because there's no PHP config, customization is essentially "fork the JS." If you need conditional title logic (e.g. include record name on detail pages), plan to copy the package's small Vue mixin into your own Nova tool rather than configure it.
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.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels