Weave 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

Migrations Bundle Laravel Package

zenstruck/migrations-bundle

A Symfony bundle for managing database migrations. It provides commands and configuration to create, run, and track schema changes, helping keep your application's database structure in sync across environments.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Recommendation up front: do not adopt. This package fails the baseline viability gate before any architecture discussion: it is explicitly marked [DEPRECATED] and the repository is archived. There is no maintainer, no release cadence, and no security response path. For a TPM, the decision is not "does it fit?" but "how do we avoid inheriting it?"

Architecture fit — effectively zero for a Laravel codebase. The package is a Symfony bundle, not a Laravel package. It wraps DoctrineMigrationsBundle to allow migrations to resolve services from the Symfony DI container. Laravel does not use Doctrine Migrations as its migration engine — it uses Illuminate\Database\Migrations with its own migrator, repository, and schema builder. Adopting this would require standing up Doctrine's migration subsystem, its bundle/DI integration, and Symfony's container semantics alongside Laravel's — for a feature Laravel already provides natively (migrations are classes resolved through the service container, with constructor injection and app() access). The architectural mismatch is total, not incremental.

Even in a Symfony context it is redundant. Container-aware migrations became a first-class capability in DoctrineMigrationsBundle itself (migrations implementing ContainerAwareInterface receive the container). This wrapper existed to fill a gap that upstream closed. Adopting the wrapper means taking on an unmaintained dependency to obtain behavior the maintained upstream dependency already ships.

Integration feasibility — low, and the effort is misdirected. The only plausible integration scenario is a polyglot estate where a Symfony service already depends on this bundle. In that case the work is removal, not integration. For a Laravel-first team, there is no feasible integration path that a reasonable engineer would sign off on.

Technical risk — high and asymmetric.

  • Abandonment risk: realized. Archived repos receive no PHP 8.x compatibility fixes, no Symfony 5/6/7 support, no CVE response. Any future framework or runtime upgrade becomes a blocked dependency.
  • Supply-chain risk. A 3-star, 0-dependent, archived package is not a package you can lean on for audit or provenance. Low download volume means breakage surfaces in your environment first.
  • Ecosystem signal is negative, not neutral. 0 dependents means no one else is de-risking this for you; 3 stars means no community to escalate to.
  • Behavioral risk specific to container-aware migrations. Migrations that reach into a live DI container couple schema changes to application service configuration. That produces migrations whose behavior depends on environment, config, and service wiring at execution time — a well-known source of non-reproducible schema state. This risk exists upstream too; the wrapper adds a second, unmaintained layer of it.

Key questions for the team:

  1. Do we operate any Symfony service today, or is this appearing only as a transitive entry in a composer.lock we inherited?
  2. What is the actual underlying requirement — "migrations that can access application services"? If so, what does Laravel's native container-resolved migration support fail to cover?
  3. Who owns the upgrade path if a PHP minor version breaks this? (Expected answer: nobody, because it is archived.)
  4. Is the package already in production anywhere, or is this a pre-adoption evaluation? This changes the work from "decline" to "remediate."

Integration Approach

Stack fit. None for a Laravel stack. Laravel's migrator already resolves migration classes through the container, so the capability this bundle was built to add is native and better integrated. Introducing Doctrine Migrations into a Laravel application means two schema-migration authorities writing to the same database — an operational hazard, not just a code smell.

Migration path — the only supported direction is off this package.

Current state Action Target state
Evaluating for adoption Decline; no spike, no POC Not adopted
Present as transitive dependency Trace the requiring package; pin and plan removal Removed from lockfile
Present in a Symfony service Swap to native DoctrineMigrationsBundle container-aware support Maintained upstream dependency
Genuine need for service-aware migrations in Laravel Use native container resolution in migration classes No new dependency

Compatibility. Expect this to fail Composer resolution against modern constraints. Archived Symfony bundles typically cap out at older symfony/* and doctrine/* major versions, which in a Laravel/Symfony polyglot creates a conflict web that forces transitive downgrades elsewhere. That is the most likely way this package causes real damage: not by being used, but by holding back unrelated dependencies during a resolution pass.

Sequencing.

  1. Audit composer.json / composer.lock across all first-party repos for presence, direct or transitive. Low star count and 0 dependents suggest it is unlikely to be pulled in transitively, but confirm rather than assume.
  2. Classify each hit as direct dependency, transitive dependency, or dev-only. Dev-only is low urgency; runtime is a scheduled remediation.
  3. Isolate the requirement. Document what the calling code actually needed from the container inside a migration.
  4. Replace with the maintained equivalent — native Laravel container resolution, or upstream DoctrineMigrationsBundle for Symfony services.
  5. Remove the package, then run a full dependency resolution to confirm no pin was masking a version conflict.
  6. Add a guard: a CI check or approved-dependency allowlist that flags archived/deprecated Composer packages, so this class of dependency does not re-enter silently.

What not to do. Do not fork it. A fork transfers maintenance ownership to your team for a package whose entire value proposition is already covered upstream — you would be accepting permanent cost to preserve a deprecated abstraction.

Operational Impact

Maintenance. The maintenance burden is not "keep it updated" — it is "it cannot be updated, and everything around it can." The package becomes a fixed point that constrains PHP runtime upgrades, Symfony/Doctrine upgrades, and Composer resolution. That cost is invisible until the first upgrade cycle where it blocks, then it becomes urgent and unbudgeted.

Support. No vendor, no maintainer, no issue tracker, no CVE channel. Internal support means whichever engineer last touched it, and institutional knowledge of a deprecated wrapper is unlikely to exist. Escalation path: none.

Scaling. Not a scaling concern in the throughput sense. The scaling risk is organizational: every additional service that touches this package multiplies the eventual remediation surface, and the cleanup cost grows with adoption rather than staying flat.

Failure modes, ranked by likelihood:

  1. Dependency resolution failure on a routine composer update — most likely, lowest blast radius, easy to diagnose.
  2. Silent behavioral drift — container-aware migrations resolving different services across environments, producing schema changes that worked in staging and behave differently in production.
  3. Hard break on runtime upgrade — PHP or Symfony major bump makes the bundle unloadable; discovered mid-upgrade with no fix available.
  4. Compile/autoload failure at boot — bundle registration fails after a framework change, taking the application down rather than degrading.
  5. Security exposure — any future CVE in the bundle's Symfony/Doctrine dependency chain cannot be patched at this layer.

Ramp-up. Near zero, and that is the point: there is nothing to learn because nothing should be built on it. If the package is already in production, the ramp-up burden is concentrated in the remediation engineer who must reverse-engineer which migrations depended on container access and why — budget for that as archaeology, not as a normal upgrade task. Expect the discovery to reveal migrations that are order-dependent or environment-sensitive, which is a larger cleanup than the dependency removal itself.

Bottom line for the roadmap. Treat this as a finding, not a candidate. The only TPM action is a remediation ticket scoped to confirming absence or scheduling removal, plus a policy control — an allowlist rejecting archived or deprecated Composer packages — so the evaluation effort is spent once rather than repeated per service.

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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package