Getting started
Peep shows what your PHP app is doing in a separate window: values you send with peep(), database queries, logs, exceptions, jobs, and the mail and SMS it sends. It works in any PHP app from PHP 7.1 to 8.5, and sets itself up in Laravel.

How it fits together
The client (shibbirweb/peep) lives in your app and sends each call to the viewer. The viewer keeps the cards, the mail and the SMS, and shows them live. When the viewer is not running, the client notices after one try and stays out of the way.
Five minutes to the first card
Start the viewer: open the desktop app, or run
php peep-server.phar serve(PHP 8.5). See Installation.Add the client to your app:
bashcomposer require shibbirweb/peep --devTurn it on. Laravel does this outside production. Anywhere else, set
PEEP_ENABLED=trueor add apeep.phpfile returning['enabled' => true](see Configuration).Send something:
phppeep('Hello'); peep($user)->green()->label('Signed in user'); peep()->table($rows, 'Rows');
The cards appear at once. Each call is one card; the calls of one request, job or command are grouped under it.
Where next
- The viewer: groups, filters, search, screens and pausing.
- Laravel: queries, jobs, events and mail with no code, and switching query debugging from the viewer (Query debugging).
- API reference: every method of
peep(). - Mail and SMS and Webhooks: catch what your app sends and test its webhook handlers.
- AI agents: let Claude Code, Codex, Cursor and other agents debug with Peep and report back.
- Version support: which PHP, Laravel and operating systems are covered.