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

Laminas Development Mode Laravel Package

laminas/laminas-development-mode

Laminas Development Mode provides a simple command-line toggle for switching a Laminas MVC application between production and development configurations, enabling development modules, debug settings, and config caching behavior without manual config file edits.

Deep Wiki
Context7

Technical Evaluation

Architecture fit. This is not a Laravel package. It is a Laminas MVC convention utility whose entire job is to copy config/development.config.php.dist → config/development.config.php and delete it again. Its integration surface is a filesystem convention read by Laminas\Mvc\Application::init(), not a service provider, facade, or config key. In a Laravel codebase there is no consumer for that file, so the package would install cleanly and do nothing. Laravel's equivalent concern is already solved by APP_ENV / APP_DEBUG in .env, php artisan config:cache, and config/*.php environment branching — with strictly better ergonomics and no file mutation.

Integration feasibility. Mechanically trivial: a Composer bin (development-mode enable|disable|status), BSD-3-Clause, no framework bootstrapping required. It could be installed --dev in any PHP repo, but utility is confined to Laminas/ZF-derived applications. For our Laravel services, feasibility is "possible but purposeless"; for any residual Laminas/Zend Framework estate (legacy admin panels, acquired apps), feasibility is high and near-zero effort.

Technical risk. Low intrinsic risk, but three concrete hazards if misapplied:

  • Production foot-gun. The command has no environment guard we can verify from the description. A stray development-mode enable on a production host would activate dev modules and verbose error output — an information-disclosure vector. Treat as a privileged command, not a routine one.
  • File mutation in ephemeral/immutable infrastructure. Writing into config/ conflicts with read-only container filesystems and immutable deploy artifacts; containers built after enable will silently ship dev config.
  • Local override loss. enable copies from .dist, so any hand-edited development.config.php is clobbered. Acceptable only if that file is strictly generated and gitignored.

Key questions.

  1. Do we own or inherit any Laminas/ZF applications at all? If no, this is a hard pass regardless of quality.
  2. Does the command refuse to enable when an env indicator suggests production, or is it unguarded?
  3. Is config/development.config.php gitignored and excluded from build artifacts in our templates?
  4. Does the team's mental model of "development mode" already resolve to .env? Mixing two switch mechanisms in one org is a support cost for zero capability gain.
  5. Maturity signal: 18 stars and a 1.14 opportunity score indicate a small, single-purpose utility in a shrinking ecosystem — not a signal of poor quality, but of narrow relevance.

Integration Approach

Stack fit. Poor for Laravel, good for Laminas. Do not add it to Laravel service templates, boilerplates, or shared internal packages — it would be dead weight and a confusing signal in composer.json. If adopted at all, scope it to Laminas-ecosystem repos only, as require-dev.

Migration path. Directional: Laminas → Laravel migrations should remove this dependency and translate the intent into .env keys and config/ entries. There is no path to make the package meaningful inside Laravel short of writing a compatibility shim that reads development.config.php during bootstrap — an anti-pattern that creates a second, undocumented config source. Explicitly reject that.

Compatibility. Requires Composer and a PHP runtime only; no Laravel version constraints to satisfy and no known conflicts. It is inherently safe to install — the risk is behavioural, not dependency-graph. Verify PHP version support against our floor before scoping to legacy apps.

Sequencing (only if a Laminas app is in scope).

  1. composer require --dev laminas/laminas-development-mode in the legacy repo.
  2. Confirm config/development.config.php.dist exists and config/development.config.php is gitignored and excluded from Docker build context.
  3. Add a Composer script alias (e.g. "dev:on": "development-mode enable") so engineers never call the raw binary and the intent is discoverable.
  4. Add a CI assertion on development-mode status in build jobs to catch accidentally committed dev config.
  5. Document the boundary: this toggles Laminas config merge only — it does not set environment variables, so app code branching on getenv() is unaffected.

Operational Impact

Maintenance. Effectively zero. The code surface is a few commands and a file copy; the last release (2025-10-14) indicates the Laminas project still ships it. A dependency this small cannot rot in a way that costs us more than deleting it.

Support. Small community (18 stars) means no vendor-style support and little Stack Overflow coverage — acceptable because the failure surface is a filesystem operation any engineer can debug. Internal support burden is documentation, not code: the recurring ticket will be "why is dev mode on/off in my checkout" and "this doesn't work in Docker because config/ is read-only."

Scaling. Irrelevant at runtime — the package has no production footprint, no request-path cost, no throughput characteristic. It scales as a governance item, not a technical one: one dev dependency per legacy repo, one more convention to explain during onboarding, and the risk that it spreads by copy-paste into repos where .env is the right answer.

Failure modes.

  • Permission denied writing config/ (containers, CI runners) — fails loudly, safe.
  • Accidental enable on a production host — fails silently and dangerously; mitigate with deploy-time checks and least-privilege filesystem access.
  • Stale state after toggling without clearing Laminas config cache — confusing, resolved by cache clear.
  • Missing .dist file after a skeleton change — command becomes a no-op error.
  • Clobbered hand edits on enable — silent loss of local work. None of these are novel; all are avoidable with a three-line README.

Ramp-up. One command, minutes to learn. The real onboarding cost is conceptual: teaching engineers that "development mode" here means one file exists, not that the environment changed. In a mixed estate, that distinction must be documented or it will produce debugging detours.

Recommendation. Do not adopt for Laravel workstreams — the opportunity score of ~1.1 correctly reflects near-zero incremental value over native .env tooling. Conditionally accept as require-dev in any Laminas/ZF legacy repositories we still operate, gated on confirming it is unguarded against production use and that config/development.config.php is excluded from build artifacts. If the org has no Laminas footprint, close this as not applicable and spend the equivalent effort on a five-line Artisan command if dev-mode ergonomics ever become a real complaint.

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.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route