a-pb / horizon-ui
Enhanced UI for Laravel Horizon - adds job name search/filter to Pending, Completed, and Failed tabs.
v1.0.1
2026-03-24 21:00 UTC
Requires
- php: ^8.2
- laravel/framework: ^11.0|^12.0
- laravel/horizon: ^5.0
This package is auto-updated.
Last update: 2026-04-24 21:13:30 UTC
README
Enhanced UI for Laravel Horizon — adds job name search/filter to Pending, Completed, and Failed job tabs.
Installation
composer require a-pb/horizon-ui
The package auto-discovers its service provider. No additional configuration needed.
What it does
This package extends the official laravel/horizon dashboard with job name filtering:
- Pending Jobs — search input to filter by job class name
- Completed Jobs — search input to filter by job class name
- Failed Jobs — search input to filter by job class name (alongside the existing tag search)
The search is case-insensitive and matches partial phrases. Results are debounced (500ms) for a smooth experience.
How it works
- Controller overrides — Registers enhanced versions of
PendingJobsController,CompletedJobsController, andFailedJobsControllerthat accept aqueryparameter and scan Redis for matching job names. When noqueryparameter is present, the original Horizon logic is used viaparent::index(). - Middleware JS swap — A
SwapHorizonAssetsmiddleware (appended to thehorizonmiddleware group) replaces the inlined<script>block in Horizon's HTML response with our enhanced JS bundle that includes search UI components. No Blade views are overridden — Horizon'slayout.blade.phpis used as-is. - Zero config — Routes are registered with the same names as Horizon's originals, so Laravel's last-registered-wins behavior ensures our enhanced controllers handle the requests.
What is NOT overridden
- Horizon's Blade views (layout, etc.)
- Horizon's CSS styles
- All other Horizon API routes (dashboard, metrics, batches, monitoring, etc.)
- Horizon's authentication and authorization logic
Requirements
- PHP ^8.2
- Laravel ^11.0 | ^12.0
- Laravel Horizon ^5.0
Development — rebuilding the frontend
The dist/app.js bundle is pre-built and committed to the repository. To rebuild it after modifying files in patches/:
# Provide the path to the installed laravel/horizon package
HORIZON_PATH=/path/to/vendor/laravel/horizon ./build.sh
The build script:
- Copies all JS sources from Horizon's vendor directory
- Overlays modified Vue components from
patches/ - Runs Vite to produce
dist/app.js - Cleans up the temporary source files
License
MIT