enhavo/taxonomy-bundle
Taxonomy bundle for the Enhavo CMS, providing flexible category and tag management on top of Symfony. A subtree split of the main Enhavo repository; see the main project for documentation and support.
Architecture fit. The single most important finding is a stack mismatch: enhavo/taxonomy-bundle is a full-stack Symfony bundle, not a Laravel package. It is designed to be registered through Symfony's Kernel, wired via DI service definitions and compiler passes, and mapped through Doctrine ORM. Laravel consumes a subset of Symfony components (Console, HttpFoundation, Routing, VarDumper), but it does not run a Symfony kernel or bundle registration pipeline, so the bundle cannot be composer required into a Laravel app and "just work." The repository description ("[READ-ONLY]... a subtree split of the main repository") confirms this is a publishing artifact of the Enhavo CMS monorepo, not an independently maintained library. Fit with a Laravel codebase is therefore effectively zero at the framework level; the only transferable asset is the domain model — how taxonomies, terms, and their associations are structured — which can be read as a reference design.
Integration feasibility. Low. Three compounding factors: (1) the package has 0 stars, 0 dependents, and a maturity rating of "readme," meaning there is no documentation, no surfaced test suite, no release notes, and no external consumer validating it in the wild; (2) a subtree split inherits the monorepo's versioning and history, so tags can move and the split has no independent issue tracker or contribution path; (3) the bundle almost certainly depends on Enhavo core bundles and Doctrine entities rather than standing alone, which means an install attempt drags in a large transitive dependency graph built for a CMS you are not running. The realistic assessment is that this is not integrable as a dependency into a Laravel product — it is at best a design reference and at worst a source of confusing composer conflicts if trialed.
Technical risk.
Key questions for the maintainers or an internal spike.
EnhavoCoreBundle and the admin stack?Stack fit. PHP and Composer are shared, and Doctrine ORM is available in both ecosystems, but that is where the overlap ends. A Laravel application is Eloquent-first; adopting this bundle would mean either (a) introducing Doctrine ORM alongside Eloquent purely for taxonomy, or (b) translating the schema into Eloquent models and migrations. Option (a) creates a permanent dual-ORM maintenance burden for a single bounded feature — a poor trade. Option (b) discards nearly all of the package's code and retains only the schema, which raises the question of why the dependency exists at all.
Migration path. Three viable routes, in descending order of pragmatism:
Compatibility. Pin to an exact commit SHA rather than a version constraint if any evaluation install occurs, since split tags are not a stable contract. Verify PHP minor version and Symfony/Doctrine major version alignment against the Laravel version in use before writing any spike code.
Sequencing. (1) Two-day discovery spike: read the monorepo taxonomy source, document the model, confirm dependency weight. (2) Build-versus-port decision gate with an explicit cost estimate for native reimplementation. (3) If porting, extract and freeze the schema. (4) Implement models, migrations, and the admin surface in Laravel. (5) Backfill or migrate any existing taxonomy data. (6) Cut over behind a feature flag and decommission the spike branch. Do not begin with a composer install attempt — it will consume time and produce nothing reusable.
Maintenance. The team absorbing this package becomes the de facto maintainer. With 0 dependents there is no upstream community applying pressure to keep it healthy, and the subtree-split model means meaningful fixes must be proposed against the monorepo — where the split's read-only status gives you no local issue history. Budget ongoing effort for dependency updates and for re-diffing the split against the monorepo to catch silent changes.
Support. Documentation is a marketing paragraph about the Enhavo CMS plus a pointer to the main repository. There is no usage guide, no migration guide, and no API reference. Support is best-effort through Enhavo's channels, which for a TPM translates to an unquantified escalation risk rather than an SLA. Any production dependency on this package should carry an explicit internal-ownership assumption in the risk register.
Scaling. Taxonomy itself is a read-heavy, highly cacheable concern and is unlikely to be the system bottleneck. The scaling risks are indirect: hierarchical term queries can produce recursive joins that degrade under deep trees, and polymorphic term associations often resist clean indexing. In the sidecar topology, scaling adds a service to operate and a cache-coherence problem between the CMS and the consuming application.
Failure modes. Composer dependency resolution conflicts on install; silent breakage when the monorepo rewrites history or re-tags the split; orphaned database tables and polymorphic association rows if the package is removed without published down-migrations; large transitive dependency surface widening the CVE exposure; and the classic orphan-package failure where a PHP minor version bump leaves the split permanently behind. The highest-probability failure is simpler still: a spike that assumes Laravel compatibility, installs the bundle, and discovers the Symfony kernel dependency after the sprint has been committed.
Ramp-up. A Laravel-oriented team faces a real learning curve to read this codebase productively: Symfony bundle conventions, DI compiler passes, Doctrine entity mapping, and Enhavo's own core abstractions. Estimate several days before any engineer can confidently assess the taxonomy logic, versus roughly a day to specify an equivalent native Laravel implementation. Given the 0-star, 0-dependent, readme-only maturity profile, the defensible TPM recommendation is do not adopt as a dependency; mine it for schema and domain insight only, and build the taxonomy capability natively unless Enhavo is already a committed platform in the estate.
How can I help you explore Laravel packages today?