rocketeers-app/laravel
Laravel integration package from rocketeers-app that connects Rocketeers App tooling with Laravel applications through service provider bindings and configuration. It aims to simplify setup and usage for Laravel projects while keeping integration lightweight and straightforward.
What shipped (v2.10.0)
GET /rocketeers/horizon/stats?expires=<ts>&signature=<hmac>. It returns aggregate Horizon counters only (status, processes, jobsPerMinute, failedJobs, recentJobs, wait). It cannot reach job payloads or Horizon's action endpoints, and it is explicitly narrower than the bearer-token access introduced in 2.9.0. The two coexist and are independent.illuminate/support already allowed ^13.0, but orchestra/testbench was capped at ^10.0, so CI only ever booted Laravel 12. Testbench 11.x now resolves laravel/framework 13.29, so Laravel 13 is genuinely exercised.Architecture fit
web middleware group: no session, no cookies, no CSRF, no custom headers. That makes it a CORS "simple request" that never preflights, and stateless by construction. This is the right shape for a machine-signed, browser-polled read path.404 so the package remains safe in apps that don't run Horizon.ROCKETEERS_HORIZON_SECRET to "your Rocketeers environment id", i.e. a provisioning identifier is being used as an HMAC key. That is only acceptable if the value is high-entropy and rotatable; environment IDs are often displayed in dashboards and URLs.Integration feasibility
ROCKETEERS_HORIZON_ORIGIN and ROCKETEERS_HORIZON_TTL are optional.Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Secret entropy / reuse of environment ID as HMAC key | Medium | Needs confirmation that the ID is unguessable and rotatable |
| Unauthenticated-by-middleware route bypasses standard throttling | Medium | web group typically carries throttle; confirm limits exist here |
| Bearer path from 2.9.0 still present and broader | Medium | Two access mechanisms on the same surface is a footgun; disable what you don't use |
| Signature replay inside the TTL window | Low–Medium | Bounded by 300s default; read-only aggregate data caps blast radius |
| Clock skew between dashboard and app servers | Low | 403 on skew; worth monitoring 403 rate after rollout |
| 500s when Redis/Horizon is unhealthy | Low | Dashboards degrade to errors rather than blank panels |
| Laravel 13 support claim previously untested | Now resolved | This release fixes a real gap: 13.x was advertised but never booted in CI |
Key questions for the vendor
hash_equals)?expires validated for both past and far-future values, and is there any nonce/replay protection?web group?Access-Control-Allow-Origin behaviour should we expect, given no custom headers are sent?Stack fit
404 and no behavioural change.Migration path
^2.10.0 in a non-production environment first; confirm route registration and that /rocketeers/horizon/stats returns 403/404 as expected before any secret exists.ROCKETEERS_HORIZON_SECRET per environment via the Rocketeers env editor (existing environments) or accept the auto-provisioned value (new ones).ROCKETEERS_HORIZON_TTL and ROCKETEERS_HORIZON_ORIGIN if defaults don't fit your polling cadence or ingress layout.403 (signature/secret/skew) versus 404 (Horizon absent) versus 5xx (Horizon/Redis unhealthy) as distinct signals.Compatibility
illuminate/support ^13.0 was already declared. The only dependency movement is the dev-time testbench bump to 11.x, which does not affect runtime.Sequencing
Maintenance
ROCKETEERS_HORIZON_SECRET is set, who can read it, and how it gets rotated if the environment is rebuilt or the value is suspected exposed.Support
403 = signature invalid/expired/secret mismatch/skew; 404 = Horizon not installed; 5xx = Horizon or Redis unhealthy. That is unusually clean triage for a package route and should be documented in the runbook.Scaling
Failure modes
403; dashboard stays empty with no obvious cause in the app logs unless the 403s are surfaced.403s that correlate with one host, which is a classic misleading symptom.5xx; monitoring widget fails at exactly the moment it's most wanted. Treat dashboard availability as non-critical and don't alert on it.404, no noise. Acceptable.Ramp-up
Assessment: upgrade. Additive, low-risk, fail-closed by default, and it closes a real gap by actually testing Laravel 13. The gating items are procedural, not technical: confirm the HMAC secret is genuinely high-entropy and rotatable, confirm throttling applies outside the web group, and make a deliberate decision about keeping or retiring the broader 2.9.0 bearer access before turning the endpoint on in production.
How can I help you explore Laravel packages today?