PHPackages                             dimitrienkov0/laravel-modules - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dimitrienkov0/laravel-modules

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

dimitrienkov0/laravel-modules
=============================

Manifest-driven Laravel module loader and lifecycle toolkit.

1.1.0(3mo ago)0519↑35.7%PHPPHP &gt;=8.3

Since Jan 14Pushed 3w ago1 watchersCompare

[ Source](https://github.com/dimitrienkov/laravel-modules)[ Packagist](https://packagist.org/packages/dimitrienkov0/laravel-modules)[ RSS](/packages/dimitrienkov0-laravel-modules/feed)WikiDiscussions main Synced 2d ago

READMEChangelog (10)Dependencies (24)Versions (16)Used By (0)

Laravel Modules
===============

[](#laravel-modules)

> Manifest-driven runtime для модулей в Laravel 12/13.

`dimitrienkov0/laravel-modules` помогает Laravel-приложению находить модули в настроенных директориях, валидировать `module.json`, сортировать модули по зависимостям и загружать enabled-модули через предсказуемый loader pipeline.

Текущий v2.0 core покрывает runtime loading, feature values, production registry cache, lifecycle-команды (`make:module`, `modules:install`, `modules:update`, `modules:remove`, `modules:enable`, `modules:disable`, `modules:list`, `modules:optimize`, `modules:optimize-clear`) и module-aware генераторы: native `make:* --module` для 22 артефактов плюс архитектурные `make:use-case/action/query/dto/vo` (см. [docs/cli.md](docs/cli.md)). Опциональный MoonShine admin-UI управляет модулями из админки ([docs/moonshine.md](docs/moonshine.md)); установка/обновление через zip-upload в UI остаётся roadmap.

Quick Start
-----------

[](#quick-start)

```
composer require dimitrienkov0/laravel-modules
php artisan vendor:publish --tag=modules-config
php artisan make:module blog
```

Проверка production cache:

```
php artisan modules:optimize
```

Требования
----------

[](#требования)

КомпонентВерсияPHP8.3+Laravel12 / 13Optional admin bridgeMoonShine 4Optional routes bridgeInertia 2Возможности
-----------

[](#возможности)

- **Manifest-first modules**: immutable metadata и feature schema живут в `module.json`; mutable state и feature values - в `state.json`.
- **Dependency-aware registry**: `meta.dependencies` сортируются и проверяются через Composer SemVer constraints.
- **Loader pipeline**: 15 convention-based loaders загружают config, providers, migrations, routes, commands, policies, middleware и другие runtime paths.
- **Runtime feature API**: `FeatureRepositoryInterface` читает актуальные `settings.values` из `state.json`.
- **Production cache**: `modules:optimize` кеширует discovery в `bootstrap/cache/modules.php`, но не кеширует state и values.
- **Lifecycle toolkit**: scaffold, install, update, remove, enable и disable работают через UseCase-классы с backup/rollback boundaries.
- **Opt-in диагностическое логирование**: off by default; включается через `MODULES_LOGGING=true` и пишет structured discovery/cache/pipeline/lifecycle события на выбранный канал хоста для field-diagnostics ([docs/logging.md](docs/logging.md)).
- **Optional bridges**: MoonShine и Inertia активируются только при наличии соответствующих пакетов.

Минимальный модуль
------------------

[](#минимальный-модуль)

```
php artisan make:module blog
```

Команда создаёт структуру модуля, `module.json`, ServiceProvider stub и приватный `state.json`.

Минимальный `module.json` после scaffold:

```
{
  "schema_version": 1,
  "meta": {
    "name": "blog",
    "display_name": "Blog",
    "kind": "module",
    "group": "content",
    "version": "1.0.0"
  },
  "settings": {
    "schema": {}
  }
}
```

`schema_version`, `meta.name`, `meta.kind` и `meta.version` — обязательные; `meta.group` — необязательное (kebab-case группа для отображения в `modules:list`). Полный контракт — в [docs/manifest.md](docs/manifest.md).

`storage/app/private/modules/blog/state.json`:

```
{
  "enabled": true,
  "installed_at": "2026-05-23T14:12:00+00:00",
  "updated_at": "2026-05-23T14:12:00+00:00",
  "source": {
    "kind": "local",
    "installed_version": "1.0.0"
  },
  "settings": {
    "values": {}
  }
}
```

Feature Usage
-------------

[](#feature-usage)

Добавьте feature schema и values, как описано в [docs/feature-toggles.md](docs/feature-toggles.md), затем читайте их через scoped repository:

```
