Download the PHP package romdh4ne/laravel-querycraft without Composer
On this page you can find all versions of the php package romdh4ne/laravel-querycraft. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download romdh4ne/laravel-querycraft
More information about romdh4ne/laravel-querycraft
Files in romdh4ne/laravel-querycraft
Package laravel-querycraft
Short Description Find and fix Laravel performance issues automatically
License MIT
Informations about the package laravel-querycraft
A Laravel performance analysis dashboard for detecting N+1 queries, slow queries, missing indexes, and duplicate queries — in real time.
✨ Features
- 🔁 N+1 Detection — catches repeated query patterns caused by missing eager loading
- 🐢 Slow Query Detection — flags queries exceeding your configured time limit
- 🗂 Missing Index Detection — identifies full table scans using MySQL
EXPLAIN - 📋 Duplicate Query Detection — finds identical queries (including bindings) fired multiple times
- 📍 Source Location — shows the exact file and line number in your app that triggered the issue
- 💯 Performance Score — grades your endpoint from 0–100 with a letter grade (A–F)
- 🛠 Live Config Panel — toggle detectors and adjust thresholds from the dashboard UI
- 🌙 Dark Mode — built-in dark/light mode toggle
- 🚨 500 Error Inspector — displays full exception details with app-only stack trace
- ⌨️ Artisan Command — analyze endpoints directly from your terminal with full body and header support
📦 Installation
1. Require the package via Composer
2. Publish the config file
3. Publish the assets (logo, favicon)
4. Publish the views (optional — only if you want to customize the UI)
5. Clear caches
6. Visit the dashboard
🖥 Web Dashboard
Opening the dashboard
Or with a custom route prefix set in .env:
Analyzing an endpoint
- Enter your endpoint URL (e.g.
/api/users) - Select the HTTP method (
GET,POST,PUT,PATCH,DELETE) - Optionally add custom headers (e.g.
Authorization: Bearer token) - Optionally add a JSON request body for
POST/PUTrequests - Click Analyze Request
QueryCraft fires an internal request to your endpoint, collects all queries, runs them through all detectors, and displays the results instantly.
Reading the results
| Element | Description |
|---|---|
| Score card | 0–100 performance grade with letter (A–F) and emoji indicator |
| Query count | Total number of queries executed by the endpoint |
| Total time | Combined execution time of all queries in milliseconds |
| Issue cards | Each problem with severity, stats, source location and fix suggestion |
| Source Location | Exact file path and line number in your app (vendor files filtered out) |
| All Queries | Collapsible list of every query fired with individual execution time |
500 Error Inspector
When your endpoint crashes, QueryCraft catches it and displays:
- Exception class (e.g.
ErrorException,QueryException) - Error message
- Exact file and line number in your app where it crashed
- Stack trace showing only your app files — no vendor noise
- Number of queries captured before the crash
Set
APP_DEBUG=truein your.envfor full exception details.
Client Error Display
When your endpoint returns a 4xx response (e.g. 422 validation error, 404), QueryCraft shows:
- The HTTP status code
- The error message returned by your API
- Suggestions for similar routes if 404
Config Panel
Click the ⚙️ icon in the top-right header to open the config panel:
- Toggle each detector on/off individually
- Adjust thresholds using sliders
- Tune score weights (must total 100%)
- Click Save — changes are written to your
.envimmediately - Click Reset to restore all defaults
⌨️ Artisan Command
Analyze endpoints directly from your terminal without opening a browser.
Signature
Examples
Sending a large body with --body-file
When your request has many fields, create a payload.json file instead of cramming everything inline:
Then run:
Use
--bodyfor small payloads. Use--body-filefor large or complex payloads — it avoids shell escaping issues and is much easier to read and reuse.
Example output
If your endpoint requires authentication, pass
--user=1to run as a specific user. QueryCraft callsauth()->login($user)before firing the request.
⚙️ Configuration
After publishing, the config file is at config/querycraft.php. All values can be overridden via .env:
Full config reference
Tip: All settings can also be changed from the dashboard ⚙️ config panel — changes are saved directly to your
.env.
🔬 How Detectors Work
🔁 N+1 Detection
Normalizes every query (replaces values with ?) and groups them by pattern. If the same pattern fires more than n1_count times, it's flagged. The exact file and line in your app that triggered the repeated query is shown.
Example:
| Count | Severity |
|---|---|
| 5–10× | low |
| 10–20× | medium |
| 20–50× | high |
| 50×+ | critical |
🐢 Slow Query Detection
Flags any query exceeding slow_query_ms milliseconds (default: 100ms). Automatically suggests a fix based on the query structure.
| Time | Severity |
|---|---|
| > 200ms | low |
| > 500ms | medium |
| > 1000ms | high |
| > 1000ms | critical |
Suggestions shown:
SELECT *→ use specific columnsORDER BYwithoutLIMIT→ add a limitLIKEqueries → consider full-text searchCOUNT(*)on large tables → consider caching
🗂 Missing Index Detection
Runs MySQL EXPLAIN on each query and flags full table scans, filesorts, and temporary table usage.
Triggers:
type = ALLwith more than 1,000 rows examinedExtracontainsUsing filesortExtracontainsUsing temporary
Example:
| Rows examined | Severity |
|---|---|
| > 1,000 | low |
| > 10,000 | medium |
| > 100,000 | high |
| > 100,000 | critical |
📋 Duplicate Query Detection
Creates an md5 fingerprint of sql + bindings. If the exact same query with the same parameter values runs more than duplicate_count times (default: 2), it's flagged.
Example:
💯 Performance Score
Calculated as a weighted average across three dimensions:
| Dimension | Default Weight | Description |
|---|---|---|
| Query Count | 40% | Fewer queries = higher score |
| Query Time | 30% | Faster total time = higher score |
| Issues Found | 30% | Fewer/lower severity issues = higher score |
| Score | Grade | Status |
|---|---|---|
| 90–100 | A 🟢 | Excellent |
| 80–89 | B 🟡 | Good |
| 70–79 | C 🟡 | Acceptable |
| 60–69 | D 🟠 | Below average |
| 0–59 | F 🔴 | Critical issues |
Weights are configurable from the dashboard config panel or via .env.
🔒 Security
QueryCraft is intended for local development only. Always disable it in production:
🔄 Updating
🗑 Uninstalling
🤝 Contributing
Setup
Local test app (separate project)
In a separate Laravel app, add to composer.json:
Then:
Visit http://localhost:8000/querycraft. Any change you make in the package reflects instantly thanks to the symlink.
📄 License
QueryCraft is open-source software licensed under the MIT license.
👨💻 Author
Made by Romdh4ne
If this package helps you, give it a ⭐ on GitHub!
All versions of laravel-querycraft with dependencies
illuminate/support Version ^9.0|^10.0|^11.0|^12.0
illuminate/database Version ^9.0|^10.0|^11.0|^12.0
illuminate/console Version ^9.0|^10.0|^11.0|^12.0