Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Modules Laravel Package

mozex/laravel-modules

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • Modular Monolith Advantage: The package aligns perfectly with a modular monolith architecture, enabling feature isolation without full microservices overhead. Ideal for mid-to-large Laravel applications where:
    • Teams work on independent features (e.g., Auth, Payments, Admin).
    • Scalability is needed for feature-specific scaling (e.g., caching, queues per module).
    • Legacy code refactoring is required without breaking changes.
  • Laravel Ecosystem Synergy: Seamlessly integrates with Laravel’s core (routes, views, migrations) and modern stacks (Livewire, Filament, Nova). Reduces boilerplate for module registration and asset discovery.
  • Convention Over Configuration: Auto-discovers assets from Modules/ directory, reducing manual setup but requiring strict adherence to module structure.

Integration Feasibility

  • Low-Coupling Design: Modules are self-contained; minimal cross-module dependencies reduce integration friction.
  • Laravel Version Compatibility: Supports Laravel 10+ (as per docs). Verify compatibility with your stack (e.g., Livewire 3.x, Filament 3.x).
  • Asset Isolation: Supports namespaced assets (e.g., Modules/Auth/views/login.blade.php), preventing conflicts.
  • Database Migrations: Auto-registers module-specific migrations, but requires careful sequencing (see Operational Impact).

Technical Risk

Risk Area Mitigation Strategy
Asset Collisions Enforce unique module namespaces (e.g., Modules/{Feature}/). Use module:publish to customize paths.
Dependency Hell Document module interdependencies (e.g., Auth module requiring Users). Use Composer’s replace for module-specific packages.
Performance Overhead Benchmark auto-discovery vs. manual registration. Cache module metadata if needed.
Testing Complexity Modules require isolated testing (e.g., php artisan module:test Auth). Invest in module-specific test suites.
Livewire/Filament Quirks Test module-specific Livewire/Filament resources in isolation; may need custom service providers.

Key Questions

  1. Module Granularity:
    • Should modules align with business domains (e.g., OrderProcessing) or technical layers (e.g., Auth, API)?
    • How will module boundaries impact cross-cutting concerns (e.g., logging, caching)?
  2. State Management:
    • How will shared state (e.g., user sessions, caches) be handled across modules?
    • Will modules use Laravel’s service container or module-scoped containers (e.g., via module:container)?
  3. Deployment Strategy:
    • Will modules be deployed independently (e.g., via feature flags) or as a monolithic unit?
    • How will database migrations be sequenced (e.g., per-module or global)?
  4. Tooling Integration:
    • Does your CI/CD support module-specific testing/deployment (e.g., GitHub Actions workflows)?
    • Will you use Laravel Forge/Envoyer for module-level scaling?
  5. Legacy Code:
    • How will existing non-modular code be incrementally migrated?
    • Will you use module wrappers for legacy controllers/services?

Integration Approach

Stack Fit

  • Core Laravel Stack: Optimized for Laravel 10+ with Blade, Livewire, Filament, and Nova support.
  • Modern PHP: Requires PHP 8.1+ (for named arguments, attributes).
  • Composer: Auto-loads module classes via Composer’s autoloader.
  • Database: Supports MySQL, PostgreSQL, SQLite (via Laravel Migrations).
  • Frontend: Works with Vite, Laravel Mix, or Inertia.js (for module-specific assets).

Migration Path

  1. Assessment Phase:
    • Audit existing codebase for tight coupling (e.g., global service providers, shared controllers).
    • Identify high-cohesion, low-coupling features to modularize first (e.g., Payments, Reports).
  2. Incremental Adoption:
    • Step 1: Create a Modules/ directory and refactor one feature (e.g., Auth) into a module.
    • Step 2: Migrate routes, views, and migrations to the module.
    • Step 3: Gradually move models, policies, and commands into modules.
    • Step 4: Replace global service providers with module-specific providers.
  3. Tooling Setup:
    • Publish module assets: php artisan module:publish Auth --tag=config,views,migrations.
    • Configure config/module.php for module-specific settings (e.g., namespace prefixes).

Compatibility

Component Compatibility Notes
Livewire Module-specific Livewire components auto-registered. Use module:livewire for isolation.
Filament Filament resources must be namespaced (e.g., Modules/Auth/Resources).
Nova Nova tools/resources require explicit module registration in NovaServiceProvider.
Queues/Jobs Module-specific queues can be configured via module:queue.
Events/Listeners Module events must be namespaced (e.g., Modules/Auth/Events). Use module:event.
API Resources Works with Laravel API Resources; namespace routes under Modules/{Feature}/Http.

Sequencing

  1. Database First:
    • Migrate module-specific tables before routes/views to avoid 404s.
    • Use php artisan module:migrate Auth for module-specific migrations.
  2. Frontend Last:
    • Register module assets (CSS/JS) via module:asset after Blade templates are in place.
  3. Testing:
    • Write module-specific tests before integrating with core features.
    • Use php artisan module:test Auth to isolate module behavior.

Operational Impact

Maintenance

  • Pros:
    • Isolated Updates: Modules can be updated independently (e.g., Payments module without touching Auth).
    • Clear Ownership: Teams own entire modules (code, tests, docs).
    • Reduced Merge Conflicts: Feature branches scoped to modules.
  • Cons:
    • Module Discovery Overhead: Auto-discovery may slow boot time (mitigate with caching).
    • Debugging Complexity: Stack traces may span modules (use module:debug command).
    • Documentation Burden: Requires module-level README.md and API docs.

Support

  • Module-Specific Support:
    • Create Slack channels or Jira projects per module for issue tracking.
    • Use php artisan module:list to quickly identify module ownership.
  • Cross-Module Issues:
    • Document inter-module contracts (e.g., Auth module exposing User model to Payments).
    • Use events or APIs for cross-module communication (avoid direct service calls).
  • Vendor Support:
    • Community support is limited (3 stars, but Mozex maintains it). Plan for internal SRE coverage.

Scaling

  • Horizontal Scaling:
    • Modules can be cached independently (e.g., Modules/Payments cached separately from Auth).
    • Use queue workers per module (e.g., php artisan queue:work --queue=payments).
  • Vertical Scaling:
    • Memory: Large modules may increase Laravel’s memory footprint (monitor with php artisan module:memory).
    • Database: Module-specific indexes/queries can be optimized independently.
  • Microservices Path:
    • Modules can be extracted to microservices later using tools like Laravel Horizon or Kubernetes.

Failure Modes

Failure Scenario Mitigation Strategy
Module Boot Failure Use module:disable to isolate failing modules during deployment.
Asset Loading Conflicts Enforce unique module namespaces; use module:publish to customize paths.
Database Migration Errors Run migrations per-module (php artisan module:migrate Auth) with rollback plans.
Livewire/Filament Crashes Isolate module-specific resources; use module:livewire:clear for cache issues.
Composer Autoload Issues Run composer dump-autoload after adding new modules.
Circular Dependencies Use dependency injection (avoid new in modules) and document inter-module deps.

Ramp-Up

  • Onboarding New Developers:
    • Provide a module template (e.g., Modules/Skeleton) with README.md, phpunit.xml, and composer.json.
    • Document the module lifecycle (creation, testing,
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle