blomstra/horizon
Integrates Laravel Horizon with Flarum so administrators can monitor Redis queues, jobs, and workers from the admin panel. Offers a convenient in-app view of queue health and failed jobs without switching to a separate Horizon dashboard.
Framing correction: despite the "Laravel/PHP package" label, blomstra/horizon is a Flarum extension (flarum-ext-horizon), not a general-purpose Composer library. It bundles Laravel Horizon into Flarum's admin panel so operators can monitor Flarum's Redis-backed queues. That distinction drives most of the assessment below — it cannot be dropped into an arbitrary Laravel application, and its value is entirely contingent on running Flarum.
Architecture fit. Flarum is built on Laravel components (including illuminate/queue), so a Horizon integration is conceptually coherent: Horizon is the de facto queue observability layer for Laravel-style queues. The friction is structural. Horizon assumes a full Laravel application kernel — a Illuminate\Contracts\Foundation\Application, a config repository, registered service providers, its own asset pipeline, and route/auth middleware. Flarum ships its own container, config, and admin SPA. This extension therefore has to bridge two application bootstraps, which is exactly the kind of glue that breaks silently on minor version bumps of either side. Fit is plausible but non-trivial, and the bridge is the risk, not Horizon itself.
Integration feasibility. Mechanically straightforward: composer require blomstra/horizon, enable via Flarum admin, point it at a Redis queue connection, and run php flarum horizon under a process supervisor. Real feasibility constraints:
sync/database queue and gain nothing here.illuminate/* versions.Technical risk. High relative to the value delivered:
Key questions to resolve before committing:
Stack fit. This only fits a Flarum 1.x deployment on PHP 8.x with Redis as the queue driver and a process supervisor available. It does not fit:
laravel/horizon directly; this extension adds nothing and subtracts flexibility.Confirm the fit before evaluation spend: composer show the Flarum core version, check QUEUE_CONNECTION, and confirm Redis is a managed dependency (not incidental).
Migration path. Low-effort, reversible, but sequenced:
php flarum horizon (or the extension's documented command) runs under supervisor, survives restart, and drains the same queues Flarum enqueues to. This is the step most likely to fail and the one to timebox.Compatibility. Pin explicitly: Flarum core minor version, PHP minor, Horizon major, and Redis version. Treat any Flarum upgrade as a re-validation event for this extension, not a routine patch. Because there are zero dependents, there is no ecosystem signal that a given combination works — we are the ones generating that evidence.
Sequencing relative to other work. This should not gate anything. It is an observability convenience layered on an existing queue. If queue reliability is a real concern, the higher-leverage investment is worker supervision, alerting on queue depth/failed jobs, and Redis persistence — all of which are independent of this extension and survive its abandonment.
Maintenance. Ongoing cost is modest in code terms but concentrated in upgrade friction: every Flarum or Horizon bump requires a compatibility check against a package with a single maintainer and a thin release history. Budget a recurring line item for "validate queue stack after platform upgrades," and assume a fork-or-replace decision within the planning horizon. Vendoring a pinned fork is a reasonable hedge given the MIT license.
Support. No SLA, no vendor contract implied by the package. Support is GitHub issues on a low-traffic repository. Internal ownership must be assigned explicitly — realistically to whoever owns the Flarum platform — including the ability to read Horizon's source when something breaks. Escalation to the maintainer should not be assumed to be timely.
Scaling. Horizon's genuine value is visibility at scale: queue throughput, wait times, failed-job inspection and retry, and per-queue metrics. That is meaningful for forums with heavy asynchronous workloads — notification fan-out, subscription emails, search indexing, webhook delivery. The extension itself does not change queue throughput; it changes our ability to see and act on it. Two scaling caveats: Horizon's Redis keys (metrics, recent jobs, failed jobs) share the Redis instance and need trimming configured, and the dashboard's own polling adds load on an admin surface that may be opened during incidents — precisely when headroom is lowest.
Failure modes. Ranked by likelihood and blast radius:
Mitigations: independent alerting on queue depth and failed-job count (do not rely on the dashboard being up), supervisor auto-restart, Redis maxmemory-policy review, network-level restriction of the dashboard, and a written fork/replace contingency.
Ramp-up. Two distinct skill sets are required and rarely co-located: Flarum extension administration (composer, flarum CLI, extension lifecycle) and Laravel queue/Horizon operations (supervisor, Redis, worker tuning, failed-job triage). Estimate roughly one engineer-day to stand up in staging including the worker validation, and half a day of documentation so on-call can interpret the dashboard during an incident without the original implementer. The onboarding risk is not the install — it is that a low-adoption package has no community runbooks, so tribal knowledge becomes the support model.
Recommendation. Adopt only if Redis-backed Flarum queues are already a production concern and a named owner will carry the upgrade burden; otherwise defer. The 0.27 score and 2-star adoption are consistent with an unproven integration, and the opportunity score (3.06) suggests latent value in queue observability rather than confidence in this specific package. If adopted, treat it as a replaceable convenience layer — never as the sole mechanism for queue health.
How can I help you explore Laravel packages today?