phpyh/service-dumper-bundle
A Symfony bundle that dumps the services registered in your DI container, making it easy to inspect definitions, tags, and dependencies during development. Useful for debugging container configuration and understanding how services are wired together.
Headline finding: framework mismatch. The brief frames this as a "Laravel/PHP package," but phpyh/service-dumper-bundle is a Symfony bundle. It hooks Symfony's ContainerBuilder/compiler-pass machinery and registers via config/bundles.php. Laravel's container (Illuminate\Container) has no bundles, no compiler passes in the Symfony sense, and no ContainerBuilder — so on a Laravel stack this is not integrable, only portable. Confirming the target framework is the gating question; everything below branches on it.
Architecture fit (Symfony path). It is a developer-only diagnostic, not a runtime dependency. Correctly installed with --dev and conditionally registered ($env === 'dev' || $env === 'test'), it has zero production footprint and near-zero uninstall cost. That makes it a low-risk trial — but it also means the buy decision rests entirely on output ergonomics, because FrameworkBundle already ships debug:container --show-arguments, debug:container --tag=…, debug:autowiring, and lint:container. The package's differentiated value is a compact, whole-container, human-readable dump rather than any capability core Symfony lacks.
Mechanism and a likely accuracy caveat. Compiled containers discard Definition objects, so the bundle almost certainly captures definitions in a compiler pass and exposes them to a command afterward. If so, the dump is a snapshot at pass-ordering time, not necessarily the final resolved container — RemoveUnusedDefinitionsPass, RemovePrivateAliasesPass, and framework passes mutate definitions late. Verify where the pass is registered relative to PassConfig::TYPE_REMOVE; if it runs early, output can include services that no longer exist and miss decoration/inlining results. For a tool whose whole purpose is "how config is actually resolved," this is the difference between useful and misleading.
Technical risk. 24 stars, a single small consultancy as maintainer, score 0.28, and a last release of 2023-12-20 give a thin maintenance signal. Concrete risks:
Reference, AbstractArgument, tagged iterators, service locators, inline/synthetic definitions, and closures/factories is where these tools break; circular reference graphs risk infinite recursion.Key questions
php and symfony/* constraints in composer.json, and do they cover our pinned Symfony version?--service option for large containers, or does it always emit everything?debug:container output does this close for our team?Stack fit. Viable only on Symfony 6.4/7.x with PHP 8.1+ (to be confirmed from composer.json, not assumed from the release date). On Laravel, there is no migration path — the closest equivalents are php artisan about, app()->getBindings()/getAliases(), tagged bindings via $app->tag()/tagged(), or Debugbar/Telescope; none is a drop-in, and a ~100-line internal Artisan command covering the same surface is a better investment than porting a 24-star Symfony bundle.
Migration and compatibility. There is nothing to migrate — it is additive and dev-scoped. Required steps: composer require --dev, conditional entry in config/bundles.php, pin the exact version, commit the lockfile. Uninstall is a one-commit revert, which is precisely why a time-boxed spike is cheap.
Sequencing
composer.json for Symfony/PHP ranges against our pinned versions; reject on mismatch without further work.debug:container --show-arguments and --tag. Judge solely on output ergonomics and correctness vs. the final container.lint:container to CI as the durable guardrail (the bundle itself is not a CI tool).Maintenance. Dev-only, so production maintenance is nil; the real cost is upgrade friction at each Symfony major. Mitigate by pinning, and accept that a fork-or-vendor fallback is at most one dev-day away given the small surface area. Budget a check on every Symfony major bump.
Support. Single maintainer organization, MIT, no SLA, no visible security process, no issue-triage guarantees. Treat as unsupported tooling: no critical-path dependency, no reliance during incidents.
Scaling. Not a scaling concern in the production sense. The practical scale limit is container size — large containers (several hundred services with deep argument graphs) produce output that needs grepping, and recursive argument rendering is the most likely place to hit a stack overflow or a silent truncation.
Failure modes and blast radius
Ramp-up. Minutes for a Symfony developer already fluent with bin/console; effectively zero — but for a Laravel team the tool's value is zero regardless of ramp-up. Net recommendation: conditional adopt as a dev nicety in a Symfony shop only if the spike beats debug:container; reject for a Laravel stack in favor of a small internally owned command.
How can I help you explore Laravel packages today?