laravel-modules maintained by nwidart
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- ext-dom *
- ext-simplexml *
- php ^8.3
- php ^8.3
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php ^8.3
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php ^8.3
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php ^8.3
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-dom *
- ext-json *
- ext-simplexml *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- laravel/pint ^1.16
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=8.2
- ext-json *
- wikimedia/composer-merge-plugin ^2.1
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*|5.4.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.x@dev
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*|5.3.*
- laravelcollective/html 5.1.*|5.2.*|5.3.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*
- pingpong/generators 2.1.*|2.2.*
- pingpong/support 2.1.*|2.2.*
- laravelcollective/html 5.1.*|5.2.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*
- pingpong/generators 2.1.*|2.2.*
- pingpong/support 2.1.*|2.2.*
- laravelcollective/html 5.1.*|5.2.*
- php >=5.5
- laravel/framework 5.1.*|5.2.*
- pingpong/generators 2.1.*|2.2.*
- pingpong/support 2.1.*|2.2.*
- laravelcollective/html 5.1.*|5.2.*
- php >=5.5
- laravel/framework 5.2.*
- pingpong/generators 2.2.*
- pingpong/support 2.2.*
- laravelcollective/html ~5.0
- php >=5.5
- laravel/framework 5.2.*
- pingpong/generators 2.2.*
- pingpong/support 2.2.*
- laravelcollective/html ~5.0
- php >=5.5
- laravel/framework 5.2.*
- pingpong/generators 2.2.*
- pingpong/support 2.2.*
- laravelcollective/html ~5.0
- php >=5.5
- laravel/framework 5.2.*
- pingpong/generators 2.2.*
- pingpong/support 2.2.*
- laravelcollective/html ~5.0
- php >=5.5
- laravel/framework 5.2.*
- pingpong/generators 2.2.*
- pingpong/support 2.2.*
- laravelcollective/html ~5.0
- php >=5.5
- laravel/framework 5.2.*
- pingpong/generators 2.2.*
- pingpong/support 2.2.*
- laravelcollective/html ~5.0
What it does
- Splits a large Laravel app into modules that live in
Modules/. - Each module is a self-contained unit with its own service providers, routes, controllers, models, views, migrations, config and translations. It works like a small Laravel package inside your app.
- Modules can be enabled or disabled. Only enabled modules are booted. Status is stored by an activator (a JSON file by default).
- Artisan generators create modules and the classes inside them:
module:make,module:make-controller,module:make-model,module:make-migration, and more.
php artisan module:make Blog generates:
Modules/Blog/
├── app/ Http/Controllers, Providers
├── config/
├── database/ factories, migrations, seeders
├── resources/ assets, views
├── routes/ web.php, api.php
├── tests/ Feature, Unit
├── composer.json
├── module.json
├── package.json
└── vite.config.js
Requirements
PHP 8.3+ and Laravel 13 for the current version. See Versions for older Laravel releases.
Install
composer require nwidart/laravel-modules
The service provider and alias are registered automatically. To publish the config file (optional):
php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"
Autoloading
Module classes are autoloaded through wikimedia/composer-merge-plugin. Add this to the extra section of your app's composer.json:
"extra": {
"laravel": {
"dont-discover": []
},
"merge-plugin": {
"include": [
"Modules/*/composer.json"
]
}
},
On first install, Composer asks:
Do you trust "wikimedia/composer-merge-plugin" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?]
Answer y. Or add it yourself:
"config": {
"allow-plugins": {
"wikimedia/composer-merge-plugin": true
}
}
If the plugin is set to false, modules are not autoloaded. After changing composer.json, run:
composer dump-autoload
Since v11.0, the
"Modules\\": "modules/"autoload entry is no longer needed. Remove it from yourcomposer.jsonif present.
Quick start
php artisan module:make Blog # create a module
php artisan module:list # list modules and their status
php artisan module:disable Blog # stop booting the module
php artisan module:enable Blog # boot it again
Versions
| Laravel | laravel-modules |
|---|---|
| 13 | ^13.0 |
| 12 | ^12.0 |
| 11 | ^11.0 |
| 10 | ^10.0 |
Older Laravel versions use the matching major: 5.4 uses ^1.0, 5.5 uses ^2.0, through Laravel 9 with ^9.0.
Documentation
Full documentation: https://laravelmodules.com/docs.
Credits
Originally based on pingpong/modules, which is no longer maintained.
License
MIT. See LICENSE.md.