# Skyline for Laravel vs NightOwl

> NightOwl monitors your whole application from a PostgreSQL database you run, and says to keep Horizon on Redis. Skyline is that Horizon, with queue alerts and controls.

Source: https://boring-observability.dev/skyline/vs/nightowl
Section: Comparisons — Skyline for Laravel
Updated: 2026-11-11

---

**Bottom line:** NightOwl's own Horizon page puts it plainly: on Redis, keep Horizon. NightOwl is an application monitor that keeps its data in a PostgreSQL database you run, at a flat monthly price. It reports rather than acts, and by its own account it does not alert on queue backlog or wait time. Skyline is the Horizon install: it alerts when Horizon stops or a queue stalls, and lets you pause a queue or release a stuck lock. On Redis the two sit side by side. Off Redis, NightOwl covers ground Skyline cannot.

[NightOwl](https://usenightowl.com) is a monitoring service for Laravel applications built on the same capture layer as Laravel Nightwatch. Its MIT-licensed agent takes what `laravel/nightwatch` records and writes it to a PostgreSQL database you provide, and NightOwl's hosted dashboard reads that database. Skyline for Laravel is a fork of Horizon that runs on your own servers and covers the queue and the scheduler.

NightOwl markets itself as a Laravel Horizon alternative, which is why the two get compared. This page describes NightOwl as of November 2026 (agent version 2.4.8).

## What NightOwl says about Horizon

Its own [Horizon alternative guide](https://usenightowl.com/guides/laravel-horizon-alternative/) is titled "Laravel Horizon Alternative for Non-Redis Queues", and it is candid about where the claim stops: "On Redis, keep Horizon: it's free and built for real-time queue views." For a live view of whether a queue is draining, the same page says "Horizon on Redis is still the better tool."

That is accurate, and it frames this comparison. NightOwl does not run workers or supervisors, so on Redis it sits beside Horizon rather than in its place. Skyline is the Horizon install. The useful question is what each one adds to a Redis queue that Horizon already runs.

## At a glance

| Capability | NightOwl | Skyline |
| --- | --- | --- |
| What it covers | The whole application | Queues and the scheduler |
| Relationship to `laravel/horizon` | Runs beside it on Redis | Replaces it |
| Where your data lives | A PostgreSQL database you run, read by NightOwl's hosted dashboard | Redis on your own servers |
| Processes to keep running | The NightOwl agent, alongside your workers | None beyond Horizon itself |
| Queue drivers | Redis, database, SQS and Beanstalkd | Redis |
| Job attempts with p50, p95 and p99 per class | Yes, linked to the request, queries and logs | Throughput and runtime per class; [memory and CPU](https://boring-observability.dev/skyline/docs/insights) with insights |
| Queue length, wait time and worker status | No; wait time per attempt in a trace | Yes |
| History | As long as you keep it in your database | Horizon's Redis trim windows, measured in hours |
| Alerts on new exceptions and slow jobs | Yes | No; it alerts on a class that keeps [timing out](https://boring-observability.dev/skyline/docs/alerts) |
| Alert when a queue stalls or backs up, or Horizon stops | No | [Yes](https://boring-observability.dev/skyline/docs/alerts), with `horizon:check` [running outside the fleet](https://boring-observability.dev/skyline/docs/alerts#horizon-down) |
| Alert on failure rate per queue or job class | No | [Yes](https://boring-observability.dev/skyline/docs/alerts#failure-rate) |
| Alert channels | Email, Slack, Discord, a signed webhook | Mail, Slack, SMS, a webhook |
| Retry, pause, delete or run a job now | No, it reports only | [Yes](https://boring-observability.dev/skyline/docs/dashboard-operations) |
| Scheduled tasks | Finished, failed and skipped runs; not runs that never started | [Every run, missed runs marked, with Pause and Run now](https://boring-observability.dev/skyline/docs/scheduled-tasks) |
| Held `ShouldBeUnique` locks | No | [Locks & Limits screen](https://boring-observability.dev/skyline/docs/locks-and-limits) |
| Requirements | PHP 8.2+, Laravel 11 to 13, PostgreSQL 14+ reachable by its dashboard | PHP 8.0+, Laravel 9.21 to 13, Redis |
| Price | $5, $15 or $69 a month, plus your database | $139 once, a year of upgrades |

## What NightOwl sees of a queue

NightOwl records every dispatch and every attempt with its queue, status, duration and exception, and charts p50, p95 and p99 durations per job class. Each attempt sits in a trace with the request that dispatched it and the queries and logs it ran. It does not store job payloads.

Like Nightwatch, it records what happened rather than reading the queue. Its own guides say what that leaves out: "NightOwl doesn't alert on queue backlog or wait time", and for scheduled tasks, "It can't see a task that never ran." It has no queue or worker views, and nothing in its documentation retries or pauses a job.

One deployment detail is worth knowing before you choose it. The dashboard is hosted by NightOwl and connects to your PostgreSQL database from a fixed IP address, so that database has to be reachable from the internet. Telemetry is stored only in your database; it passes through NightOwl's API on the way to your browser.

## Where NightOwl is the better answer

- **You want monitoring for the whole application.** Requests, queries, exceptions and jobs in one trace, with exceptions grouped into issues, is a different product from a queue dashboard.
- **You are not on Redis.** On the database driver or SQS there is no Horizon to fork, and this is the case NightOwl's own Horizon page is written for.
- **You want long-term history in your own database.** Records sit in PostgreSQL for as long as you keep them, and you can query them with plain SQL.
- **You want percentiles per job class.** p50, p95 and p99 per class are on NightOwl's job pages. Skyline shows throughput and runtime, not percentiles.

## Where Skyline is the better answer

- **The queue stops quietly.** Skyline checks the live fleet every minute for Horizon being down, a stalled queue, a backlog that is not draining and crash-looping workers, and says when each one recovers. NightOwl alerts on exceptions and slow records, which a stalled queue does not produce.
- **You need to act during an incident.** Pausing one queue or running a retrying job the moment the fix is deployed is an operation on Redis, and NightOwl reports only.
- **The job never ran.** A dispatch skipped by a held `ShouldBeUnique` lock and a scheduled task that never started both leave nothing to record. Skyline's Locks & Limits and Schedule screens show both.
- **You would rather not expose a database.** Skyline runs inside the Horizon you already have, with no extra process and no database to open to the internet.

## Running both

Nothing stops you, and on Redis that is the arrangement NightOwl itself describes: its queue guide says "Horizon can keep running next to it for live worker ops." Skyline takes that place, adding queue alerts and controls, while NightOwl covers exceptions and slow requests and keeps long-term job history.

## Choosing between them

If you are on Redis and your problem is queues, NightOwl's own advice and ours agree: keep a Horizon, and Skyline is the Horizon that alerts and acts. If you want application monitoring with the data in your own database at a flat monthly price, NightOwl is built for that, and it works beside either one.


## Common questions

### Is NightOwl a Laravel Horizon alternative?

For queues that are not on Redis. NightOwl's own guide is titled "Laravel Horizon Alternative for Non-Redis Queues" and says "On Redis, keep Horizon: it's free and built for real-time queue views." It does not run workers or supervisors, so on Redis it sits beside Horizon. Skyline replaces Horizon and keeps everything it does.

### Does NightOwl alert when a queue backs up or stops?

No. In its own words, "NightOwl doesn't alert on queue backlog or wait time." It alerts on new exceptions, records over a duration threshold, HTTP worker saturation and its own agent's health, over email, Slack, Discord or a signed webhook. Skyline's seventeen checks cover Horizon not running, a stalled queue, a backlog that is not draining, failure rates and crash-looping workers.

### Can NightOwl retry or pause jobs?

No. Its documentation and MCP tools describe no retry, pause, delete or lock release. Skyline can pause a single queue, run a delayed or retrying job now and release a stuck ShouldBeUnique lock.

### Where does NightOwl store its data?

In a PostgreSQL 14+ database you provide. The agent writes to it, and NightOwl's hosted dashboard connects to it from a fixed IP address, so the database has to be reachable from the internet. Telemetry is stored only there and passes through NightOwl's API on the way to your browser. Skyline keeps its data in the Redis your Horizon already uses.

### How much does NightOwl cost?

As of November 2026: Hobby at $5 a month for one app with 14 days in the dashboard, Team at $15 for three apps with full history, and Agency at $69 for unlimited apps, all with no event limits, plus whatever your PostgreSQL database costs. It is free for open-source projects. The agent is MIT-licensed; the dashboard and backend are closed source. Skyline is $139 once, with a year of upgrades.

### Can I run NightOwl and Skyline together?

Yes. NightOwl's queue guide says "Horizon can keep running next to it for live worker ops", and Skyline takes that place, adding queue alerts and controls while NightOwl covers exceptions, slow requests and long-term job history.
