shibbirweb/peep
Peep is a lightweight Laravel package from shibbirweb that gives developers a quick, simple way to peek into their application during development. Easy to install and use, it helps surface useful information for local debugging and inspection.
Peep v0.1.0-beta.1 is a full-stack debugging and inspection platform, not a narrow library. It ships four distinct delivery surfaces — a Composer client (shibbirweb/peep, PHP 7.1+), a separate viewer server (server/, requires PHP 8.5 / AMPHP v3), a Tauri desktop app with bundled PHP 8.5, and PHAR builds for both client and server — plus a webhook simulator and an SMTP/SMS capture layer. For a TPM, the critical evaluation question is not "does it work" but "how much of this surface are we willing to underwrite in our own delivery pipeline."
Architecture fit. The Laravel adapter (auto-discovered, Laravel 5.5 → 13) is the expected entry point and is consistent with how mature Laravel dev-tooling integrates (Telescope, Ray, Clockwork). Defaults are sensible: disabled in production. Bridges for PSR-3, Monolog 1–3, and VarDumper 3.4–8.x mean teams with mixed-stack PHP services (Symfony, Slim, WordPress) can standardise on one inspector rather than several. The protocol is versioned (docs/protocol.md), which is a genuine sign of intent to stay stable across client/viewer drift.
Integration feasibility. Composer install plus auto-discovery gets a Laravel app running in minutes. The friction is the viewer: it requires PHP 8.5, which is newer than most teams run in CI or on laptops. That is not a blocker if teams use the desktop app or the peep-server.phar, but it is the first thing a technical decision-maker needs to confirm. The global install (auto_prepend_file) is powerful for legacy or non-Composer apps, and correspondingly the highest-risk feature: it changes every script in a PHP installation. Treat it as an opt-in escape hatch, not a default.
Technical risk.
Key questions before adoption.
Stack fit. The natural home is a Laravel monorepo or platform team standardising debugging across a mixed backend estate. Value is highest where the team currently runs a combination of Ray (paid), Telescope (Laravel-only), Clockwork (browser-focused), and ad-hoc dd() — Peep consolidates most of that into one inspector with one wire protocol. It maps cleanly onto PHP 7.1–8.4 client-side, which covers the vast majority of live Laravel codebases. The viewer, however, is a PHP 8.5 runtime and should be treated as a separate operational concern, not "just another composer package."
Migration path. The migration is additive, not a replacement:
shibbirweb/peep as a require-dev dependency in Laravel. Verify auto-discovery, verify the production-disabled default in a staging environment, and confirm the query/event/job watchers do not measurably regress boot time.peep-server.phar to avoid touching developer PHP versions. Confirm the port-conflict detection and clean Ctrl+C behaviour in the desktop environment before rolling out.dd()/dump()/Ray calls opportunistically; use vendor/bin/peep-clean --fix and the PHPStan rule to surface and remove leftovers before merging. This is the highest-leverage step for reducing drift and is low-risk because it targets only known, safe patterns.Compatibility. Laravel 5.5 → 13 is broad but includes many end-of-life versions; the team should not assume EOL Laravel gets bug-fixes. Symfony, Slim, WordPress, and plain PHP are covered via the bridges and setup guides; those paths should be trialled on exactly one service before being generalised. Coexistence with Telescope is fine — they write to different transports — but running both is redundant and should be a transitional state only.
Sequencing recommendation. Do not adopt the global install (peep.phar install / auto_prepend_file) in phase one. It is the feature with the widest blast radius, changes every PHP script, and is hard to audit. Adopt it only if there is a concrete fleet of non-Composer apps that justify it, and then through a configuration-management mechanism, not a per-machine manual install.
Maintenance. The project owns an unusually large amount of surface area for a beta: a PHP client with a strict compatibility range (7.1–8.5), a PHP 8.5-only AMPHP v3 server, a Svelte 5/Bun/Vite UI, a Tauri 2 desktop app for three platforms, two PHAR pipelines, a Packagist auto-publish workflow, and a full CI matrix (40 Laravel × PHP jobs). For an adopting organisation this matters less for what it costs the project and more for the support expectation it creates: any team that standardises on Peep must be prepared to upgrade across Laravel 5.5–13 and PHP 7.1–8.5 on the client, while managing a viewer that is only on 8.5.
Support surface. The wiki is comprehensive and CI-published — a good sign. The realistic support burden inside the organisation is the viewer lifecycle (installation, port conflicts, token configuration across Docker/VMs on Linux, desktop update channel policy) plus the query-debugging switches which run against live apps. The switches are a shared control plane between the viewer and running applications: teams need a clear rule about who may flip them and when, or debugging sessions will collide.
Scaling. Two concerns. First, the viewer is designed for developer use — a virtual list handling 10,000+ cards and SSE replay after reconnect is engineering for one developer's session, not for a shared team instance. Running a single viewer for a whole team is likely to contend on the card-per-project limit and the SQLite history. Second, the SQLite-backed history grows unbounded; retention should be configured before adoption. The client-side scaling is fine by design — short timeouts, 30-second skip after a closed viewer, roughly 3 ms per 100 calls — which is the correct engineering for a tool that must not slow the app it observes. Confirm those numbers on the team's own Laravel boot path.
Failure modes to plan for.
MAIL_MAILER=peep is set. A mailer pointing at a dead viewer is a failure path worth rehearsing.PEEP_TOKEN / Laravel token across Docker on Linux is a documented but easy-to-miss step; without it the viewer binds to loopback and developers on remote containers see nothing.auto_prepend_file will silently follow whatever version is installed; "projects with Composer keep their own version" mitigates but does not eliminate version drift across a fleet.Ramp-up. Realistic effort bands:
->peep() on collections/strings/builders.peep-clean rule in CI.Overall recommendation. Adopt in development on Laravel teams now, with the viewer on developer machines via the desktop app, peep-clean + the PHPStan rule wired into CI, and production gating verified in staging. Defer the shared/internal viewer, global install, and mail/SMS/webhook integration until the project exits beta and the maintainership/roadmap questions are answered. Re-review the assessment at v0.1.0 stable or the first protocol breaking change, whichever comes first.
How can I help you explore Laravel packages today?