spatie/flare-debug-sender
A debug sender for Flare payloads, intended mainly for internal testing. It lets Laravel apps route error, trace, and Zipkin payloads through a configurable channel, with options to pass through data, alter tracing IDs and times, print payload details, and customize curl sender settings.
Architecture fit. The package is a drop-in replacement for Flare's payload sender, wired through the existing sender key in config/flare.php. It adds no services, no daemons, and no new infrastructure — it is a leaf, dev-only dependency that decorates a vendor integration we already own. Architecturally it is about as low-friction as a package gets: one config block, no application code changes, reversible by deleting the block.
Integration feasibility. Installation is composer require spatie/flare-debug-sender, publishing the Flare config, and swapping the sender class. Output is pluggable across three channels — Ray (if the team already uses it), the Laravel log, or a plain file — so we do not have to introduce a new tool to get value. Realistic effort: half a day for a pilot and documentation, not a sprint.
The one hard gate. The README assumes our installed Flare SDK version exposes the sender config hook. That must be verified against the actual installed version before we tell anyone this works. Everything else is configuration; this is the only thing that can invalidate the plan.
Technical risk.
CURLOPT_SSL_VERIFYHOST/PEER => 0). Fine for a local throwaway; must never be copy-pasted into shared config.Key questions to settle before adoption.
sender config hook?Stack fit. Laravel applications using Spatie Flare. A non-Laravel path exists (sendUsing) but is out of scope for us. The package composes cleanly with what is already in the stack: if the team uses Ray, the RayDebugChannel is the natural default; if not, LaravelLogDebugChannel gives equivalent insight with zero additions to the toolchain. There is no overlap conflict with Telescope or Xdebug — those answer different questions (query analysis, step-through debugging); this answers only "what would Flare have received?"
Migration path. There is no data migration. Two distinct migrations to keep separate:
Compatibility and the class-not-found trap. The debug sender class is referenced from committed config, but the package belongs in require-dev. If a production deploy boots with that config reference and without the package, the app fatals on container resolution. The mitigation is non-negotiable: gate the sender swap behind an environment conditional (e.g. env('FLARE_DEBUG_SENDER', false)) so the production config resolves to Flare's default sender. This also doubles as the primary guard against the intercept-in-shared-env failure mode. Pin the exact version and review the changelog on every bump.
Sequencing.
sender hook is present.require-dev; do not touch shared or committed production config without the env gate.Maintenance. Runtime maintenance cost is effectively zero because the package is local-only and never ships. The real maintenance burden is vigilance: ensuring the debug sender never survives into shared configuration, and tracking Flare majors. Budget a small, predictable allowance per Flare upgrade rather than an ongoing effort. The repo carries README, changelog, and tagged releases — sufficient hygiene for a tool of this size, though a single-vendor bus factor remains.
Support. Community-supported through Spatie, with no SLA and no expectation of one. Do not route production incidents through this package. The internal owner should be the same engineer accountable for error reporting generally, and the documented escape hatch — revert the sender block to Flare's default — should be written down next to the snippet so anyone can undo it without reading source.
Scaling. Not a scaling concern in the traffic sense; it is a per-developer utility, so it scales with headcount, not request volume. Zero infrastructure, zero cost, and no payloads leave the machine unless pass-through to a live DSN is explicitly enabled. Resist the temptation to standardize it org-wide or pin it into CI: the author scopes it to internal testing, and a CI dependency creates an ownerless contract that breaks on Flare majors. A documented, copy-pasteable local snippet is the correct distribution mechanism.
Failure modes.
config/flare.php.Ramp-up. Trivial. The options table in the README is the entire API surface; an engineer is productive in under an hour. The onboarding value is real — showing a new engineer an actual outgoing payload is a faster and more durable explanation of our error-tracking setup than a dashboard tour. Total upfront investment: roughly half a day for the pilot, the env-gated snippet, and a short internal note.
How can I help you explore Laravel packages today?