Manage scheduled & retried jobs
See delayed jobs, when each is due to run, and trigger any of them immediately with a single click — no waiting out the backoff window.
◢ Boring Observability · Commercial Horizon fork
Skyline is a drop-in replacement for Laravel Horizon that turns the dashboard into a real control room — pause a queue, jump a job to the front, drain a backlog, and read metrics that finally tell the truth. Same config, same namespaces, zero code changes.
Built by a team running 100,000+ background jobs a day in production. We built Skyline because Horizon showed us the fire and gave us no way to fight it.
For teams running 100k+ jobs a day — where a stuck queue is an incident, not an inconvenience.
● Early access — September 2026 · ● General availability — January 2027
Replaces laravel/horizon — keeps the Laravel\Horizon namespace
Same dashboard route, same config/horizon.php, no migration
No application code edits required to switch over
Built on Horizon 5.x for production Redis queues
Kept current with Horizon. Every upstream release is tracked and merged within 14 days, so you never get stranded on an old version.
[ what's on top of Horizon ]
Horizon shows you what your queues are doing. Skyline lets you do something about it — without SSHing into a box or firing Redis commands by hand.
See delayed jobs, when each is due to run, and trigger any of them immediately with a single click — no waiting out the backoff window.
Open any queue straight from the dashboard and read the exact jobs waiting inside it, in order.
Delete individual jobs or empty an entire queue from the UI, with confirmation prompts that stop costly mistakes.
Pause every worker or a single queue from the dashboard, then resume the moment you are ready. Jobs simply accumulate until you do.
Understand both the current queue delay and the expected wait time, side by side, with reporting that finally reads true.
Delayed jobs are tracked consistently and cleaned up automatically according to your existing retention settings.
Give important queues proportionally more attention without relying on strict priority order — and without starving the rest.
Send an urgent job to the head of the queue so a worker picks it up next — ad-hoc priority without a dedicated high-priority queue.
Find jobs by class name across pending, completed, retried, and failed views in seconds.
Read clean aggregate charts instead of fragmented per-job and per-queue tiles.
[ priority, without the plumbing ]
By default a dispatched job is appended to the tail and processed FIFO. Add the
InteractsWithFrontOfQueue trait and
call onFront() — Skyline
LPUSHes it onto the head of the
ready list so a worker picks it up next. No dedicated high-priority queue to stand up.
use Laravel\Horizon\InteractsWithFrontOfQueue;
class ProcessPodcast implements ShouldQueue
{
use Dispatchable, InteractsWithFrontOfQueue, Queueable;
}
// Jump to the front of the queue:
ProcessPodcast::dispatch($podcast)->onFront();
// Composes with the usual options:
ProcessPodcast::dispatch($podcast)
->onFront()
->onQueue('media');
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['high', 'default', 'low'],
'balance' => false,
'queueWeights' => [
'high' => 3,
'default' => 2,
// 'low' omitted → default weight of 1
],
],
[ proportional, not all-or-nothing ]
Strict left-to-right priority drains high
completely before it ever looks at low.
A queueWeights map softens that into a
proportional policy — checked roughly 3 : 2 : 1,
so important work is favoured while nothing is left to rot.
Applies only when balance => false. Queues without an entry keep weight 1.
[ Horizon vs Skyline ]
| Capability | Horizon | Skyline |
|---|---|---|
| Drop-in for laravel/horizon (same config & namespaces) | ||
| Throughput, runtime & failure metrics | ||
| Trigger a delayed or retrying job immediately | — | |
| Drill into the jobs waiting inside a queue | — | |
| Delete jobs / empty a queue from the UI | — | |
| Pause & resume a single queue | — | |
| Weighted (proportional) queue processing | — | |
| Front-of-queue dispatching (onFront()) | — | |
| Search jobs by class name everywhere | — |
[ switch in three steps ]
Because Skyline replaces
laravel/horizon, there are no code changes
and no migration.
Point Composer at the private registry with your Anystack license key.
composer config --global \ --auth http-basic.laravel-skyline.composer.sh \ you@example.com YOUR-LICENSE-KEY
Add the registry to composer.json, then pull in Skyline. It replaces laravel/horizon.
composer require \ boring-o11y/laravel-skyline
Publish assets and start the dashboard and workers — exactly as before.
php artisan horizon:install php artisan horizon
The dashboard mounts at /horizon and
config/horizon.php is identical to upstream — your
existing service-provider customizations and gate definitions keep working.
[ answers ]
Laravel Skyline is a commercial, drop-in replacement for Laravel Horizon, maintained by Boring Observability. It keeps everything Horizon does for monitoring Redis queues and adds production operations tooling — pausing queues, triggering delayed jobs, weighted processing, front-of-queue dispatch, per-queue inspection and cleanup, and a reworked metrics dashboard.
Yes. Skyline keeps the Laravel\Horizon\ namespace and "replaces" laravel/horizon in Composer, so your existing config/horizon.php, service-provider customizations, gate definitions and Artisan commands all keep working. The dashboard still mounts at /horizon and no code changes or migrations are required.
Yes. Skyline tracks upstream Horizon and merges every release within 14 days, so you get new Horizon versions, bug fixes and Laravel compatibility updates without being stranded on an old version. The Skyline-only features are built on top of that current base, never instead of it — and because the team runs Skyline against its own production queues every day, keeping current is part of how we operate, not an afterthought.
Skyline is queue control, not telemetry. Your queue controls run entirely on your own servers — no agent, no data egress. Pair it with your APM (Nightwatch, Datadog, Sentry): they tell you something is wrong, Skyline is the hands-on layer that lets you do something about it — pause a queue, jump a job to the front, drain a backlog.
Skyline is sold as an annual subscription through Anystack. Buying a license gives you a key that authenticates Composer against the private registry at laravel-skyline.composer.sh so you can install and update the package.
Already-installed versions keep running normally — there is no runtime license check that can interrupt job processing. Only future composer update calls against the private registry will fail authentication until you renew.
Authenticate Composer with your license key, add the laravel-skyline.composer.sh registry to composer.json, then run composer require boring-o11y/laravel-skyline. Finally run php artisan horizon:install and php artisan horizon, exactly as you would with Horizon.
Add the InteractsWithFrontOfQueue trait to a job and call ->onFront() on dispatch. Skyline then LPUSHes the job onto the head of the Redis ready list so a worker picks it up next, instead of appending it to the tail. It applies to immediate dispatches on the Redis driver only.
In a supervisor running with balance => false, a queueWeights map lets higher-priority queues be checked proportionally more often (for example 3:2:1) without ever starving the lower-priority ones. It applies only when balancing is off, and queues without an entry default to a weight of 1.
Skyline monitors Redis queues, just like Horizon. Features that rely on Redis list semantics — such as front-of-queue dispatching — do not apply to the sync or database drivers.
[ limited early access ]
Skyline isn't public yet. Leave your email and we'll send your invitation and license key the moment early access opens — ahead of general availability.
Early access
September 2026
Invites roll out to the list first.
General availability
January 2027
Open to everyone, annual subscription.
Early access gets you an early-access license key, a direct line to the makers, and real influence on the roadmap.
We run Skyline against our own queues every day. Get in early and you'll help shape the controls before they're set in stone. — The Boring Observability team