vanio/vanio-domain-bundle
A Symfony bundle from Vanio for domain-driven design, providing base classes and infrastructure to organize domain models, repositories, and services cleanly within Symfony applications.
Architecture fit — low, and mismatched at the framework layer. Despite appearing in a Laravel/PHP package index, vanio/vanio-domain-bundle is a Symfony bundle, not a Laravel package. Its integration surface is Symfony's DependencyInjection component (bundle class, extension, YAML/XML service definitions, compiler passes, tagged services). Laravel has no bundle concept, so there is no install → register provider → use path. What the package actually sells is an architectural pattern — a domain layer separated from persistence, with domain managers/repositories mediating access to Doctrine-mapped entities and explicit transaction boundaries. The ideas are portable; the wiring is not.
Integration feasibility — feasible but not "installable." Two mutually exclusive paths:
| Path | Effort | Notes |
|---|---|---|
| Port the DI glue to a Laravel service provider | Medium (1–2 sprints) | Requires reading and re-expressing bundle config in Illuminate\Support\ServiceProvider bindings; every compiler pass becomes a manual binding or a container decorator |
Adopt Doctrine in Laravel (laravel-doctrine/orm) and keep the bundle's contracts |
Medium–High | Introduces a second ORM alongside Eloquent; two persistence idioms in one codebase is a durable tax |
Neither path is a Composer-only change. The package's value is its abstractions, not its code — a team that wants this pattern should reasonably reimplement ~80% of it in-house against Eloquent, using the repo as a design reference.
Technical risk — high, dominated by project-health signals. One star, zero dependents, and a composite score of 0.005 are not ambiguous. The 10.23 opportunity sub-score reflects an unmet need in the ecosystem (Laravel lacks a first-class DDD/domain-layer toolkit), not the package's readiness. Concretely: no community, no issue-triage signal, no third-party validation, and version constraints that will silently exclude current PHP/Symfony releases on composer require. Vendor risk here is total — the maintainer is a single commercial entity (Vanio.cz) and there is no evidence of active stewardship.
Key questions for the maintainer / spike
Verdict: do not adopt as a dependency. Treat it as a reference architecture for a 2-day spike, and scope any real implementation as an internal Laravel package.
Stack fit — poor as shipped, instructive as a pattern. The target stack (Laravel, Eloquent, App\Providers) shares nothing with the source stack (Symfony kernel, DI extensions, Doctrine). The transferable assets are the naming conventions, the manager/repository separation, and the explicit unit-of-work semantics.
Migration path — none exists; this is a rebuild. Frame it to stakeholders honestly as greenfield internal work with an open-source design reference, not as a migration. Suggested decomposition:
DomainManager, Repository, EntityMapper equivalents) as framework-agnostic interfaces.Illuminate imports where practical.Compatibility — unverified and likely stale. Before any spike, check composer.json for php and symfony/* constraints against the current runtime. Expect to pin or patch for modern PHP; expect PHPUnit and Doctrine version drift in the test suite. A dependency-resolution failure at step zero is the most likely spike outcome and is itself the cheapest possible signal.
Sequencing
composer install on current PHP, read the bundle extension and service definitions, document which abstractions map cleanly to Eloquent. Exit criteria: a written go/no-go with a diff of "adopt vs. reimplement."Maintenance — the cost is ours, entirely. With zero dependents and no upstream activity, every future PHP/Laravel upgrade is a fork-maintenance task. Budget for owning the code outright. MIT licensing makes the fork legal and unencumbered, which is the one genuinely favorable signal here. Do not let a fork drift private without recording the upstream commit SHA and the delta.
Support — effectively none. No community, no Discord, no documented SLA, documentation limited to the repository README. Internal engineers become the sole escalation path. For a pattern this opinionated, that means the first unfamiliar edge case is a research project, not a ticket.
Scaling — technically neutral, organizationally risky. The pattern itself scales fine; domain-layer indirection is cheap at runtime. The real scaling constraint is cognitive: a DDD/unit-of-work layer imposes ceremony on every CRUD-shaped feature, and Laravel teams optimized for Eloquent velocity will experience it as friction. Expect resistance on simple endpoints and value only on genuinely complex domains.
Failure modes to watch
Ramp-up — the steepest cost. Two compounding curves: the package's undocumented internals (weeks of reading for one engineer) and DDD/unit-of-work concepts for engineers raised on Active Record (weeks to months for team fluency). With no tutorials, no community answers, and one star of social proof, expect onboarding to be entirely internal-documentation-driven. Only pursue if the team already has DDD experience and a bounded context where the complexity is unambiguously justified.
Bottom line for the roadmap: treat as a research input, not a dependency. Cap investigation at two days; the expected value of the spike is a faster internal design, not a working integration.
How can I help you explore Laravel packages today?