yceruto/ddd-maker-bundle
A Symfony MakerBundle extension for scaffolding domain-driven design projects. It provides interactive commands to generate aggregates, entities, value objects, repositories, use cases, and other DDD building blocks, helping teams establish consistent layered architecture faster.
Architecture fit. This is a Symfony bundle, not a Laravel package — that is the single most important finding. It extends the Symfony Maker ecosystem (symfony/maker-bundle) to scaffold Domain-Driven Design layers (Domain entities/value objects, Application use cases, Infrastructure adapters) via CLI commands. It has no service provider, no Artisan commands, no Laravel auto-discovery, and no runtime footprint in a Laravel app. Its architectural value is real but framework-bound: it encodes DDD conventions as generator stubs.
Integration feasibility. Direct adoption into a Laravel codebase is not feasible without a port. A Laravel team would either (a) fork the package and rewrite the command layer against Artisan's GeneratorCommand, or (b) treat the stub templates as a reference and build thin internal generators. Effort for option (b) is modest — the stubs are the asset; the Symfony command plumbing is replaceable. For a Symfony shop, integration is a one-line dev dependency plus bundle registration.
Technical risk. Low blast radius, moderate maturity risk. It is a dev-only code generator, so it cannot introduce production runtime or security exposure; worst case it generates code you delete. Conversely, it carries all the classic low-adoption signals: 17 stars, 0 dependents, a single maintainer, and a last release of 2023-12-01 — roughly two years stale as of a 2026 evaluation. That implies uncertain compatibility with Symfony 7/8 and PHP 8.3+, no community validation of edge cases, and no support path if it breaks. Score of 0.175 and opportunity of 1.73 reflect that near-zero ecosystem gravity.
Key questions. Is the target codebase Symfony or Laravel — this determines whether the evaluation is "adopt" or "mine the templates"? What Symfony and PHP version constraints are declared, and has anyone verified them against the current LTS? Is the package intended as a dev dependency only (confirm the bundle is registered in dev)? Who owns the fork if upstream stalls? Does the generated output match our existing layer/naming conventions, or would we fight the stubs? Is there a comparable, actively maintained generator in the Laravel ecosystem (e.g., Blueprint-style tooling) that removes the port entirely?
Stack fit. Poor for Laravel, good for Symfony. In Laravel, the closest analogue is a hand-rolled set of Artisan generators plus published stubs — the package's value transfers as content, not as code. If the organization runs both frameworks, standardize the stub set centrally and expose it through two thin adapters rather than adopting two divergent libraries.
Migration path. Because nothing here touches production runtime, adoption and reversal are both cheap. In Symfony: composer require --dev, register the bundle in config/bundles.php, run a generator in a scratch namespace, inspect output. In Laravel: vendor/fork the repository, extract templates/ into stubs/, implement one Artisan command per artifact type, and delete the Symfony wiring. Neither path requires a data migration, feature flag, or cutover window.
Compatibility. Verify declared constraints against the target PHP and framework version before committing. The stale release date is the primary compatibility hazard — expect to bump composer.json constraints or patch deprecations for Symfony 7+. In Laravel, the only shared surface is PHP itself, so framework version drift is a non-issue once ported.
Sequencing. (1) Confirm framework target and decide adopt-vs-port. (2) Run a one-day spike: generate a representative slice (one aggregate, one use case, one repository interface) and diff against team conventions. (3) If output quality is acceptable, fork to an internal repository and pin a commit — do not depend on upstream tags. (4) Publish internally with a README documenting conventions and a version-support policy tied to our PHP/Symfony cadence. (5) Pilot with one squad before broad rollout.
Maintenance. The package itself needs almost no care — it is a dev-time tool with no runtime, no scheduled jobs, no state. The maintenance burden shifts to us: owning a fork, tracking PHP/Symfony deprecations, and keeping stubs aligned with evolving team conventions. Budget a few days per year of stewardship, concentrated at framework upgrade time.
Support. There is effectively no upstream support channel: one maintainer, no dependents, minimal issue traffic. Any incident is an internal incident. This is acceptable only if a named owner accepts the fork; if no one will, the honest recommendation is to copy the stubs and abandon the dependency.
Scaling. Runtime scaling is a non-question. Scaling pressure appears in onboarding and consistency: the tool's payoff is uniform project structure across many developers, and its cost is teaching DDD layering to people who may not have it. It scales fine to dozens of developers; it does not scale across frameworks without the adapter approach described above.
Failure modes. Framework upgrade breaks the generator silently (fails at command invocation, not at build time). Generated code drifts from team standards because stubs are frozen while conventions move. Developers treat generated scaffolds as authoritative and skip design thinking, producing CRUD-shaped "DDD." Upstream archive or abandonment strands consumers on an unpinnable dependency. Fork divergence if multiple teams patch independently.
Ramp-up. Low technical ramp-up, moderate conceptual ramp-up. A developer can learn the command surface in under an hour; using the generated layers correctly takes considerably longer and depends on existing DDD literacy on the team. Plan a short internal walkthrough plus one worked example in the repository, and gate rollout on that example existing — otherwise the tool accelerates the production of structurally consistent but conceptually wrong code.
How can I help you explore Laravel packages today?