beyondcode/laravel-dump-server
Laravel Dump Server captures dump() output from your application and displays it in a dedicated console or browser, so you can inspect variables without interrupting requests or halting execution. No more dd() breaking your workflow.
Architecture fit. beyondcode/laravel-dump-server is a thin wrapper around Symfony's VarDumper TCP server: one service provider, one Artisan command (dump-server), and an optional publishable config file. It registers no middleware, routes, migrations, queue workers, event listeners, or persistent state. For dependency-inventory purposes it is unambiguously a developer-tooling dependency — pinned in require-dev and excluded from production images via composer install --no-dev. That exclusion is the single most important fact for a TPM's risk register: the package cannot affect request latency, uptime, data integrity, or customer-visible behaviour, which lets it stay out of release-gating discussions and off the customer-impact escalation path entirely. It does not touch the application's runtime graph, so it adds no surface to architectural review, threat modelling of customer traffic, or performance budgets.
Integration feasibility. High, and cheap to prove. Consumption is composer require --dev beyondcode/laravel-dump-server; package auto-discovery handles registration; php artisan dump-server is the entire workflow. Config publishing is optional and only needed to override host/port. Release 2.1.0 clears the two blockers that would otherwise have made adoption awkward inside the current upgrade cycle — Laravel 12 support (#99) and PHP 8.4 deprecation fixes (#96) — and does so without adding features, config surface, or public API. In program terms: this is a routine dev-dependency bump, not a project, and should be scheduled as a line item inside the framework-upgrade epic rather than as standalone work. Realistic effort is hours of engineering plus a smoke test in CI, not days.
Technical risk. Low overall, but the residual risk is sustainability, not correctness:
php, illuminate/*, and symfony/var-dumper constraints. Widened constraints are the most likely real-world friction point: they can create Composer solver conflicts in tightly pinned monorepos even when no application code changed. Size this in the estimate rather than discovering it mid-sprint.dump()/dd(), Ray, Debugbar, Ignition, and Telescope cover adjacent ground. The differentiator is narrow — streaming dumps to a local console without a paid desktop dependency. Tool consolidation ("which dumper when") is the real product decision here, and unresolved ambiguity costs onboarding time every time a new engineer joins.--no-dev as an acceptance criterion rather than relying on convention.Key questions to resolve before adoption:
php, illuminate/*, and symfony/var-dumper constraints in 2.1.0, and do they resolve cleanly against our pinned lockfiles across the whole matrix?dump-server command guarded so it is genuinely unavailable in production builds?dump()/Xdebug, Ray, or Debugbar — and is that acceptable to the team?Note: this evaluation derives from the 2.1.0 release notes and package description only; no composer.json, download statistics, or repository metadata beyond the summary was supplied. Questions 1–4 must be verified against the tagged source before the decision is treated as closed.
Stack fit. Appropriate for Laravel 10/11/12 applications on PHP 8.2–8.4 where developers need dumps routed away from HTTP output — JSON/API responses, AJAX requests, Blade rendering, queue workers, scheduled commands, and other php artisan invocations. It fits local development and CI-adjacent debugging. It does not belong in staging or production images and must not be positioned as an observability tool in any roadmap or stakeholder deck. Framing matters: the moment this appears on an architecture diagram as a "diagnostics layer," it gets dragged into reliability conversations it cannot and should not participate in.
Migration path.
composer update beyondcode/laravel-dump-server; confirm the command starts and captures a test dump. No application code, config, or CI changes expected.require-dev; publish config only if host/port overrides are needed. Add a one-line entry to the shared dev-setup docs so onboarding doesn't rediscover it.Compatibility. Verify three things in CI rather than on one developer's laptop: (a) the solver resolves for every Laravel/PHP combination in our matrix; (b) PHP 8.4 deprecation notices are actually gone from test output — verify the stated fix rather than trusting the changelog; (c) Laravel 12 projects install without a constraint override or --with-all-dependencies workaround. Because the package is dev-only, incompatibility degrades developer experience but cannot block a production deploy. State this explicitly in the rollout note so it is never escalated as a release blocker.
Sequencing.
^2.1 in require-dev; do not float to * — an unmaintained upstream must not be able to introduce surprise changes.composer.json so every service inherits a consistent dev-tool version.dump-server for CLI/queue/API work, Ray for those who have it, Telescope for request-level inspection, native dump() as the always-available fallback.Maintenance. Effectively zero ongoing cost. No migrations, no scheduled jobs, no persistent configuration, no data to back up, no credentials to rotate, no dashboards to own. The only recurring work is a Composer constraint review on each Laravel or PHP major, plus a smoke test confirming the command still starts and captures output. Book that as a one-line item inside the framework-upgrade checklist; do not open a maintenance epic for it. Because the package is stateless and dev-only, there is no drift risk between environments and nothing to reconcile after a rollback.
Support. Support burden is developer-to-developer, not on-call. There is no vendor SLA, no paid tier, and no published support policy — the community model is "issues and PRs, best effort." That is acceptable for a convenience tool but must be recorded in the dependency register so expectations are set before, not after, someone escalates a broken dump workflow. Recommend nominating one engineer as the informal owner so questions have a destination and so the pin gets reviewed during upgrades. Document the pre-agreed fallback (native dump()/Xdebug, or Ray where licensed) so a maintainer going quiet becomes a decision already made rather than a rediscovered incident.
Scaling. Two dimensions, both benign. Team scaling is a documentation problem: without a written "which dumper when" convention, every new engineer re-litigates tooling and wastes a day. Ship the decision note with the adoption PR. Port scaling is the practical constraint — each developer running multiple services locally needs distinct ports to avoid collisions; assign them in the published config per project. There is no server-side scaling concern: each developer runs their own process on their own machine, so cost scales linearly with headcount at approximately zero dollars and zero infrastructure. It adds no load to shared environments, no CI minutes if the smoke test is kept to the dev pipeline, and no licensing spend.
Failure modes. Enumerate these so triage is fast and no one mistakes a dev-tool glitch for a product incident:
dump() does nothing" moment. Mitigation: document that php artisan dump-server must be started first.Ramp-up. Near-zero for anyone already fluent in Laravel's dump()/dd() — the mental model is unchanged, only the output destination moves. Budget fifteen minutes per engineer: one line in the dev-setup guide, one paragraph in the runbook covering startup, port assignment, and the container caveat. No training session, no certification, no vendor onboarding. For stakeholders, the ramp-up is a single sentence in the upgrade-epic status update: this is a free, MIT-licensed, dev-only utility that keeps the debugging workflow intact through the Laravel 12 / PHP 8.4 transition, with no migration project and no customer-facing risk.
How can I help you explore Laravel packages today?