PHPackages                             seanbarton/laravel-periscope - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. seanbarton/laravel-periscope

ActiveLibrary

seanbarton/laravel-periscope
============================

A lightweight companion UI for Laravel Telescope with URL-driven filtering and search.

v0.3.1(1mo ago)0331↓45.6%2MITBladePHP ^8.2

Since Jul 13Pushed 1mo agoCompare

[ Source](https://github.com/seanbarton/laravel-periscope)[ Packagist](https://packagist.org/packages/seanbarton/laravel-periscope)[ RSS](/packages/seanbarton-laravel-periscope/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (12)Versions (5)Used By (0)

Laravel Periscope
=================

[](#laravel-periscope)

Laravel Periscope is a lightweight companion UI for [Laravel Telescope](https://laravel.com/docs/telescope). It does not collect application telemetry and it does not replace Telescope. It reads Telescope's existing database tables and provides a denser interface for filtering, searching, drilling into entries, and following the lifecycle of a request.

Copyright 2026 Sean Barton, Tortoise IT Limited.

What It Does
------------

[](#what-it-does)

- Adds a `/periscope` dashboard for Telescope entries.
- Uses the existing `telescope_entries` and `telescope_entries_tags` tables.
- Supports URL-driven saved searches using query parameters.
- Adds date range filtering, live list watch mode, type filters, text search, status/method/path filters, and an errors-only scan.
- Provides detail views for requests, logs, mail, queries, jobs, gates, exceptions, views, models, cache, events, and HTTP client entries.
- Provides a lifecycle view for a request batch so related Telescope entries can be inspected in sequence.
- Shows related error flow and application stack traces with expandable source previews.
- Suppresses Periscope/Telescope dashboard noise from Laravel Debugbar by default.
- Suppresses Periscope-generated Telescope entries by default.

Security
--------

[](#security)

Periscope deliberately inherits Telescope's authorization.

The package route middleware calls `Laravel\Telescope\Telescope::check($request)`. That means the same logic that decides whether the current request can view Telescope also decides whether it can view Periscope. If a user cannot view Telescope, they cannot view Periscope.

Periscope does not define a separate gate, role, policy, user list, password, token, or bypass. The package ships with the normal Laravel `web` middleware by default, then applies the Telescope authorization check.

For production use, configure Telescope's own authorization as you normally would in your application, usually in `app/Providers/TelescopeServiceProvider.php`.

```
use Laravel\Telescope\Telescope;

Telescope::auth(function ($request) {
    return $request->user()?->can('viewTelescope') === true;
});
```

If that callback returns `false`, Periscope returns `403`.

Installation
------------

[](#installation)

Install the package with Composer:

```
composer require seanbarton/laravel-periscope
```

Then clear Laravel's cached package/config state if needed:

```
php artisan optimize:clear
```

Visit:

```
/periscope

```

Local Path Install
------------------

[](#local-path-install)

During development, you can include Periscope without copying it into your application by using a Composer path repository:

```
composer config repositories.periscope path ../path/to/laravel-periscope
composer require 'seanbarton/laravel-periscope:*@dev'
php artisan optimize:clear
```

This keeps Periscope as a separate package while making it available to the Laravel app through `vendor/`.

Configuration
-------------

[](#configuration)

The package works without publishing its config. Publish it only when you need to change defaults:

```
php artisan vendor:publish --tag=periscope-config
```

Available options:

```
return [
    'enabled' => env('PERISCOPE_ENABLED', true),
    'name' => env('PERISCOPE_NAME', 'Periscope'),
    'theme' => env('PERISCOPE_THEME', 'default'),
    'path' => env('PERISCOPE_PATH', 'periscope'),
    'domain' => env('PERISCOPE_DOMAIN'),
    'middleware' => ['web'],
    'connection' => env('PERISCOPE_DB_CONNECTION', env('TELESCOPE_DB_CONNECTION')),
    'per_page' => 100,
    'max_per_page' => 200,
    'default_hours' => 24,
    'overview_request_scan_limit' => env('PERISCOPE_OVERVIEW_REQUEST_SCAN_LIMIT', 1000),
    'error_scan_timeout_ms' => env('PERISCOPE_ERROR_SCAN_TIMEOUT_MS', 1500),
    'error_scan_max_entries' => env('PERISCOPE_ERROR_SCAN_MAX_ENTRIES', 10000),
    'exclude_from_telescope' => env('PERISCOPE_EXCLUDE_FROM_TELESCOPE', true),
    'disable_debugbar' => env('PERISCOPE_DISABLE_DEBUGBAR', true),
    'exclude_debugbar_entries' => env('PERISCOPE_EXCLUDE_DEBUGBAR_ENTRIES', true),
];
```

`PERISCOPE_ENABLED=false` disables the Periscope routes.

`PERISCOPE_PATH=internal/periscope` moves the dashboard to a different URL.

`PERISCOPE_THEME=default` uses the built-in `Open Water` light theme. Other available themes are `harbor`, `meadow`, `submarine` (`Into the Depths`), and `abyss`.

Users can override this env default for their current browser session via the Periscope sidebar theme switcher.

`PERISCOPE_DB_CONNECTION` can be used when Telescope stores entries on a non-default database connection.

`PERISCOPE_EXCLUDE_FROM_TELESCOPE=true` automatically adds the Periscope path to Telescope's ignored paths and suppresses Telescope recording while Periscope pages are being served.

`PERISCOPE_DISABLE_DEBUGBAR=true` automatically disables Debugbar while Periscope is rendering and adds the Periscope/Telescope dashboard paths to Debugbar's ignored paths.

URL Searches
------------

[](#url-searches)

Periscope search state lives in the URL. Copying the URL is the saved search.

Common parameters:

- `type=request`
- `types[]=request&types[]=log`
- `from=2026-07-13 09:00`
- `to=2026-07-13 11:00`
- `q=checkout`
- `tag=Auth:1`
- `method=POST`
- `status=500`
- `path=/api/orders`
- `errors=1`
- `per_page=100`

Local browser-only filters, such as ignored entry patterns and selected all-entry subtypes, are stored in local storage.

Error Filtering
---------------

[](#error-filtering)

The `errors=1` filter first applies the normal time/type/search filters, then scans matching Telescope entries for error signals. Requests are included when their Telescope batch contains an error-like entry.

To protect large datasets, the scan is capped by:

- `PERISCOPE_ERROR_SCAN_TIMEOUT_MS`
- `PERISCOPE_ERROR_SCAN_MAX_ENTRIES`

This keeps the filter useful for everyday debugging without turning a broad date range into an unbounded database operation.

Keeping Telescope Clean
-----------------------

[](#keeping-telescope-clean)

Periscope tries to avoid polluting Telescope automatically.

By default, the service provider adds the configured Periscope path to `telescope.ignore_paths`:

```
'ignore_paths' => [
    'periscope*',
],
```

It also disables Laravel Debugbar on Periscope routes and adds both the Periscope and Telescope dashboard paths to Debugbar's ignored path list. Existing `debugbar` Telescope entries are hidden from Periscope lists and counts by default.

This behaviour can be disabled with:

```
PERISCOPE_EXCLUDE_FROM_TELESCOPE=false
PERISCOPE_DISABLE_DEBUGBAR=false
PERISCOPE_EXCLUDE_DEBUGBAR_ENTRIES=false
```

Periscope adds its configured path to `telescope.ignore_paths`, rejects Telescope entries while the current request is for Periscope, and pauses/flushes Telescope recording around Periscope route handling. This prevents Periscope dashboard refreshes from recording request, query, view, model, cache, log, and similar Telescope entries. It only affects Periscope dashboard traffic; normal application traffic is still handled by your existing Telescope configuration.

Publishing
----------

[](#publishing)

For open source distribution, the normal route is:

1. Create a Git repository, for example `github.com/seanbarton/laravel-periscope`.
2. Push this package code to that repository.
3. Add a Git tag such as `v0.1.0`.
4. Submit the repository to [Packagist](https://packagist.org/packages/submit).
5. In consuming projects, run `composer require seanbarton/laravel-periscope`.

Packagist reads `composer.json`, so the package name, author, license, autoloading, and Laravel service provider discovery all come from this repository.

Private distribution is also possible using a private Git repository plus a Composer repository entry, Private Packagist, Satis, or a path repository for local/internal projects.

License
-------

[](#license)

Laravel Periscope is open-sourced software licensed under the MIT license.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance91

Actively maintained with recent releases

Popularity19

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 64.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

4

Last Release

45d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/5168402?v=4)[Sean Barton](/maintainers/seanbarton)[@seanbarton](https://github.com/seanbarton)

---

Top Contributors

[![seanbarton](https://avatars.githubusercontent.com/u/5168402?v=4)](https://github.com/seanbarton "seanbarton (11 commits)")[![ie-dev](https://avatars.githubusercontent.com/u/4145038?v=4)](https://github.com/ie-dev "ie-dev (6 commits)")

---

Tags

laraveldebuggingobservabilitytelescopeperiscope

###  Code Quality

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/seanbarton-laravel-periscope/health.svg)

```
[![Health](https://phpackages.com/badges/seanbarton-laravel-periscope/health.svg)](https://phpackages.com/packages/seanbarton-laravel-periscope)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3365.5M359](/packages/psalm-plugin-laravel)[api-platform/laravel

API Platform support for Laravel

58190.1k22](/packages/api-platform-laravel)[laravel/ai

The official AI SDK for Laravel.

1.1k6.4M360](/packages/laravel-ai)[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.5k31.8M166](/packages/laravel-cashier)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

80732.6M270](/packages/laravel-mcp)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k17.6M165](/packages/laravel-pulse)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
