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

Health Check Bundle Laravel Package

kiora/health-check-bundle

A health check bundle for Symfony/PHP applications that exposes a monitoring endpoint and runs configurable checks to report service status, helping integrate with load balancers, uptime monitors, and container probes.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The -bundle suffix, the repository name, and the release contents (compiler-pass-era conventions, Symfony-idiomatic health check abstraction) confirm this remains a Symfony bundle, not a Laravel package. v1.1.0 adds no service provider, facade, or publishable config/health-check.php. The Laravel ergonomics gap is unchanged.
  • The value proposition is now materially better specified. /ping (lightweight liveness) and /ready (Kubernetes readiness) are exactly the two endpoints a platform team would otherwise hand-roll. Health check groups plus multiple database connection support show the maintainer is designing for real deployments rather than a demo.
  • Architecture fit verdict is unchanged in shape but improved in confidence: for a mixed PHP estate this is a credible standard health surface; for a Laravel-only estate it remains a conceptual mismatch.

Integration feasibility

  • Still adaptation, not adoption for Laravel. Effort is unchanged: service provider, route registration, config loader. The glue-to-value ratio improves only marginally because you now have a cleaner contract (/ping, /ready, groups) to target — you are aiming at a better-specified moving part, not a smaller one.
  • The portability question is still unanswered in the release notes. PR #18 ("factory methods on AbstractHealthCheck") and #22 (PHPStan level 9, quality badges) are weak positive signals — factory methods on an abstract base class suggest check construction is at least partially centralized, and strict static analysis tends to correlate with defensible interfaces — but neither confirms PSR-only dependencies.
  • MIT license still removes legal friction for vendoring or forking the check implementations. This remains the only integration path I would fund.

Technical risk

  • Reduced from High to Moderate-High, but not resolved. The maturity ceiling that drove the original rating has genuinely moved: CI/CD workflows (#11), continuous static analysis at PHPStan level 9 (#22), a SECURITY policy, CONTRIBUTING, and a CODE_OF_CONDUCT (#10). Those are the artifacts of a project being run deliberately rather than a one-off push. That is a real signal and should be credited.
  • Third-party validation is still zero. One star, no dependents, no reported production use. CI proves the code compiles and passes its own tests; it does not prove the tests are meaningful. Coverage is not stated.
  • Bus factor is still 1, and the release notes reinforce it rather than reassure. Every PR in v1.1.0 is authored by @james2001, and the auto-generated "New Contributors" line is an artifact of that account being new to the repo — not evidence of a widening contributor base. A twelve-PR release from a single author is a burst of activity, not a cadence. One release is still one data point.
  • Blast radius remains contained: read-only, non-transactional endpoints. A failed integration degrades observability, not the application. This still justifies a time-boxed spike.
  • New, mild risk introduced by this release: the scope of the package grew substantially in one version (groups, multi-connection, performance stats, caching, two new endpoints, an internal refactor). Surface area expanded faster than external validation did. Expect the next few releases to be stabilization, and pin accordingly.

Key questions for the maintainer / spike

  1. Is this Symfony-only, or are the check classes framework-agnostic? Still unanswered — now the single highest-value question.
  2. Liveness vs. readiness — answered. /ping and /ready exist, and health check groups imply checks can be partitioned across them. Confirm in source how a check is assigned to a group.
  3. What is the response contract — HTTP status semantics, JSON schema, and behavior on partial failure (degraded vs. down)? Partly addressed: performance statistics (#20) imply a richer payload, but the schema and status semantics are still undocumented. Ask explicitly.
  4. Are per-check timeouts enforced? Still unanswered, and still the most common cause of health-endpoint incidents.
  5. Is the endpoint authenticated or restrictable by IP/network policy? Still unanswered, and still a network-exposure precondition.
  6. CI/test coverage — partly answered. CI exists (#11); PHPStan level 9 is enforced. Ask for line coverage and the PHP/Symfony version matrix actually exercised in CI.
  7. Caching/throttling — partly answered. #17 adds an in-memory cache preventing double execution within a request. That is deduplication, not cross-request throttling. Repeated orchestrator polling still hits dependencies every cycle. Ask whether a TTL cache exists or is planned.

Integration Approach

Stack fit

  • Laravel-primary teams: do not adopt. Unchanged. spatie/laravel-health or a small internal /healthz controller still wins on maintained dependency plus native ergonomics. The now-better-specified contract does not offset the glue burden.
  • Symfony-primary teams: this is now a recommended candidate. /ping + /ready + groups + CI + level 9 static analysis is a meaningfully stronger proposition than v1.0.0, and it solves a tedious problem in the framework's own idiom.
  • Mixed estates: still the strongest case, and strengthened by the group and multi-connection work. Use it to standardize the health contract, wrapping Laravel services with a thin internal bridge that emits the same JSON schema — a schema you can now derive from a more complete implementation.

Migration path

  • Retain the half-day source read as the gate, but the read is now cheaper because CI and static analysis give you a working build you can trust to run. Focus the read on the two open questions: container coupling, and timeout enforcement.
  • If checks are portable: vendor or fork into an internal acme/health-checks package under MIT, expose through your own Laravel provider and Symfony compiler pass. The post-#18 refactor makes this fork slightly easier to maintain than it would have been at v1.0.0.
  • If checks are container-coupled: accept the Symfony-only footprint (sidecar or separate service) or discard and reimplement. Do not bend Symfony DI into Laravel's container.
  • No migration off this package is required — still greenfield, no existing dependents.

Compatibility

  • Composer will install almost anything; that is not compatibility. The PHPStan level 9 upgrade is a soft signal that the code targets modern PHP, but pin the PHP and Symfony constraints explicitly against your runtime matrix before the spike.
  • The addition of CI raises confidence that the declared constraints are at least partly exercised. It does not create a compatibility guarantee for Laravel — unofficial glue remains unprotected against minor framework releases.
  • Pin to 1.1.x exactly for the initial rollout. Given the volume of change in this single version, a ^ range would pull in a stabilization release you have not evaluated.

Sequencing

  1. Spike (1 day): source review focused on container coupling and timeout enforcement; answer questions 1, 3, 4, 5.
  2. Decision gate: adopt / vendor / build. Default to build for Laravel-only teams. For Symfony or mixed estates, the default now flips to vendor, provided the spike confirms timeouts and a stable response schema.
  3. Internal package with owned tests and a documented JSON contract.
  4. Roll out to one non-critical service, observe for two weeks, then standardize.

Operational Impact

Maintenance

  • Assume you are the maintainer. Budget 1–2 engineer-days per quarter for dependency drift and PHP/Symfony upgrades, plus initial fork overhead. The level 9 static analysis and CI lower the cost of your fork maintenance slightly, since upstream regressions surface in their pipeline rather than yours — but only if you are tracking upstream, which you should not assume.
  • Pin the version explicitly and avoid ^ ranges. The 12-PR, 2-endpoint, multi-feature jump from v1.0.0 to v1.1.0 is a scope-velocity signal: pinning protects you from stabilization churn.

Support

  • GitHub issues only, single maintainer, unknown response time. The new SECURITY.md gives you a disclosure channel, which is a genuine improvement — a vulnerability now has somewhere to go. It does not give you an escalation path or an SLA.
  • Treat upstream as a code reference, not a support channel. Internal ownership must still be assigned by name before adoption; that remains the gating operational decision.

Scaling

  • The /ping / /ready split is the most operationally consequential change in this release. Routing cheap liveness to /ping and dependency probes to /ready lets you set aggressive liveness intervals and conservative readiness intervals — the correct configuration, and one this package now makes possible.
  • Deep probes are still amplified by orchestration polling: N pods × every 5–10 seconds. The in-memory cache (#17) removes duplicate execution within a request only. There is no cross-request TTL, so every poll still executes the full check set. Mitigate in your glue: per-check timeouts, short-TTL result caching in your own layer, and conservative readiness intervals.
  • RedisHealthCheck persistent connection reuse (#19) is a real efficiency gain under polling load and reduces connection churn on the most frequently probed backing service.

Failure modes

  • Cascading restarts — partially mitigated. The /ping vs /ready separation is exactly the design lever that prevents readiness flaps from restarting healthy pods, provided you wire liveness to /ping and readiness to /ready, and provided check groups are partitioned correctly. If you point liveness at a deep-probing endpoint, the original highest-severity risk returns in full. This is now a configuration responsibility rather than an inherent package flaw — which means it must be documented and reviewed, not assumed.
  • Hung requests: per-check timeouts are still unconfirmed. Missing timeouts can exhaust PHP-FPM workers under a single slow dependency. Verify in source; enforce in your glue if absent.
  • Information disclosure: unauthenticated endpoints enumerating dependencies, versions, and internal hostnames remain reconnaissance material. Performance statistics (#20) add timing data to the payload, marginally widening the disclosure surface. Restrict at the network layer.
  • Inconsistent error handling: unhandled check exceptions returning raw 500s instead of structured degraded JSON still break alerting and dashboards. With groups now in play, define what a partially-degraded group returns before rollout.
  • Scope-velocity drift: a single release added two endpoints, groups, multi-connection support, caching, metrics, and a base-class refactor. Behavior in untested combinations of these features is unverified. Keep the initial rollout to one simple configuration.
  • Silent staleness: unchanged. Pin and monitor upstream release metadata out-of-band.

Ramp-up

  • Consumer ramp-up is trivial and slightly better documented now: an endpoint pair, a group definition, a few lines of orchestrator config.
  • Maintainer ramp-up is moderate: Symfony container and compiler-pass familiarity, plus ownership of a fork. The cleaner abstractions and enforced static analysis reduce the cost of understanding the codebase. Plan for knowledge to sit with one or two engineers, and document the internal fork deliberately.

Bottom line for the TPM: v1.1.0 is a substantial and genuinely de-risking release — CI, enforced static analysis, a security policy, and the liveness/readiness split move this from "unvalidated single-release project" to "actively maintained small project with credible engineering hygiene." It is still a single-maintainer, zero-dependent package with no third-party production validation, no confirmed timeouts, and no documented response schema. For Symfony or mixed estates, the recommendation flips from build to vendor, contingent on the spike confirming timeouts and schema. For Laravel-only estates, the recommendation does not change — build the thin internal endpoint, because you would own the glue either way and the glue is the larger artifact.

Change log for this revision: raised maturity rating; promoted /ping+/ready and groups from open question to resolved capability; downgraded cascading-restart risk from inherent to configuration-dependent; added scope-velocity risk; strengthened pinning guidance; adjusted maintainer effort estimate downward slightly.

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.
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle