scalexy/royal-theme
A Laravel theme package by Scalexy offering a polished "royal" front-end theme with ready-made Blade layouts, components, and assets you can drop into any Laravel app to quickly build a consistent, customizable interface.
Royal Theme is a Nova skin, so the entire integration surface is one Composer install plus whatever the package's service provider registers.
composer require scalexy/royal-theme
Assuming standard Nova theme conventions, auto-discovery in composer.json (extra.laravel.providers) will boot the provider for you. If it doesn't, add it manually to config/app.php:
ScaleXY\RoyalTheme\RoyalThemeServiceProvider::class,
Look here first, in this order:
vendor/scalexy/royal-theme/composer.json — read the require block. The Nova version constraint tells you exactly which Nova majors this was built against. Given the September 2020 release date, expect laravel/nova: ^2.0|^3.0 or similar, not Nova 4/5.vendor/scalexy/royal-theme/src/*ServiceProvider.php — find the boot() method. Theme packages typically do one of three things: call Nova::theme('royal'), register a Nova::style() / CSS asset path, or publish view overrides. That call is the whole package.vendor/scalexy/royal-theme/resources/ — the actual CSS/SCSS/JS and any Blade overrides. This is the product; everything else is glue.First use case: a branded Nova admin panel — accent colors, sidebar treatment, login screen — without hand-writing CSS overrides in app/Providers/NovaServiceProvider.php. Confirm the theme actually loads by hitting /nova, opening devtools, and searching the network tab for the theme's stylesheet. If it isn't there, the provider either isn't registered or the Nova version gate rejected it.
Before investing further, do a 10-minute feasibility check: install on a throwaway branch, confirm Nova boots, confirm the CSS loads. With 1 star and zero dependents, treat this as an unvetted snippet of CSS, not a maintained dependency.
Global activation. The common pattern is unconditional registration in the provider. Everything downstream — login page, dashboard, resource index, detail views — inherits it. This is what you want for a single-tenant admin.
Environment-gated activation. If you only want the skin in production or on a demo environment, don't rely on the package's provider being conditional. Wrap it yourself in App\Providers\NovaServiceProvider::boot():
public function boot(): void
{
parent::boot();
if (app()->environment('production')) {
Nova::theme('royal'); // or whatever identifier the package registers
}
}
This keeps local Nova on the stock theme for easier debugging against upstream docs.
Fork-and-own it. Given the maintenance profile, the realistic long-term pattern is not composer require — it's copying resources/css/* into your app and registering it as your own Nova theme. That removes the abandoned dependency, lets you patch for Nova 4/5 selector changes yourself, and matches how most teams handle Nova theming anyway. Use the package as a reference implementation, not a runtime dependency.
Pair with Nova tools/cards. Themes only touch presentation. Custom tools (dashboards, metrics cards) that hardcode colors will clash with a themed palette. Audit your custom cards for hardcoded hex values and move them to CSS variables so the theme's tokens apply uniformly.
Publishing assets, if supported. If the package ships a --tag=royal-theme-assets publish tag, publish and commit the assets so production builds don't depend on vendor/ contents surviving a composer install --no-dev optimization step. Verify with php artisan vendor:publish --provider="ScaleXY\RoyalTheme\RoyalThemeServiceProvider".
Nova version compatibility is the whole ballgame. A 2020 theme will almost certainly not render correctly on Nova 4 or 5. Nova 4 moved to Vite and reworked its layout classes; Nova 5 changed more. Expect broken spacing, missing sidebar styling, or a fully unstyled panel. If composer require refuses due to a version constraint, do not reach for --ignore-platform-reqs or a repositories fork to force it — you'll get a booted-but-broken admin panel with no error trail. Confirm the target Nova major first.
Cache and publish steps. After install, run php artisan nova:publish and php artisan optimize:clear. Nova aggressively caches its asset manifest, and a theme that "isn't applying" is very often a stale compiled CSS file. Hard-refresh with devtools' disable-cache enabled before debugging anything else.
Silent failure mode. Nova theme registration failures are quiet — you get the default theme, not an exception. Debug by checking view-source: on /nova for the stylesheet <link>, then confirm the provider booted via php artisan about or a dd() in boot().
Don't edit vendor/. Classic trap with tiny theme packages: you patch a selector directly in vendor/scalexy/royal-theme/resources/css/theme.css to make Nova 4 look right, it works, then composer update wipes it. Either publish the assets or fork the package into a path/vcs repository you control.
Extension point is the CSS file itself. There's no meaningful PHP API here — no config file to publish, no theme options. Customization means appending your own overrides after the theme's stylesheet loads. Register them in NovaServiceProvider with Nova::style() or a Nova::theme() callback so ordering is deterministic:
Nova::theme('royal');
Nova::style('css/nova-overrides.css');
Selector drift. If you plan to maintain this, pin the Nova version in composer.json ("laravel/nova": "3.30.*") rather than floating. Nova's internal CSS class names aren't a public API; themed selectors break on minor releases more often than you'd like.
Security note. It's a theme — CSS and maybe a couple of Blade views. Still, skim resources/views/ for anything that echoes unescaped output before shipping to production, and check the provider isn't registering routes. Low risk, but "1 star, 0 dependents" means nobody else has done that review for you.
Verdict for day-to-day leverage: treat it as a design reference. Adopt the CSS, not the Composer dependency.
How can I help you explore Laravel packages today?