What is Skyline for Laravel?
+
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 cannot see or do: alerts when a queue stalls, jobs fail in bulk, workers crash-loop or Horizon stops running, a screen of held unique locks with a Release button, memory and CPU cost per job class, worker restarts with their reason, a log line for every job transition, a Prometheus endpoint with a Grafana dashboard, and dashboard controls such as pausing a single queue, running a delayed job now and searching the jobs inside a queue.
Is Skyline for Laravel a drop-in replacement for Laravel Horizon?
+
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. There are no code changes and no migrations.
Will Skyline keep up with Laravel Horizon?
+
Yes. Skyline's main branch is always a recent upstream Horizon tag with the Skyline commits replayed on top, and every upstream release is merged within 14 days. New Horizon versions, bug fixes and Laravel compatibility updates reach you on that schedule. We also run Skyline on our own production queues, so we need it current too.
Can Skyline alert me when my Laravel queues stop working?
+
Yes, from version 1.5. Set HORIZON_ALERTS=true with a Slack, mail, SMS or webhook destination and schedule php artisan horizon:check every minute. Skyline then checks for Horizon not running, queues that are waiting too long, stalled, not draining or left paused, jobs failing in bulk, crash-looping workers, stranded unique and overlap locks, a timeout that will run jobs twice, and processes out of memory. Each alert has to hold before it is sent, repeats at most every 15 minutes, is routed by severity, stays quiet for five minutes after a deploy and sends a recovery message when it clears. Horizon's own long wait notification stands down while alerts are on.
Why does a ShouldBeUnique job stop dispatching, and how does Skyline help?
+
Its unique lock is still held. While it is, every dispatch returns without queueing anything, and Laravel records no failed job and writes no log line. Locks get left behind when a job is deleted from Redis or its queue is cleared, when a ShouldBeUniqueUntilProcessing job fails before it starts, and when a worker is killed holding a lock that has no uniqueFor. Skyline lists the locks your dispatches hold on its Locks & Limits screen, flags the ones whose job is already gone and lets you release one from the dashboard. It also releases the lock itself when you delete jobs and when an until-processing job is refused on pickup.
Is Skyline safe to run in production, and what data leaves my servers?
+
None of it. Skyline is a package that runs inside your application against your own Redis, exactly like Horizon: no agent, no external service, no telemetry. Your job payloads and queue metrics never leave your infrastructure. The license key is used only by Composer when installing or updating the package, so there is no runtime license check that could phone home or interrupt job processing. Dashboard access is governed by your existing viewHorizon gate.
How is Skyline licensed and priced, and what happens after twelve months?
+
Skyline is a one-time purchase of $139. One license covers every application your team runs it on, with no per-app fee and no seat count. The purchase includes twelve months of upgrades: every Skyline release and every upstream Horizon merge published in that year. When the twelve months end nothing stops working. Every version you received stays yours, keeps running, and can still be pulled from the private registry when you rebuild. There is no runtime license check, so an expired upgrade window is a build-time consideration at worst and never a production one. The only thing you lose is access to releases published after your year, until you renew. Renewing is optional and buys the next twelve months at the rate you bought at. The source is MIT; what you are buying is registry access and the maintenance behind it.
What if Skyline is not a fit? Do you offer a refund?
+
Yes. Every purchase comes with a 30-day money-back guarantee. Email tech@boring-observability.dev within 30 days of being charged and we refund it in full, without a call or a form. Rolling back to Horizon is a single Composer command with no migration to unwind.
What support do I get when I buy Skyline?
+
Email support at tech@boring-observability.dev, straight to the people who build and run Skyline. There is no support tier and no ticket queue in between. We aim to reply within one business day, and security reports are triaged the same day.
How do I install Skyline, and can I switch back to Horizon?
+
Authenticate Composer with your license key, add the laravel-skyline.composer.sh registry to composer.json, then run composer require boring-o11y/laravel-skyline, php artisan horizon:install and php artisan horizon. Switching back is composer remove boring-o11y/laravel-skyline followed by composer require laravel/horizon. Skyline stores its extra tracking data under the same Redis prefix and adds no schema, so there is no migration to unwind and nothing to export.