What is Skyline for Laravel?
What Skyline adds on top of Laravel Horizon, and what stays exactly the same.
Skyline is a commercial fork of Laravel Horizon, maintained by Boring Observability. It keeps everything Horizon does for monitoring Redis queues and adds what Horizon leaves out: alerts when a queue stalls, jobs fail in bulk or Horizon stops running, pausing a queue, running a delayed job now, weighted processing, front-of-queue dispatch, per-queue inspection and cleanup, and a metrics dashboard that stays readable at scale.
A genuine drop-in replacement#
Skyline keeps the Laravel\Horizon\ namespace and declares replace on
laravel/horizon in Composer. In practice that means:
- Your existing
config/horizon.phpkeeps working, unchanged. - Your
HorizonServiceProvider,Gate::define('viewHorizon', …)andHorizon::auth()customisations keep working. - Every
php artisan horizon:*command keeps its name and behaviour. - The dashboard still mounts at
/horizon. - Any package that depends on
laravel/horizonresolves against Skyline instead. - There are no migrations, and no application code changes.
Skyline is a rebased fork rather than a divergent one: main is always a recent upstream Horizon
tag with the Skyline commits replayed on top. New Horizon releases, bug fixes and Laravel compatibility updates are
merged in, so the Skyline features are built on a current base rather than instead of one.
What Skyline adds#
| Capability | Where it is documented |
|---|---|
| Alerts when a queue stalls, jobs fail in bulk, workers crash-loop or Horizon stops running, with recovery messages | Alerts |
| Proportional queue priority that never starves a queue | Weighted queues |
| Push an urgent job to the head of the queue | Front-of-queue dispatching |
| Pause and resume Horizon, or a single queue, from the dashboard | Pausing & resuming queues |
| Job-state tabs, per-queue drill-down, search, delete, empty queue, Perform Now | Dashboard operations |
| Aggregate metric charts, workload / failure / wait trends | Metrics & trends |
| Structured logging of every job lifecycle transition, and of the queue failures Laravel keeps silent | Job lifecycle logging |
ShouldBeUnique locks released when a job is deleted or fails before it starts |
Unique job locks |
| Held unique and overlap locks, skipped dispatches, debounced jobs, and jobs held back by rate limiters and throttles | Locks & Limits |
| What each job class costs in memory and CPU, and why workers are being replaced | Insights |
| A read-only MCP server, so an AI agent can inspect queues, jobs and metrics | MCP server |
| New HTTP endpoints backing all of the above | HTTP API |
Requirements#
Skyline inherits Horizon's requirements. If Horizon runs on your application today, so does Skyline — the supported range is the same one upstream Horizon declares, because Skyline is rebased onto it rather than diverging from it.
| Requirement | Supported |
|---|---|
| PHP | 8.0 and later |
| Laravel | 9.21 and later, through Laravel 13 |
| Queue connection | Redis, via the phpredis extension or predis/predis |
| PHP extensions | json, pcntl, posix |
pcntl and posix are what let the master process signal its workers, so they are hard
requirements of Horizon and of Skyline alike — they are not available on Windows, which is why Horizon has never
run there either. WSL, Docker or any Linux host is fine.
One feature needs a newer framework than the rest, and degrades gracefully rather than breaking:
pausing a single queue is built on Laravel's native
queue-pause API, added in Laravel 12.40. Below that version the per-queue Pause buttons hide
themselves behind an explanatory banner; everything else on this page works from Laravel 9.21 up. Global and
per-supervisor pausing — horizon:pause and horizon:pause-supervisor — work on every
supported version, because they signal the master process rather than storing state.
Licensing#
Skyline is sold as a one-time purchase through Anystack —
$139 once, covering every application you run it on
and including twelve months of upgrades.
A license key authenticates Composer against the private registry at laravel-skyline.composer.sh so you
can install and update the package. See Installation.
When the twelve months end, every version published during them stays yours — installed copies keep running and you can still pull those releases when you rebuild. There is no runtime license check that can interrupt job processing; only releases published after your upgrade year fail to resolve until you renew.
Skyline is built on Laravel Horizon, which is open-sourced under the MIT license (Copyright © Taylor Otwell). Skyline's modifications and additions are Copyright © Boring Observability and are also released under MIT.
Relationship to the Horizon docs#
Skyline's behaviour is identical to upstream Laravel Horizon except for the features documented on this site. The official Horizon documentation — supervisors, balancing strategies, autoscaling, tags, metrics snapshots, notifications, deployment — applies in full.