Laravel Skyline vs Laravel Horizon
Skyline is a fork of Horizon. Everything Horizon does still happens; the difference is what you can do about it.
Updated · Boring Observability
[ the bottom line ]
Keep Horizon if watching your queues is all you need — it is free, official, and Skyline changes none of it. Choose Skyline when you keep needing to act on what the dashboard shows: pause one queue during an incident, run a retrying job now, drain a backlog, weight a queue without starving the rest.
- Laravel Horizon
- The official Laravel queue dashboard, and the project Skyline is forked from. Free, MIT
- Laravel Skyline
- A commercial fork of Laravel Horizon that replaces the package and adds production queue operations. Annual subscription · MIT-licensed source
Laravel Skyline is a commercial fork of Laravel Horizon that keeps every part of Horizon intact and adds an operations layer on top of it. Horizon shows you what your Redis queues are doing; Skyline shows you the same thing and gives you the buttons to act on it — pause a queue, run a delayed job now, drain a backlog, jump a job to the front. Everything below is additive: there is no Horizon feature Skyline removes, renames or changes.
At a glance#
| Capability | Horizon | Skyline |
|---|---|---|
Drop-in for laravel/horizon (same config, same namespaces) |
It is Horizon | Yes |
| Throughput, runtime & failure metrics | Yes | Yes |
| Supervisors, balancing strategies, autoscaling, tags, notifications | Yes | Yes — unchanged |
| Trigger a delayed or retrying job immediately | No | Perform Now |
| Drill into the jobs waiting inside a queue | No | Per-queue drill-down |
| Delete a job, or empty a queue, from the UI | No | Yes, with guards |
| Pause & resume a single queue | No — all-or-nothing | Per queue |
| Proportional queue priority without starvation | No — strict priority only | Weighted queues |
| Ad-hoc front-of-queue dispatch | No | onFront() |
| Search jobs by class name | No | Across pending, completed, retried and failed |
| Scheduled and retrying jobs told apart | No — one delayed list | Separate tabs, split on attempt count |
| Structured job lifecycle logging | No | Every transition, incl. silent drops |
ShouldBeUnique lock released on out-of-band removal |
No — lock wedges | Released |
| Structured JSON worker output | No | One object per line |
| Price | Free, MIT | Annual subscription |
What is identical#
Skyline is a rebased fork rather than a divergent one: its main is a recent upstream Horizon tag
with the Skyline commits replayed on top, and upstream releases are merged within 14 days. The practical consequence
is that the parts of Horizon you already rely on are not reimplementations that might behave subtly differently —
they are the same code.
- The
Laravel\Horizon\namespace, and every class in it. config/horizon.php, including supervisors, balancing, autoscaling andtrim.- Every
php artisan horizon:*command. - The dashboard's mount point,
/horizon, and theviewHorizongate that protects it. - Metrics snapshots, tags, long-wait notifications.
The official Horizon documentation therefore applies to Skyline in full, and this site documents only the differences.
When switching is worth it#
Horizon is free, official, and genuinely good at what it does. If watching your queues is all you need, keep it — Skyline changes nothing about that job, so paying for it would buy you nothing.
The case for switching is a specific one, and it shows up as a recurring frustration rather than a missing feature:
- You have SSH'd into a worker box during an incident to stop one queue, because the dashboard's only pause button stops all of them.
- You have waited out a backoff window after deploying a fix, watching a retrying job sit there because there is no way to say "run it now".
- You have written a one-off Artisan command to inspect or drain a queue, because the dashboard can count the backlog but not show you what is in it.
- You have a queue that starves under strict priority, and turning balancing on to fix it costs you a floor of idle workers you do not need.
Each of those is a place where Horizon tells you something is wrong and then hands you a terminal. Skyline is the layer that closes that loop.
Skyline is not an APM#
A recurring question, so it is worth stating plainly: Skyline is queue control, not telemetry. It runs entirely on your own servers — no agent, no data egress, nothing shipped to a vendor. Tools like Laravel Nightwatch, Datadog or Sentry tell you that something is wrong across your whole application. Skyline is the hands-on layer for the queue specifically: pause it, drain it, jump a job to the front. They pair; they do not compete.
What the difference costs#
Horizon is free and MIT-licensed and always will be; Skyline is an annual subscription. Two things about that are worth knowing before you weigh it up, because they are the parts that usually go unstated in commercial forks:
-
There is no runtime licence check. The licence authenticates Composer against a private
registry. Nothing in the shipped package phones home or can interrupt job processing, so a lapsed subscription
cannot take your queues down — it only stops future
composer updatecalls resolving. - The source is MIT-licensed, as Horizon's is. What you are buying is access to the registry and the maintenance behind it, not a permission slip to run the code.
Keeping up with upstream#
The real risk in adopting a fork is not the fork's own bugs; it is being stranded two Laravel majors behind because the fork quietly stopped tracking upstream. Skyline's answer is structural rather than a promise: because it is a rebase rather than a divergence, taking a new Horizon release means replaying a small, known set of commits onto a new tag, and upstream releases are merged within 14 days.
Skyline-only features are built on top of that current base, never instead of it.
The cost of switching, and of switching back#
Because Skyline declares replace: laravel/horizon and keeps the namespace, adopting it is a Composer
change and a redeploy — no code changes, no migrations. Rolling back is the same operation in reverse, and it loses
nothing but the Skyline-only views: there is no schema to unwind, and your queues and jobs are untouched. See
Migrating from Laravel Horizon.
That symmetry is deliberate. A fork of a package this central to an application should not be a one-way door, and a trial that you cannot reverse is not a trial.
Common questions
Should I use Laravel Horizon or Laravel Skyline?
Use Horizon if monitoring is all you need — it is free, official, and Skyline changes none of it. Choose Skyline when you find yourself needing to act on what the dashboard shows: pausing one misbehaving queue during an incident, running a retrying job immediately after deploying the fix, draining a backlog, or giving one queue priority without starving the others.
Is Laravel Skyline a drop-in replacement for Laravel Horizon?
Yes. Skyline keeps the Laravel\Horizon\ namespace and declares replace on laravel/horizon in Composer, so your existing config/horizon.php, service-provider customisations, gate definitions and horizon:* Artisan commands all keep working. The dashboard still mounts at /horizon. There are no migrations and no application code changes.
Will Laravel Skyline keep up with Laravel Horizon releases?
Skyline is a rebased fork rather than a divergent one: its main branch is a recent upstream Horizon tag with the Skyline commits replayed on top, and upstream releases are merged within 14 days. New Horizon versions, bug fixes and Laravel compatibility updates land on a current base rather than instead of one.
Can I roll back from Skyline to Horizon?
Yes, and it is the same operation in reverse: require laravel/horizon again and drop the Skyline package. Skyline adds no database schema and stores its extra tracking data under the same Redis prefix, so a rollback loses the Skyline-only views and leaves your queues and jobs untouched.
How is Skyline different from Laravel Nightwatch or an APM?
Skyline is queue control, not telemetry. It runs entirely on your own servers — no agent, no data egress. An APM tells you something is wrong; Skyline is the hands-on layer that lets you do something about it. They pair rather than compete.