Skip to main content
Modules in Laravel Modular are self-contained packages that organize your application into logical, maintainable units. Each module contains its own models, controllers, views, routes, and more.

Creating Your First Module

1

Generate a new module

Use the make:module Artisan command to scaffold a new module:
php artisan make:module blog
This creates a complete module structure in app-modules/blog/.
2

Update dependencies

The command automatically updates your composer.json file. Run composer update to register the module:
composer update modules/blog
3

Clear the module cache

The module cache is automatically cleared, but you can manually clear it anytime:
php artisan modules:clear

Module Structure

A freshly created module has the following structure:
app-modules/blog/
├── composer.json
├── database/
│   ├── factories/
│   ├── migrations/
│   └── seeders/
├── resources/
│   └── views/
├── routes/
│   └── blog-routes.php
├── src/
│   └── Providers/
│       └── BlogServiceProvider.php
└── tests/

Key Directories

Contains all your PHP classes:
  • Controllers/ - HTTP controllers
  • Models/ - Eloquent models
  • View/Components/ - Blade components
  • Providers/ - Service providers
  • Console/Commands/ - Artisan commands
All PHP files in this directory are automatically loaded. Routes are loaded alphabetically by filename.
  • views/ - Blade templates with automatic namespacing
  • lang/ - Translation files
  • migrations/ - Database migrations
  • factories/ - Model factories
  • seeders/ - Database seeders

Module Configuration

Composer.json

Each module has its own composer.json file that defines its namespace and autoloading:
composer.json
{
  "name": "modules/blog",
  "description": "",
  "type": "library",
  "version": "1.0",
  "license": "proprietary",
  "require": {},
  "autoload": {
    "psr-4": {
      "Modules\\Blog\\": "src/",
      "Modules\\Blog\\Tests\\": "tests/",
      "Modules\\Blog\\Database\\Factories\\": "database/factories/",
      "Modules\\Blog\\Database\\Seeders\\": "database/seeders/"
    }
  },
  "extra": {
    "laravel": {
      "providers": [
        "Modules\\Blog\\Providers\\BlogServiceProvider"
      ]
    }
  }
}
The namespace prefix (Modules) can be customized in your config/app-modules.php file.

Service Provider

Every module includes a service provider that’s automatically registered:
src/Providers/BlogServiceProvider.php
<?php

namespace Modules\Blog\Providers;

use Illuminate\Support\ServiceProvider;

class BlogServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        // Register bindings, singletons, etc.
    }

    public function boot(): void
    {
        // Boot services, publish assets, etc.
    }
}

Namespace Configuration

Consider customizing your module namespace before creating your first module to avoid future refactoring.
By default, modules use the Modules namespace. You can customize this by publishing the config:
php artisan vendor:publish --tag=modular-config
Then edit config/app-modules.php:
config/app-modules.php
return [
    'modules_namespace' => 'MyCompany',
    'modules_vendor' => 'my-company',
    'modules_directory' => 'app-modules',
];
Use your organization name as the namespace (e.g., Acme, MyCompany) to make it easier to extract modules into standalone packages later.

Working with Modules

List All Modules

View all registered modules:
php artisan modules:list

Cache Module Configuration

For better performance in production, cache your module configuration:
php artisan modules:cache
Clear the cache during development:
php artisan modules:clear

Sync Modules

If you manually add or remove modules, sync the composer configuration:
php artisan modules:sync

Next Steps

Now that you understand module structure, learn about specific components:

Module Components

Create models, controllers, and other components

Module Routing

Define routes within your modules

Module Views

Work with Blade templates and components

Module Migrations

Manage database migrations

Build docs developers (and LLMs) love