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.
Measured runtime overhead
+0.29 ms mean overhead. Telemetry flushes asynchronously after your HTTP response is dispatched. View benchmark code
42 queries · 14× lazy-loaded relations
3 queries · Order::with('items')
01 / Core Capabilities
Runtime visibility without the runtime tax.
Pinpoint connects runtime performance directly to the source lines responsible for them.
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.
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.
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.
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.
Order::items() 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.
v1.historical-records.search clocked at 4,350ms, flagged instantly in the red tier.
Detected relationship loops with repeat counts up to x11 queries per single HTTP request.
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.
| 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.
Install as a dev dependency
composer require asimali/pinpoint --dev Publish & run migrations
php artisan vendor:publish --tag="pinpoint-migrations" && php artisan migrate Generate your first latency report
php artisan pinpoint:report Complete Artisan Toolkit
Everything needed to profile locally, gate in CI, and manage retention.
Generate terminal summary tables with percentile rollups (p95/avg), N+1 repeat multipliers, clickable IDE links, and machine-readable JSON payloads.
--tier=critical --route=<name> --since=30m --limit=10 --json --json-to=<file> Evaluate query counts, durations, and N+1 violations as an automated CI regression gate, exiting with code 1 upon failure.
--fail-on-n1 --max-queries --max-duration-ms --allow-empty --json Batch-compute historical hourly and daily percentile rollups in worker jobs with transaction-safe chunking.
--force Delete request and query samples older than the retention window (default 7 days) via database cascade.
--days=7 --force Truncate and purge all recorded telemetry data from the database with confirmation prompt.
--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.