Eloquent Guard is a lightweight, production-ready runtime performance monitor for Laravel. It detects N+1 queries and slow database operations as they happen, helping you keep your application fast and efficient.
- N+1 Query Detection: Automatically detects repeated queries within a single request.
- Slow Query Monitor: Alerts you when a query exceeds your defined time limit.
- Laravel Pulse Integration: Beautiful custom dashboard card to visualize alerts.
- Smart Backtrace: Pinpoints the exact file and line of code causing the issue (skips vendor files).
- Multi-channel Reporting: Built-in support for Log, Slack, Telegram, and Sentry.
- Zero Configuration: Works out of the box with sensible defaults.
Stay informed where your team already works. All alerts include a Smart Backtrace that points directly to your code, skipping the vendor/ noise.
You can install the package via composer:
composer require maxis/laravel-eloquent-guardPublish the configuration file to customize thresholds, ignored tables, and active reporters:
php artisan vendor:publish --provider="Maxis\EloquentGuard\EloquentGuardServiceProvider" --tag="config"Add your webhook URLs or bot tokens to your .env file for instant alerts:
ELOQUENT_GUARD_ENABLED=true
ELOQUENT_GUARD_SLACK_WEBHOOK=https://hooks.slack.com...
ELOQUENT_GUARD_TELEGRAM_TOKEN=your-bot-token
ELOQUENT_GUARD_TELEGRAM_CHAT_ID=your-chat-idImportant
Queue Worker Required: To ensure your application's performance is not affected, reporting (Slack, Telegram, Sentry) is handled via Laravel's queue system. Make sure your queue worker is running (php artisan queue:work) to receive alerts.
Once published, you can find the settings in config/eloquent-guard.php.
Customize what constitutes a performance issue for your specific application:
'limits' => [
'n_plus_one_threshold' => 5, // Alert after 5 identical queries in one request
'query_duration_ms' => 500, // Alert if a single query takes more than 500ms
],Enable or disable notification channels by adding/removing classes from the reporters array:
'reporters' => [
\Maxis\EloquentGuard\Reporters\LogReporter::class, // Standard Laravel Logs
\Maxis\EloquentGuard\Reporters\SlackReporter::class, // Slack Webhooks (Queue Worker Required)
\Maxis\EloquentGuard\Reporters\TelegramReporter::class, // Telegram Bot API (Queue Worker Required)
\Maxis\EloquentGuard\Reporters\SentryReporter::class, // Sentry Issue Tracking (Queue Worker Required)
],Prevent noise from system tables (like sessions or cache):
'except_tables' => ['sessions', 'cache', 'pulse_entries', 'jobs', 'migrations'],Eloquent Guard comes with a dedicated Laravel Pulse card to visualize N+1 and Slow Query trends directly in your dashboard.
Include the Livewire component in your resources/views/vendor/pulse/dashboard.blade.php:
<x-pulse>
<!-- Display Eloquent Guard Alerts -->
<livewire:maxis.eloquent-guard cols="4" />
<!-- Existing Pulse cards... -->
</x-pulse>The package is fully tested with PHPUnit. If you are developing locally or using Laravel Sail, run the test suite with:
# Using Laravel Sail
sail php ./packages/maxis/eloquent-guard/vendor/bin/phpunit -c ./packages/maxis/eloquent-guard/phpunit.xml
# Or standard PHPUnit from the package directory
./vendor/bin/phpunitContributions make the open-source community amazing!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE.md for more information.



