Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Healthcheck Laravel Package

zanichelli/healthcheck

A configurable health-check endpoint for Laravel applications. It runs registered checks and returns a clear JSON status, helping load balancers, uptime monitors, and deployment tools verify that your service and its dependencies are healthy.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged. zanichelli/health-check remains a conventional Laravel package — service provider plus a route returning a health/status payload — serving as both an operational probe target and an explicit "security target" (a deliberately minimal surface satisfying scanner/edge requirements without exposing the app). No queue driver, no custom cache store, no event bus. The caveat stands: "security target" implies the payload may echo environment, driver, build, or version metadata, and that body must be audited before the route is reachable beyond the cluster, because a health endpoint is precisely what an attacker fingerprints first.

Integration feasibility. High and now slightly better evidenced. Standard composer require, config publish, route registration; a competent Laravel engineer gets a working probe in under a day locally and into staging within a sprint. No data migration, no schema ownership, no auth model to reconcile. The integration is a routing and configuration decision backed by a middleware choice (public, internal-only, or token-gated). v1.1.7 is, on the release notes, a dependency-constraint change only — the lowest-risk category of release — but the diff (composer.json constraints, CI matrix, any lockfile churn) should be read directly rather than trusting the summary line.

Technical risk. The dominant risk was social, and v1.1.7 materially improves — though does not eliminate — that picture. Positive signals: (1) the package is actively maintained and tracking upstream framework releases rather than frozen; (2) a second contributor (@francesco-santi-1) has been onboarded, marginally reducing single-maintainer bus factor; (3) the release demonstrates the author responds to the Laravel release cadence, which is the specific drift scenario we flagged. Residual risks: still 4 stars, still zero dependents on Packagist, so we remain among the first external consumers with no ecosystem evidence of version-constraint conflicts or downstream patterns. The earlier future-dated last-release flag (2026-05-28) should be re-checked against the registry now that a newer tag exists — if the dates still read as implausible, treat Packagist metadata for this package as unreliable and read GitHub tags directly. Note also a semver-hygiene observation: adding support for a new major framework line shipped as a patch (1.1.7), not a minor. That is benign if the change is purely additive constraint-widening, but it means consumers on caret ranges get a Laravel-13-supporting build silently — we should confirm the widening did not drop a lower bound we depend on. Secondary risks are unchanged: unauthenticated information disclosure, per-request dependency checks adding load under frequent probing, and ambiguous liveness/readiness semantics.

Key questions.

  • Does v1.1.7 widen the illuminate/* constraint (^10|^11|^12|^13) or replace the upper bound, and is our current Laravel line still inside it?
  • Was anything other than Composer constraints and CI config touched in the diff — any behavioural change hidden inside a patch bump?
  • Which dependencies does the check actually exercise (DB, Redis, queue, disk, outbound HTTP), and does each failure map to a non-200 status?
  • Can liveness and readiness be expressed as separate endpoints, and is there a --light/cached mode for high-frequency k8s probes?
  • What exactly is returned in the body, and can the response be filtered to a bare {"status":"ok"} in production?
  • Who is on the hook for a CVE, and does the second contributor change the maintenance commitment or merely the commit count?
  • What is the license posture for forking (MIT — good) and do we have the appetite to vendor a fork if upstream goes quiet?

Integration Approach

Stack fit. Unchanged. Suitable for any Laravel monolith or service on a supported PHP 8.x line, and now explicitly positioned for Laravel 13. It slots alongside existing observability tooling (Sentry, Prometheus exporters, k8s probes) as the probe contract, not the monitoring platform. In a multi-framework estate, maintain a parallel health convention elsewhere; do not let this package become the reason the org standardises on Laravel health semantics.

Migration path. Unchanged. Run the package endpoint in parallel on a distinct path (e.g. /healthz-pkg) behind a feature flag for one full release cycle, diff responses against the incumbent /health or /up, then cut the k8s probe over — a one-line rollback. Retire the legacy route the following sprint once probe history is clean.

Compatibility. This is where v1.1.7 changes the work. Verify four things before committing: (1) the illuminate/* constraint in composer.json at the new tag, checking both the floor and ceiling against our Laravel baseline — and confirming the Laravel 13 addition did not raise the floor past us; (2) whether the service provider auto-registers or requires manual registration (config-cache behaviour); (3) whether any transitive dependency duplicates something already in the tree; (4) whether the release required a PHP floor bump, which would be a real (and possibly silent) breaking change for older services. With zero dependents there is still no community-confirmed compatibility matrix — we produce that evidence ourselves, so keep the spike branch and record the result in the ADR.

Sequencing.

  1. Diff v1.1.6 → v1.1.7 and read it end-to-end; classify as constraint-only or behavioural. Escalate to full re-review if anything outside composer.json/CI changed.
  2. Spike in a throwaway branch against our target Laravel version; enumerate every check and every response field.
  3. Security review of the payload; decide public vs. internal-only vs. token-gated, and whether the body needs redaction in production.
  4. Deploy to staging; wire k8s liveness/readiness probes and observe behaviour under a deliberately failing dependency (kill Redis, revoke a DB grant).
  5. Pin the exact version in composer.json (note: pinning means we must explicitly take 1.1.7 — it will not arrive via a caret range), enable Dependabot/Renovate, add the endpoint to the runbook.
  6. Production cut-over behind the flag; monitor probe success rate and pod restart count for a week before removing the flag.

Operational Impact

Maintenance. Low volume, non-zero ownership, and the ownership case is now better supported: an active release tracking a current framework major is exactly the signal we wanted, and a second contributor gives a plausible handover path. That said, the operational posture does not change — pin to an exact version rather than a caret range, because a solo/small-maintainer package is where a surprise patch (as this one arguably is) is least welcome. Keep the fork option warm: MIT grants it and the code surface is small enough that a fork is hours, not weeks. v1.1.7 modestly lowers the probability we exercise that option; it does not remove the need to be able to.

Support. Still no SLA, no vendor, no commercial backing; escalation remains "open a GitHub issue with an Italian publishing house," now with a slightly better observed response rate. Acceptable for a health endpoint — the blast radius of a bug is a wrong probe signal, not data loss — but it must be documented in the dependency register with a named owner and a review date. If policy mandates a supported-vendor posture for anything on the request path, this still fails that test and should be reimplemented in-house (roughly 100 lines).

Scaling. Unchanged and unrelated to the release. Cost scales with probe frequency, not user traffic. Kubernetes defaults can hit a health endpoint every few seconds per pod; if the package performs live DB/Redis round-trips per call, a large fleet generates meaningful background load and couples probe latency to datastore latency. Prefer shallow liveness plus less frequent, deeper readiness, and confirm the package supports that split. During a datastore incident, deep checks fail en masse and can cascade into pod restarts — the wrong behaviour during an outage the app might otherwise survive.

Failure modes. Four to plan for: (1) information disclosure — a public endpoint leaking versions, drivers, or env values; mitigate with network policy or response redaction. (2) False negatives — transient dependency blips flapping the probe and triggering restart loops; mitigate with thresholds and shallow liveness. (3) False positives — a green probe while the app is functionally broken (queue backed up, writes failing); accept and cover with real SLO alerting, not the probe. (4) Silent abandonment — upstream goes dormant and our pinned version drifts from the Laravel baseline until it blocks a framework upgrade; mitigated for now by v1.1.7, but keep a scheduled dependency review and a pre-agreed fork trigger, since one release does not establish a cadence.

Ramp-up. Unchanged for engineers — small, conventional, readable in an hour; v1.1.7 adds nothing to learn. The real ramp-up cost stays organisational: security sign-off on the payload, agreeing probe semantics with the platform team, and writing the runbook entry. Budget roughly one engineer-day of technical integration plus two to three days elapsed for review and staging observation — with a small addition for re-running the compatibility spike at the new tag. Net TPM position is unchanged but slightly more comfortable: this release is a genuine maintenance signal and removes the "will it block our next Laravel upgrade?" objection for one cycle; it does not convert the package into a strategic dependency, and it should still be adopted only if the in-house alternative is genuinely more expensive.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log