coolsam/modules
Filament Modules v5 wraps nwidart/laravel-modules to turn each Laravel module into an autonomous Filament plugin with its own resources, pages, widgets, and clusters. Register ModulesPlugin once and it auto-discovers modules. Supports Laravel 11–13 and Filament 4–5.
clusters.enabled plus clusters.use-top-navigation let you decide between cluster-per-module navigation vs. flattening into the existing side nav; panels.group, panels.group-icon, panels.group-sort and panels.open-in-new-tab let you decide whether module surfaces are grouped, nested, or launched as separate consoles. These are product/UX calls, not just technical ones, and they're config, not code.module:make:filament-panel supports per-module panels, which maps cleanly onto back-office-plus-customer-portal, per-brand white-label admin, or per-tenant consoles — without standing up separate apps.mode (plugins / panels / both) and auto-register-plugins decide whether module surfaces appear automatically or are curated per panel. That is the lever for "every module ships its own admin" vs. "we gate what goes live per release."nwidart/laravel-modules; the incremental cost is one composer require and one ModulesPlugin::make() registration. You are not building a module loader or an admin-plugin bridge — you are adopting two upstream conventions.Adopt when:
nwidart/laravel-modules. This is a wrapper, not a replacement — the prerequisite setup and merge-plugin autoloading are non-negotiable.Coolsam\Modules\Resource, Page, TableWidget, ChartWidget, StatsOverviewWidget, CanAccessTrait) are explicitly marked work-in-progress. Treat them as prototypes, not pillars.Look elsewhere when:
nwidart/laravel-modules → Filament), and each major bump on either side is a coordinated upgrade.To executives: This is a small, MIT-licensed adapter that lets us organize our admin panel by business domain instead of by file type. It converts our module structure into self-contained admin plugins, so a new feature area ships with its own screens, navigation, and permissions surface in one move — and reusable modules can be carried across products or clients. Cost is one dependency and a configuration file; the return is faster admin delivery and a codebase where domain ownership is visible in the UI. The risk to acknowledge honestly is maturity: single maintainer, low adoption footprint, and a few features still marked WIP — so we adopt it behind a pilot scope, not as a platform-wide mandate.
To engineering: It's a thin wrapper around nwidart/laravel-modules. One ModulesPlugin::make() in the panel provider, one php artisan modules:install, and every module becomes a Filament plugin with its own resources, pages, widgets and clusters. The generators are first-class Artisan commands, so nothing new to learn beyond the prompts. Config is centralized in config/filament-modules.php — mode, auto-register-plugins, cluster and panel grouping — which means we can change registration behavior without touching module code. No fork of Filament, no overridden discovery, no magic. We pin the major version and treat access-control base classes as experimental until they're out of WIP.
How can I help you explore Laravel packages today?