alizharb/laravel-themer
Enterprise-grade theme management for Laravel. Create, clone, activate, and safely delete themes with per-theme Vite builds, NPM workspaces, asset shortcuts, view overrides, and Livewire 4 support. Includes metadata, wizards, and fast production caching.
theme:doctor, theme:status, theme:debug, theme:graph, and theme:why for production visibility and CI automation.theme:refresh for safe rebuilds.theme:preview for inactive theme QA, including signed preview URL support.tokens support in theme.json.theme_token(), theme_tokens(), [@themeTokens](https://github.com/themeTokens), and theme:tokens.theme.json metadata including requires, conflicts, provides, and tokens.laravel-themer-development skill.ThemeManager to natively hook into Laravel 11/12/13's Vite::useBuildDirectory and Vite::useHotFile(). The legacy symlink/copy workaround for theme:publish is no longer the primary Vite pipeline. Themes can simply use standard [@vite](https://github.com/vite) tags.?preview_theme=slug query parameter.hooks array property to the theme.json configuration. Themes can now execute native Artisan or Shell commands on specific lifecycle events (e.g., 'after_activate' => ['php artisan db:seed --class=EcommerceSeeder']).ThemeManager::set() and ThemeActivating dispatch to natively catch fatal theme boot exceptions. If a theme's ThemeServiceProvider crashes the application, Safe Mode intercepts the error, logs it, and silently fails-over to the default configuration theme, drastically improving production reliability.theme:cache. It now fully analyzes and serializes the deep inheritance chain of every theme into bootstrap/cache/themes.php. The ThemeManager boots instantly from this array, completely bypassing filesystem I/O in production.illuminate/support, illuminate/contracts, illuminate/view).theme:make and theme:activate to natively use laravel/prompts. Creating a theme now initiates a beautiful interactive wizard for author, description, and options if arguments are omitted.php artisan theme:lint {theme?}. This isolates code formatting by safely spinning up Laravel Pint for the theme's PHP classes, and concurrently triggering npm run format for its CSS/JS assets within a single command.php artisan theme:dev to automatically detect the currently active theme context if none is manually specified.theme:make now automatically copies a robust .gitignore stub into newly generated themes so their vendor/build assets are ignored properly out of the box.php artisan theme:upgrade utility now gracefully automates the v1.2.x -> v1.3.0 schema migration. It scans existing themes, injects missing .gitignore files, and safely initializes hooks structures inside their theme.json configuration.getInheritanceChain() into ThemeManager for robust, reusable traversal.[@theme_asset](https://github.com/theme_asset) and [@theme_vite](https://github.com/theme_vite) for cleaner template-level asset resolution.ThemeManager::isActive() method for easy theme state checks.theme:npm to manage theme-specific dependencies via NPM Workspaces.theme:dev and theme:build shortcuts for per-theme Vite development and building.theme:clone and theme:delete for easier theme lifecycle management.removable and disableable flags to theme.json to control theme management actions.screenshots and tags in theme.json for enhanced UI integration.HasThemeOption trait across all theme-related commands for consistent --theme selection.theme:check with asset health and missing screenshot detection.ThemeManager::find() for robust theme lookup by name, slug, or directory.theme:upgrade to automatically migrate existing themes to the new asset structure.theme:make now generates a package.json and vite.config.js for each theme, enabling independent asset management.themer:install now automatically configures NPM Workspaces in the root package.json for optimized storage and dependency sharing.package.json stubs now automatically synchronize their Vite version with the root project.theme:make now automatically includes clean Light and Dark mode screenshot placeholders in resources/assets/screenshots/.--description, --author, and --tags options to theme:make for professional theme initialization.theme:make --provider now generates a namespaced ThemeServiceProvider (e.g., Theme\{Slug}\ThemeServiceProvider), resolving class collision issues in multi-theme environments.ThemeManager to robustly load namespaced providers while maintaining backward compatibility for global ThemeServiceProvider classes.layouts:: and pages:: auto-discovery defaults to the themer.php configuration file for maximum flexibility.theme:delete now bypasses confirmation when the --force option is used, enabling better automation.layouts:: and pages:: view namespaces were not registered as Blade component prefixes, causing <x-layouts::> and <x-pages::> tags to fail.ThemeManager::all().theme:cache) to be available in both web and console environments, fixing failures when calling them via Artisan::call() in web controllers.vite.themer.js for clean, standalone asset discovery in themes/.themer:install to automate Vite configuration with user consent.themer:install now provides manual configuration instructions if automatic setup is declined.make:livewire when the specified theme is not found.version field in theme.json, allowing themes to track their internal versions independently.theme:check: A new validation command to verify theme hierarchy integrity, detect circular dependencies, and identify missing parent themes.theme:make to generate a standardized directory structure including app/Livewire and lang.SetTheme Middleware: A new route-level tool to enforce specific themes for specific routes or route groups.Themer::forTheme(): An ephemeral switcher for branded sessions like emails or PDF generation.resources/views/components.theme:check to verify required laravel-modular modules defined in theme.json.ThemeManager to use cached discovery flags, delivering near-zero boot time for large theme libraries.theme:make: Removed automatic layout generation to encourage the use of the more flexible php artisan livewire:layout --theme= command.How can I help you explore Laravel packages today?