orchestra/debug
Orchestra Debug provides debugging helpers and service providers for Laravel applications, making it easier to inspect application state and troubleshoot issues during development. It is part of the Orchestra Platform ecosystem.
Architecture fit. orchestra/debug is developer tooling, not application architecture. It slots in as a require-dev companion to a Laravel 5.4 application, and its natural home is an Orchestra Platform admin stack where the service-provider conventions already match. For any team not on Orchestra, the "seamless integration" claim is inapplicable — you are adding a provider, a published config, and a middleware/listener footprint to get behavior that barryvdh/laravel-debugbar already delivers. Treat fit as conditional on two facts being true simultaneously: the app is pinned to Laravel 5.4, and the team works inside the Orchestra admin daily.
Integration feasibility. Mechanically simple and well-bounded. Laravel 5.4 predates package auto-discovery, so integration is three explicit steps — composer require --dev orchestra/debug:^3.4, manual registration of Orchestra\Debug\DebugServiceProvider in config/app.php, and vendor:publish for the config stub. There is no plugin architecture, no custom panel API, and no extension surface beyond the provider bindings and the published config. That is a feature for a TPM: the blast radius of the change is a handful of files, which makes it cheap to add and cheap to reverse.
Technical risk. The risks are concentrated, not diffuse:
illuminate/* constraint must be verified in composer.json before anyone assumes 5.5+ works — it almost certainly does not..env away from a data leak with real business consequence. This is the only risk here that reaches beyond engineering.Key questions. Does composer.json pin illuminate/* to 5.4 only? Does the provider hard-require other Orchestra packages or run standalone? Does the environment panel redact secrets, and what exactly does the gate key off — APP_DEBUG, APP_ENV, a dedicated config key, or all three? Is the gate fail-closed by default? Does it register middleware or a DB listener that conflicts with an existing profiler? What is the license and maintainer count?
Stack fit. Appropriate only for a Laravel 5.4 / Orchestra Platform codebase. On 5.5+ the correct answer is Telescope, Debugbar, or Clockwork — maintained, supported, and with the community validation this package lacks. The stack-fit test is a single gate: if the framework version doesn't match, stop.
Migration path. There is no migration path, and that should be stated plainly rather than discovered later. Installation is additive and non-breaking; removal is composer remove plus deleting two lines from config/app.php. The realistic expected outcome at the next Laravel upgrade milestone is removal, not replacement — so plan the rip-out while the integration is still small. To keep that cheap, isolate all calls behind a thin DevProfiler adapter (start(), mark(), log()), so swapping in Debugbar or Telescope later is a one-file change rather than a grep across the codebase.
Compatibility. Two independent checks, deliberately redundant:
composer install --no-dev in release artifacts so the package is physically absent from production, paired with a CI assertion that it does not appear in production dependencies.app()->environment('local', 'development') guard, so a staging .env mistake cannot be the sole line of defense.
Version pinning is mandatory — ^3.4 with composer why-not for resolution failures, never hand-edited constraints. Note the pinned version in a comment at the top of the published config, because a published stub silently drifts from upstream.Sequencing. Verify the framework matrix → install dev-only → register the provider manually → publish and read the config as documentation → confirm the environment gate is fail-closed (test production and staging explicitly) → confirm mutual exclusivity with any existing profiler, removing the other one rather than merely disabling it → profile one slow request, timeline first, then query log for the hot phase. Gate adoption on a written expiry date with a named owner tied to the Laravel upgrade milestone.
Maintenance. Low effort, non-zero risk. Published config is yours forever and will diverge; diff it against the stub on every bump. Because there are no dependents and no stars, upstream fixes will not arrive on your schedule — if this becomes load-bearing for debugging workflows, vendor a fork rather than wait. Budget the removal work as the actual end-of-life cost.
Support. None in any contractual sense. No SLA, no vendor, no community triage, one compatibility release in the record. The practical support model is "whoever installed it owns it," and that ownership must be assigned explicitly or it defaults to nobody.
Scaling. This does not scale into production observability and should never be asked to. It is not an APM, not a tracing system, and not a security-sensitive diagnostics layer. Keep it off by default in CI — query logging and timeline collection add measurable overhead to large suites — and enable on demand for investigative runs only. Standardize on exactly one profiler per app, documented with when to use it; two profilers produce duplicated collection and distorted timings.
Failure modes. Ranked by consequence: (1) environment gate misfires and renders SQL bindings, config, or env values to a staging user — the only outage-class failure; (2) provider not registered in config/app.php, which presents as a broken package rather than a config miss; (3) collision with an existing profiler corrupting performance data; (4) Composer resolution failure after a dependency bump; (5) panels blank despite a correct install — check provider registration, config published, allowlist, asset publishing, then whether another profiler's middleware is short-circuiting the response. Each has a cheap, testable guard; none is expensive to implement, and all are expensive to discover in production.
Ramp-up. Near-zero. Zero-config defaults and fluent helpers mean a developer is productive on the first slow page: read the timeline to identify the hot phase (bootstrap, controller, view, response), then cross-reference only that phase's queries. That single loop is roughly 80% of the package's value. The ramp-up cost is not learning the tool — it is establishing the guardrails around it, which is a PM-owned deliverable: dev-only, environment-gated, single profiler, documented toggle, CI assertion, and an expiry date. Fund this from maintenance/tooling budget, keep it off the roadmap entirely, and write down the removal trigger while the codebase is still small.
How can I help you explore Laravel packages today?