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.
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:
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.config/ conflicts with read-only container filesystems and immutable deploy artifacts; containers built after enable will silently ship dev config.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.
config/development.config.php gitignored and excluded from build artifacts in our templates?.env? Mixing two switch mechanisms in one org is a support cost for zero capability gain.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).
composer require --dev laminas/laminas-development-mode in the legacy repo.config/development.config.php.dist exists and config/development.config.php is gitignored and excluded from Docker build context."dev:on": "development-mode enable") so engineers never call the raw binary and the intent is discoverable.development-mode status in build jobs to catch accidentally committed dev config.getenv() is unaffected.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.
config/ (containers, CI runners) — fails loudly, safe..dist file after a skeleton change — command becomes a no-op error.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.
How can I help you explore Laravel packages today?