cachethq/cachet
Cachet is a beautiful, self-hosted status page system built with Laravel. Create incidents, track component status, schedule maintenance, notify subscribers, and expose a JSON API to keep users informed during outages.
Architecture fit. Cachet is not a Composer library that gets pulled into an existing Laravel application — it is a full standalone Laravel application (the Dependents: 0 figure confirms it is not consumed as a package). Any integration is therefore service-to-service, not code-level: you deploy Cachet as its own workload with its own database, queue worker, and scheduler, then talk to it over its REST API and webhooks. Teams expecting a drop-in composer require status component will be disappointed; teams expecting a self-hosted Statuspage.io equivalent will find a reasonable fit.
Integration feasibility. Reasonable, with clear seams:
custom theme directory allow branding without forking core.Technical risk. This is where a TPM should slow down:
NOASSERTION. GitHub could not detect a standard SPDX license. Historically Apache-2.0, but before any redistribution, on-prem bundling, or embedding in a commercial product, legal must read the actual LICENSE file. Treat this as a gating item, not a checkbox.Key questions to resolve before commitment:
Stack fit. Cachet assumes a conventional Laravel runtime: PHP 8.x, a relational database (MySQL/Postgres/SQLite), Redis or database-backed cache and queues, a cron-driven scheduler, and a queue worker. If the platform standard is containers on Kubernetes or ECS with managed Postgres and Redis, this drops in cleanly as a three-workload deployment (web, queue worker, scheduler). If the org is Node/Go/Python-only, this introduces a language runtime and a skills tax that should be priced explicitly.
Migration path. Run Cachet as a parallel communications channel before it becomes the primary one:
Compatibility considerations.
Sequencing.
Alternative to keep on the table. If the real requirement is "show component health on our own site," a lightweight custom health endpoint plus a static page may beat operating a full Laravel app. If the requirement is "run a real status page with subscribers and incident history," Cachet is a defensible choice — but compare it against hosted options and against maintaining a fork before deciding.
Maintenance. Budget ongoing ownership, not a one-time deploy. Expect monthly dependency review, quarterly upgrade rehearsals, and a documented process for cherry-picking upstream security fixes when the release cadence stalls. Because upstream is slow, assume you will occasionally patch ahead of the project. A realistic allocation is 0.25–0.5 FTE for a single small instance, higher if you fork for customization.
Support. Community only — GitHub issues and chat. There is no vendor SLA, no security contact with response commitments, and no commercial backstop. Escalation is "read the source," which is fine for a Laravel-fluent team and painful for anyone else. This should be stated plainly to stakeholders.
Scaling. A single web replica handles typical status page traffic comfortably; scale horizontally behind a load balancer with shared database and Redis for cache and sessions. The queue worker is the scaling knob that matters — email subscriber notifications are the burst workload during a major incident, and a single worker will back up. Metrics ingestion and subscriber tables are the database growth vectors; set retention policies for metric points. If you need many status pages, scale by deploying multiple isolated instances, each with its own database, and build a thin control plane for provisioning and theme sync.
Failure modes to design against.
Ramp-up. A Laravel-fluent engineer reaches productive operation in roughly one to two weeks (deploy, theme, API integration, runbooks). A team without PHP experience should plan four to six weeks, and should assume they will need external help for the first security patch cycle. Either way, name an owner before the pilot starts — an unowned status page is worse than no status page, because it makes a promise of transparency that lapses silently during the first real outage.
How can I help you explore Laravel packages today?