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

Chromephp Laravel Package

ccampbell/chromephp

ChromePhp sends PHP logs and variables directly to the Chrome DevTools console using the Chrome Logger protocol, so you can debug without cluttering page output or digging through server logs. Just include the class and call ChromePhp::log().

Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor. ChromePHP is a single static class that serializes PHP variables into a base64/JSON payload and emits it as an X-ChromeLogger-Data HTTP response header for consumption by a companion Chrome extension. It has no service provider, no configuration, no PSR-3 compliance, and no awareness of Laravel's Log facade or the Monolog channel stack. That means it sits beside our logging architecture, not inside it: every call site is a hard-coded static call (ChromePhp::log($x)) that bypasses channel routing, contextual processors, and structured log formatting. As a dev-only eyeball tool that is acceptable; as anything resembling an observability layer it is a dead end.

Integration feasibility — trivial to install, awkward to run. composer require --dev ccampbell/chromephp plus autoloading is a five-minute job. The friction is at runtime: the class writes headers via header() directly, which conflicts with Laravel's response lifecycle. Any output before the call (echo, stray whitespace, a streamed response, a debug tool that flushes early) produces "headers already sent" and silently degrades. Under Octane/Swoole or queue workers there is no HTTP response to attach to, so the library no-ops.

Technical risk — high, and mostly external. Three concerns dominate:

  1. The companion browser extension is the real dependency. Chrome Logger is a Manifest V2 extension with no meaningful updates in roughly a decade. MV2 is being withdrawn from modern Chrome, which means the payload may have no consumer at all on current developer machines. This is the single biggest risk and it is entirely outside our control.
  2. Upstream is dormant. No release cadence, no PHP 8.x CI signal, no security patching. The dataset reports the repository as unverified/unknown, so we cannot even confirm provenance and license (MIT per package metadata) from source.
  3. Data exposure. The library is designed to dump arbitrary variables into response headers. A misconfigured environment guard puts PII, credentials, or query fragments into headers that proxies and CDNs may log.

Key questions for the team:

  • What debugging gap does this close that Xdebug, Telescope, symfony/var-dumper with the dump server, or Ray does not already close?
  • Does an unmaintained, statically-called dev dependency clear our SCA and dependency-provenance policy?
  • Who owns the fork if the extension stops loading on the next Chrome stable?
  • Are we prepared to guarantee it can never be autoloaded in a production build?

Integration Approach

Stack fit. Marginal. It targets a Laravel/PHP 8.x stack only as a require-dev convenience. There is no Laravel package discovery, no publishable config, and no Monolog handler we would own — Monolog's own ChromePHPHandler exists historically but has been deprecated/removed in current majors for exactly the reasons above.

Migration path. Treat this as a transitional aid, not a target state. The realistic ladder is: ChromePHP → symfony/var-dumper + dump()/dd() against the dump server → Telescope (request-scoped inspection) or Ray (dedicated UI). If a team is already on Monolog, going straight to a VarDumper-based workflow avoids the browser-extension dependency entirely.

Compatibility. Practically it runs on PHP 7.x/8.x, but "runs" is not "supported." Known incompatibilities: Octane/Swoole (long-lived workers, header state bleed), CLI and queue contexts (no headers), streamed and file-download responses, JSON APIs consumed by non-browser clients, and any handler that flushes output early.

Sequencing.

  1. Pilot in one development environment only, require-dev, gated behind APP_DEBUG and an explicit CHROMEPHP_ENABLED env flag defaulting to false.
  2. Wrap all call sites in a thin internal Debug::dump() facade so the codebase is not bound to the package; the swap-out later becomes a one-file change.
  3. Instrument usage for one sprint — if fewer than a handful of developers actually use it, retire it.
  4. Add a CI guard (composer audit + a production composer install --no-dev smoke test) that fails if the class is present in a release artifact.
  5. Schedule a decision at the next tooling review: adopt VarDumper/Ray or drop browser-console logging entirely.

Operational Impact

Maintenance. Zero upstream maintenance means we own it. The good news is the surface is one class, so a vendored fork is cheap. The bad news is there is no channel for security fixes, and a dormant package in require-dev still shows up in SCA reports and dependency-review gates, creating recurring triage noise for the platform team.

Support. No vendor, no SLA, README-only documentation. Because it is developer-facing, blast radius is contained to local environments — but that also means it will never get formal support investment, and each new hire must independently discover and install an extension that may no longer be installable.

Scaling. Two hard ceilings matter more than throughput. First, header size: Apache's default LimitRequestFieldSize (~8 KB) and nginx's large_client_header_buffers (8 KB default) will truncate or 400 on any non-trivial dump long before Chrome's own limits apply. Second, payload encoding cost scales with the object graph — dumping an Eloquent collection with eager-loaded relations serializes the whole thing on the request thread.

Failure modes.

  • Silent no-op when the extension is absent or disabled — the worst kind, because the developer believes logging is working.
  • "Headers already sent" warnings and dropped payloads under buffering or early output.
  • Truncated or mangled payloads from web-server header limits.
  • 500s or corrupt responses from non-UTF8 or recursive structures during JSON encode.
  • Production data leakage if the environment guard is misconfigured or bypassed.

Ramp-up. Genuinely minutes for an individual who already has the extension. Effectively blocked for anyone on a current Chrome build without a sideloaded MV2 extension — which is the majority of new engineers. Budget onboarding time for "here is why this tool doesn't work and what to use instead," which is itself an argument for standardizing on the replacement now.

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.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator