Module Manifest
The module.json configuration file
Overview
Every module requires a module.json file in its root directory. This manifest defines the module’s identity, dependencies, and configuration.
Full Schema
{
"name": "Blog",
"alias": "blog",
"description": "A full-featured blog management system",
"version": "1.0.0",
"priority": 0,
"providers": [
"Modules\\Blog\\Providers\\BlogServiceProvider"
],
"requires": {
"Core": "^1.0",
"Media": ">=2.0"
},
"conflicts": {
"LegacyBlog": "*"
},
"extra": {
"routes": {
"prefix": "blog",
"middleware": ["web", "auth"]
}
}
}
Required Fields
name
The module’s unique identifier. Must be PascalCase:
{
"name": "Blog"
}
version
Semantic version number:
{
"version": "1.0.0"
}
Optional Fields
alias
Short identifier for namespacing views, routes, etc:
{
"alias": "blog"
}
If not specified, defaults to lowercase module name.
description
Human-readable description:
{
"description": "Blog management with posts, categories, and tags"
}
priority
Boot order (higher = earlier). Default is 0:
{
"priority": 100
}
Use cases:
- High priority (100+): Core modules that others depend on
- Normal (0): Most modules
- Low (-100): Modules that run after others
providers
Service providers to register:
{
"providers": [
"Modules\\Blog\\Providers\\BlogServiceProvider",
"Modules\\Blog\\Providers\\EventServiceProvider"
]
}
requires
Module dependencies with version constraints:
{
"requires": {
"Core": "^1.0",
"Media": ">=2.0",
"Categories": "~1.5"
}
}
Version constraint syntax:
^1.0- Compatible with 1.x (>=1.0.0 <2.0.0)~1.5- Allows patch updates (>=1.5.0 <1.6.0)>=2.0- 2.0 or higher*- Any version
conflicts
Modules that cannot be enabled together:
{
"conflicts": {
"LegacyBlog": "*",
"OldPosts": "^1.0"
}
}
extra
Custom configuration passed to bridges:
{
"extra": {
"routes": {
"prefix": "api/v2",
"middleware": ["api", "throttle:60,1"],
"domain": "api.example.com"
},
"filament": {
"navigation_group": "Content"
}
}
}
Validation
Validate your manifest:
php artisan modular:validate Blog
Common validation errors:
- Missing required fields (
name,version) - Invalid version format
- Non-existent provider classes
- Circular dependencies
Best Practices
1. Use Semantic Versioning
{
"version": "1.2.3"
}
- Major (1.x.x): Breaking changes
- Minor (x.2.x): New features, backward compatible
- Patch (x.x.3): Bug fixes
2. Specify Exact Dependencies
{
"requires": {
"Core": "^1.0"
}
}
Don’t use * for dependencies in production.
3. Document Your Module
{
"description": "Handles user authentication including login, registration, password reset, and two-factor authentication",
"keywords": ["auth", "login", "security"]
}