In-memory cache layer. Scout discovery results now live in memory for the lifetime of the PHP process. The first access in a process discovers (or reads the modules:cache file if one exists); every access after that returns from memory. No effect on PHP-FPM or php artisan serve, which start a fresh process per request. Repeat scout access becomes free on Octane, Vapor, and long-running queue workers.
Custom cache drivers via BaseScout::useCacheDriverFactory(). You can now swap the default driver at runtime with a factory closure:
use Mozex\Modules\Contracts\BaseScout;
use Spatie\StructureDiscoverer\Cache\DiscoverCacheDriver;
BaseScout::useCacheDriverFactory(
fn (BaseScout $scout): DiscoverCacheDriver => new YourDriver($scout->cacheFile())
);
Any class implementing Spatie's DiscoverCacheDriver works. Pass null to restore the default. See the caching docs for details.
Persistable interface. Drivers that need to separate runtime caching (put()) from explicit deploy-time persistence can implement Mozex\Modules\Features\SupportCaching\Persistable. When a driver implements it, BaseScout::cache() calls persist(); otherwise it falls back to put(). The default tiered driver uses this split so runtime cache warming stays in memory while modules:cache writes to disk.
TieredDiscoverCacheDriver (in-memory over file), installed by RuntimeCache::install() during package registration.BaseScout::get() auto-populates the cache driver on a discovery miss, so the in-memory layer warms up naturally on first read.BaseScout::cache() routes through persist() for drivers implementing Persistable, put() otherwise.Full Changelog: https://github.com/mozex/laravel-modules/compare/2.11.0...2.12.0
In-memory cache layer. Scout discovery results now live in memory for the lifetime of the PHP process. The first access in a process discovers (or reads the modules:cache file if one exists); every access after that returns from memory. No effect on PHP-FPM or php artisan serve, which start a fresh process per request. Repeat scout access becomes free on Octane, Vapor, and long-running queue workers.
Custom cache drivers via BaseScout::useCacheDriverFactory(). You can now swap the default driver at runtime with a factory closure:
use Mozex\Modules\Contracts\BaseScout;
use Spatie\StructureDiscoverer\Cache\DiscoverCacheDriver;
BaseScout::useCacheDriverFactory(
fn (BaseScout $scout): DiscoverCacheDriver => new YourDriver($scout->cacheFile())
);
Any class implementing Spatie's DiscoverCacheDriver works. Pass null to restore the default. See the caching docs for details.
Persistable interface. Drivers that need to separate runtime caching (put()) from explicit deploy-time persistence can implement Mozex\Modules\Features\SupportCaching\Persistable. When a driver implements it, BaseScout::cache() calls persist(); otherwise it falls back to put(). The default tiered driver uses this split so runtime cache warming stays in memory while modules:cache writes to disk.
TieredDiscoverCacheDriver (in-memory over file), installed by RuntimeCache::install() during package registration.BaseScout::get() auto-populates the cache driver on a discovery miss, so the in-memory layer warms up naturally on first read.BaseScout::cache() routes through persist() for drivers implementing Persistable, put() otherwise.Full Changelog: https://github.com/mozex/laravel-modules/compare/3.2.0...3.3.0
Module name kebab-casing now handles acronyms correctly. Names with consecutive uppercase letters no longer split into individual segments. MyAPI → my-api (was my-a-p-i), HTMLParser → html-parser, IOStream → io-stream. All-uppercase names (PWA, CRM) and standard PascalCase (Blog, UserAdmin) are unchanged. If you have a module with consecutive uppercase letters in its name, double-check your view, Blade component, Livewire, and translation references after upgrading.
modules:list reports real file counts for directory-based asset types. Migrations, views, translations, listeners, Livewire components, and Filament assets were showing 1 per module. The command now counts files recursively inside each matched directory.
resources/boost/skills/laravel-modules/SKILL.md and loads automatically on php artisan boost:install. Covers the full facade API, route customization, Livewire v3 patterns, Filament v3/v4 panel mapping, Console Kernel schedules, name guessing, Inertia (Vue and React), and testing setup. The existing Boost guideline has been rewritten to stay lean and focused.script.globalTypeFiles trick for Vue and the plain-TypeScript flow for React), and module CSS imports.composer.json and context7.json.Full Changelog: https://github.com/mozex/laravel-modules/compare/2.10.0...2.11.0
Module name kebab-casing now handles acronyms correctly. Names with consecutive uppercase letters no longer split into individual segments. MyAPI → my-api (was my-a-p-i), HTMLParser → html-parser, IOStream → io-stream. All-uppercase names (PWA, CRM) and standard PascalCase (Blog, UserAdmin) are unchanged. If you have a module with consecutive uppercase letters in its name, double-check your view, Blade component, Livewire, and translation references after upgrading.
modules:list reports real file counts for directory-based asset types. Migrations, views, translations, listeners, Livewire components, and Filament assets were showing 1 per module. The command now counts files recursively inside each matched directory.
resources/boost/skills/laravel-modules/SKILL.md and loads automatically on php artisan boost:install. Covers the full facade API, route customization, Livewire/Filament patterns, name guessing, Inertia (Vue and React), and testing setup. The existing Boost guideline has been rewritten to stay lean and focused.script.globalTypeFiles trick for Vue and the plain-TypeScript flow for React), and module CSS imports.composer.json and context7.json.Full Changelog: https://github.com/mozex/laravel-modules/compare/3.1.0...3.2.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/3.0.4...3.1.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.9.0...2.10.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/3.0.3...3.0.4
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.8.2...2.9.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/3.0.2...3.0.3
Full Changelog: https://github.com/mozex/laravel-modules/compare/3.0.1...3.0.2
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.8.1...2.8.2
Full Changelog: https://github.com/mozex/laravel-modules/compare/3.0.0...3.0.1
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.8.0...2.8.1
A major release that brings full Livewire v4 and Filament v5 support, adds Single-File and Multi-File Component discovery, and modernizes the platform requirements.
All three Livewire v4 component types are now auto-discovered from your modules:
.blade.php file{name}.php and {name}.blade.phpPlace SFCs and MFCs in your module's Resources/views/livewire/ directory and they're automatically registered under the module namespace:
<livewire:blog::counter /> {{-- SFC --}}
<livewire:blog::toggle /> {{-- MFC --}}
Livewire component registration now uses Livewire::addNamespace(), aligning with Livewire v4's recommended approach for packages. This replaces the previous per-class Livewire::component() registration, resulting in cleaner integration and native support for all component types.
Full compatibility with Filament v5. Module-based Resources, Pages, Widgets, and Clusters continue to be auto-discovered per panel.
LivewireComponentsScout changed from ModuleClassScout to ModuleDirectoryScout — scout output is now directory-based instead of class-basedSupportSchedules feature and Mozex\Modules\Contracts\ConsoleKernel — use Routes/console.php with the Schedule facade insteadAdd view_path to the livewire-components section if you've published the config:
'livewire-components' => [
'active' => true,
'patterns' => [
'*/Livewire',
],
'view_path' => 'Resources/views/livewire', // New in v3
],
See UPGRADE.md for the full step-by-step upgrade guide.
If your application is not ready to upgrade to Livewire v4 or Filament v5, continue using the 2.x branch which supports PHP 8.2, Laravel 10/11/12, Livewire v3, and Filament v3/v4.
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.8.0...3.0.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.7.2...2.8.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.7.1...2.7.2
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.7.0...2.7.1
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.6.3...2.7.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.6.3...2.7.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.6.2...2.6.3
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.6.1...2.6.2
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.6.0...2.6.1
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.5.2...2.6.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.5.1...2.5.2
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.5.0...2.5.1
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.4.3...2.5.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.4.2...2.4.3
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.4.1...2.4.2
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.4.0...2.4.1
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.3.1...2.4.0
Full Changelog: https://github.com/mozex/laravel-modules/compare/2.3.0...2.3.1
How can I help you explore Laravel packages today?