Get started

Laravel performance, in your terminal

Find slow routes and N+1 queries without leaving your IDE.

Profile route latency, detect N+1 loops, and jump to the offending line in your IDE. Zero telemetry.

Passing PHPStan 5 Laravel 12–13 MIT
Pinpoint/Diagnostics
$php artisan pinpoint:report

Measured runtime overhead

+0.29 ms mean overhead. Telemetry flushes asynchronously after your HTTP response is dispatched. View benchmark code

GET /api/orders
-93.7% latency
Unoptimized (N+1) Critical
1,420ms

42 queries · 14× lazy-loaded relations

Resolved via Pinpoint Optimized
89ms

3 queries · Order::with('items')

Workload: 1,000 Order records iterated on local PHP 8.3 / MySQL. Found in seconds via pinpoint:report

01 / Core Capabilities

Runtime visibility without the runtime tax.

Pinpoint connects runtime performance directly to the source lines responsible for them.

01 Detect

N+1 and query anomalies

Find repeated relationship queries before they become production bottlenecks. Uses Laravel's native lazy-loading signals, with SQL fingerprinting as a fallback.

Eloquent signal SQL fingerprint
Query pattern 14× Duplicate
Order → items
SELECT * FROM `items` WHERE `order_id` = ?
02 Measure

Route latency & percentile rollups

Understand request performance with p95/avg latency and sample counts. Rollups compute on-demand via a single indexed SQL pass, or batched via pinpoint:aggregate.

Request Diagnostics
P95
1.42s
Avg
890ms
Queries
42
03 Locate

Source-level context & IDE jump

Ctrl/⌘-click any route or caller in your terminal to jump directly to the controller method and offending line in VS Code or PhpStorm. Zero telemetry, 100% local.

vscode:// · phpstorm:// terminal links
Source Origin
OrderController.php:84
Suggested: Order::with('items')

02 / CI Regression Gate

Fail the merge before an N+1 reaches production.

Run Pinpoint as an automated CI regression gate in GitHub Actions. Automatically exit with code 1 when query budgets or N+1 violations occur.

CI Terminal
Exit 1
$ php artisan pinpoint:check --fail-on-n1
✗ FAIL api.orders.index
1x N+1 · Order::items()
Trigger: app/Http/Controllers/OrderController.php:34
Process completed with exit code 1. 0.14s total
03 / Tested in the Wild

Real output from a real production codebase.

An unedited CLI report profiling a 20-route production application—spotlighting latency bottlenecks and N+1 query loops in milliseconds.

Authentic Pinpoint CLI Report output from a production Laravel codebase profiling 20 routes
1 Critical Bottleneck

v1.historical-records.search clocked at 4,350ms, flagged instantly in the red tier.

5 N+1 Violations

Detected relationship loops with repeat counts up to x11 queries per single HTTP request.

Instant Locate Block

Clickable route labels and caller breadcrumbs jump straight into your IDE to resolve the root cause.

04 / Comparison

Built around the Laravel runtime.

Actionable terminal diagnostics and CI regression gates without the overhead of external SaaS observability stacks.

Swipe to compare
Pinpoint Telescope Pulse Laravel Slower
Primary focus Route & N+1 latency General debug assistant Server health & queues Slow queries + AI fixes
CI regression gate Yes — blocks PR before merge
Fix guidance Exact eager-load fix (deterministic, free) Raw query view only Aggregate metrics only AI-generated: indexes, rewrites, eager-loads
N+1 query precision Exact relation & model (Eloquent hook) Manual query count logs Aggregate slow query list Duration-threshold + fingerprint grouping
Source line traceback Exact file and line Backtrace in web modal Exact file and line
Execution environment CLI and native IDE Local web dashboard Central web dashboard Self-hosted dashboard (/slower)
Telemetry residency Local machine only In-app database Redis / app database Local by default; SQL/schema to LLM on demand
Request overhead 0.29ms mean (deferred) High (inline recording) Low (sampled) Threshold-gated; sampling + circuit breaker

Ready to profile your routes locally?

Zero telemetry, zero dashboard overhead. Up and running in 60 seconds.

05 / Documentation

Get started in minutes.

Install, migrate, run your app. Then one command tells you what's slow.

01

Install as a dev dependency

$ composer require asimali/pinpoint --dev
02

Publish & run migrations

$ php artisan vendor:publish --tag="pinpoint-migrations" && php artisan migrate
03

Generate your first latency report

$ php artisan pinpoint:report

Complete Artisan Toolkit

Everything needed to profile locally, gate in CI, and manage retention.

$ php artisan pinpoint:report
Primary Diagnostic

Generate terminal summary tables with percentile rollups (p95/avg), N+1 repeat multipliers, clickable IDE links, and machine-readable JSON payloads.

Flags --tier=critical --route=<name> --since=30m --limit=10 --json --json-to=<file>
$ php artisan pinpoint:check

Evaluate query counts, durations, and N+1 violations as an automated CI regression gate, exiting with code 1 upon failure.

Flags --fail-on-n1 --max-queries --max-duration-ms --allow-empty --json
$ php artisan pinpoint:aggregate

Batch-compute historical hourly and daily percentile rollups in worker jobs with transaction-safe chunking.

Flags --force
$ php artisan pinpoint:prune

Delete request and query samples older than the retention window (default 7 days) via database cascade.

Flags --days=7 --force
$ php artisan pinpoint:reset

Truncate and purge all recorded telemetry data from the database with confirmation prompt.

Flags --force

What Pinpoint adds to each request

Recording runs after your response is sent via app()->terminating(). A 1,420ms route measures 1,420.29ms with Pinpoint on — 0ms added to TTFB.

0.29ms

Pinpoint

1,420ms

api.orders.index

Start profiling your Laravel routes today.

Zero external telemetry. 100% self-hosted in your existing database. Actionable terminal diagnostics in 60 seconds.