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

Service Dumper Bundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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:

  • Version constraint drift — Symfony 7.x/8.x compatibility unverified; a hard boot failure on upgrade is probable rather than graceful.
  • DI-internals coupling — correct recursive rendering of Reference, AbstractArgument, tagged iterators, service locators, inline/synthetic definitions, and closures/factories is where these tools break; circular reference graphs risk infinite recursion.
  • Disclosure — env vars normally appear as placeholders, but literal arguments (DSNs, tokens), factory arguments, and inline definitions can print in cleartext and end up pasted into tickets or chat.
  • Compilation blast radius — a throwing compiler pass breaks container compilation for every developer in dev.

Key questions

  1. Is the target stack actually Symfony, or Laravel with Symfony components? If Laravel, this evaluation ends at "do not adopt."
  2. What are the exact php and symfony/* constraints in composer.json, and do they cover our pinned Symfony version?
  3. Where is the compiler pass registered in the pass order, and does the command read pre- or post-removal definitions?
  4. Does it handle decoration, tagged iterators, service locators, and circular references without recursing or truncating silently?
  5. Is there a filter/--service option for large containers, or does it always emit everything?
  6. Which concrete gaps in debug:container output does this close for our team?

Integration Approach

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

  1. Confirm framework target (owner: TPM; same day). Blocking.
  2. Constraint check — read composer.json for Symfony/PHP ranges against our pinned versions; reject on mismatch without further work.
  3. Time-boxed spike (≤0.5 dev-day) on a branch: run the dump against a container with 100+ services and side-by-side diff against debug:container --show-arguments and --tag. Judge solely on output ergonomics and correctness vs. the final container.
  4. Decision gate — adopt only if it clearly beats core tooling; otherwise write an internal command (~100 lines, owned by us) and stop tracking the dependency.
  5. If adopted — register dev/test-only, document in the dev runbook and onboarding, and add lint:container to CI as the durable guardrail (the bundle itself is not a CI tool).
  6. If Laravel — skip to step 5 with the internal command; do not attempt a port.

Operational Impact

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

  • Compilation failure in dev — highest impact: one bad pass breaks local boot for the whole team. Detectable only by trying it.
  • Hard incompatibility after a Symfony upgrade — fails at boot, not gracefully; symptom is "dev environment won't start" rather than "dumper unavailable."
  • Stale or misleading output — pre-removal snapshot or unresolved placeholders cause engineers to debug a container that isn't being built.
  • Accidental disclosure — cleartext literal arguments pasted into tickets or chat. Add a note in the dev runbook.

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.

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.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle