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 Categorise Resources Laravel Package

alexbowers/nova-categorise-resources

A Laravel Nova package that lets you categorise resources into labelled groups in the Nova sidebar. Keep large admin panels tidy by organising related resources under custom headings for faster, more intuitive navigation.

View on GitHub
Deep Wiki
Context7

Getting Started

Before anything else, check your Nova version. This package is deprecated — Nova 1.0.18 and later ship native resource grouping via a public static $group = '...' property on each Resource class. If you're on Nova >= 1.0.18, you should not install this package; use the built-in $group property instead. Only reach for alexbowers/nova-categorise-resources if you're pinned to an old Nova release (< 1.0.18) and cannot upgrade.

Minimal steps for a legacy install:

  1. composer require alexbowers/nova-categorise-resources
  2. Read the package README first — it is the only reliable documentation, and the install path (config publish vs. ServiceProvider auto-registration) differs from typical Nova packages because older Nova didn't auto-discover.
  3. Publish the config if the package exposes one (php artisan vendor:publish --provider="Alexbowers\NovaCategoriseResources\...") — the README will name the exact provider string.
  4. Open app/Providers/NovaServiceProvider.php or your nova/ config to confirm the package is wired in.
  5. Add a grouping property to one small Resource (e.g., a UserResource) so you can eyeball the sidebar change without a full rebuild.

First use case: take a messy flat sidebar of 15 resources and bucket them into 3–4 headings (e.g., "Content", "Commerce", "Settings") so admins stop scrolling. Do this on a single page load before touching every resource — collapse behaviour on a small group first confirms the package is working.

Implementation Patterns

Group at the Resource level, not globally. The idiomatic use is a per-Resource declaration so each class owns its own categorisation. Depending on the package version this is either a $category / $group public static on the Resource, or a method like public static function category(): string. Follow whatever the README shows — do not mix conventions across resources, or you'll get resources that silently fall into an "Other" bucket.

Centralise the category names. Don't hardcode string literals in 20 Resource classes. Define constants in one place (a small ResourceGroups class or an enum-ish class) and reference them. This makes renaming a category a one-line change and prevents the typo-driven "two headings with almost the same name" problem.

// app/Nova/ResourceGroups.php
final class ResourceGroups
{
    public const CONTENT   = 'Content';
    public const COMMERCE  = 'Commerce';
    public const SETTINGS  = 'Settings';
}

// app/Nova/PostResource.php
public static $category = ResourceGroups::CONTENT;

Collapse-by-default for noisy groups. The package's collapsing feature is best used on groups admins rarely touch (Settings, Logs, Integrations). Keep high-traffic groups (Orders, Users) expanded so the common workflow isn't a click away.

Ordering is stable, not alphabetical. Categories typically render in the order they're first encountered at boot, which follows NovaServiceProvider::resources() registration order. If you want a deterministic order, register resources grouped by category in that method, or use the package's ordering hook if it exposes one. Don't rely on alphabetical ordering — the package doesn't sort by label.

Integration with NovaServiceProvider. Group your resources([...]) and resources() calls by category in the provider. This makes the sidebar intent visible in one file and gives you a natural place to add/remove whole categories.

Pair with policies, not categories. Categorisation is purely cosmetic. If a resource should be hidden from certain users, use canSee / policies — categories do not enforce access.

Migrating off the package (highly likely): if you're upgrading Nova, replace $category (or whatever property the package reads) with the native public static $group. The rendered result is equivalent, so this is usually a mechanical find-and-replace. Remove the package from composer.json after the swap and delete the config publish.

Gotchas and Tips

  • The deprecation is the headline. Anything you build on this package is technical debt. Treat it as a temporary shim to get a legacy Nova sidebar tidy while planning the upgrade — not a long-term dependency. Schedule the native $group migration at the same time as the Nova bump.
  • Property name mismatches. Nova's native property is $group; this package may expect $category. If you set the wrong one, the sidebar won't change and you'll spend an hour wondering why. Confirm the exact property name in the README for the version you installed.
  • Silent failures, no errors. If a resource doesn't show up under its expected heading, it almost certainly means the property is misspelled, the resource isn't registered in NovaServiceProvider, or the package isn't booted. Check NovaServiceProvider::resources() first, then the property name, then package registration.
  • Order-of-registration quirks. Category creation order depends on the order resources are loaded. If categories jitter between deployments, normalise the registration order in NovaServiceProvider.
  • Clearing caches. If Nova caches compiled assets or route/resource metadata in your setup, php artisan optimize:clear and a hard browser refresh are the fastest way to see property changes reflected. Sidebar changes are often invisible until a full reload.
  • Version pinning. Because the package is unmaintained since Nov 2018, pin it in composer.json (e.g., an exact version rather than ^) — an unbounded constraint against an abandoned package is asking for a resolver surprise.
  • Watch for conflicts with native grouping after upgrade. If you upgrade Nova before removing this package, both mechanisms may try to shape the sidebar. Remove the package first, then migrate properties, to isolate which change broke rendering.
  • Extension points are limited and stale. Don't build custom UI on top of this package's internals; those are unmaintained APIs. If you need custom sidebar behaviour beyond grouping/collapsing, do it on Nova's current APIs, not on this package.
  • Docs are the README, period. No maintained docs site, no support channel. Read the source (it's small) before filing any issue — there's no one to respond.
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.
robertmarney/lara-hierarchial-collections
simonschaufi/rule-doc-generator
emissaoja/emissaoja
blackbricksoftware/gravityforms-civicrm-form-processor
al-rahabi/fancy-crud
jinas/dhivatar-component
mltstephane/laravel-quality
bernskiold/laravel-talentlms
bernskioldmedia/laravel-form-architect
youbar/easy-crud
c-point-labs/laravel-hostyourai
dbravoan/dbcms-admin-theme-dbcms
dbravoan/dbcms-theme-db-cyber
dbravoan/dbcms-blocks-basic
dbravoan/dbcms-module-content-audit
dbravoan/dbcms-module-ai-assistant
paygate-to/paygate-php
padosoft/askmydocs-connector-base
defstudio/supercharged-carbon
bernskioldmedia/laravel-matomo