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

Laravel Version Endpoint Laravel Package

woweb/laravel-version-endpoint

woweb/laravel-version-endpoint adds a simple, configurable version endpoint to Laravel apps, making it easy to expose your application's current version for monitoring, deployment checks, and client integrations without writing custom routes.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. laravel-version-endpoint is a single-purpose Laravel package: it registers one route, verifies a request signature, and returns version/build metadata behind a throttle. It sits entirely within Laravel's native router, exception handler, cache store, and rate limiter — no new infrastructure, no custom transport, no queue or scheduler surface. It fits any Laravel application that needs an authenticated "what version is deployed here" probe, most naturally for deploy verification, canary checks, or internal status dashboards. It is not a general-purpose health-check or observability package, and should not be adopted as one.

Integration feasibility. Low. The expected path is a Composer require, a published config file, a shared secret in the environment, and a throttle value. v0.2.1 explicitly states no configuration changes are needed relative to v0.2.0, so upgrade cost for existing adopters is a version bump and a regression pass. New adopters need only document the signing algorithm for the clients that will call the endpoint.

Technical risk. The release is a hardening release, and three of its changes matter to a TPM:

  • Signature verification now precedes the rate limiter. This closes a real abuse vector: unsigned traffic previously consumed rate-limit budget and cache writes, and could exhaust the allowance of a legitimate signed caller sharing a client address. That is a denial-of-service path against the very endpoint meant to be trustworthy. This is the strongest reason to take the update.
  • Unsigned requests now render the router's own 404. The endpoint becomes indistinguishable from a missing path for unsigned traffic. This is deliberate information-hiding, but it is also a behavioral change: any client, monitor, or alert rule that keyed on the previous empty-message response, or on 401/403/405, will now see 404 and may misclassify. Confirm no consumer depends on the old status or body.
  • Route registered for all router-known methods, with non-signed GET/HEAD answering 404. This removes the previous 200-with-Allow and 405 responses.

Two residual risks are disclosed by the maintainer and should be recorded rather than dismissed. First, a method outside the router's known set still returns 405, which reveals that the route exists — a narrow inconsistency with the 404-masking intent. Second, in applications with their own fallback route, a missing path is handled by that route while an unsigned request to this endpoint gets the exception handler's 404, so the two can answer differently per method. The payload remains signature-protected in both cases, so this is a consistency and information-disclosure concern, not a data-exposure one.

The package is pre-1.0. Semver does not protect you: minor bumps may carry behavioral changes like the ones above.

Key questions.

  • Which signing scheme is used (HMAC-SHA256 over what canonical string), and does the signed payload include a timestamp or nonce for replay protection?
  • What is the secret rotation story, and can two secrets be valid concurrently during rotation?
  • What are the supported PHP and Laravel version constraints, and is there a CI matrix?
  • How is client address resolved for throttling — does it honor TrustProxies, and what happens behind a load balancer?
  • Does the package log signature failures, and at what level?
  • Is the throttle counter shared across nodes (Redis/memcached) or per-node?
  • What does the endpoint actually expose, and could version strings be considered sensitive in this environment?
  • Bus factor: single maintainer? Is the implementation small enough to vendor or reimplement if abandoned?

Integration Approach

Stack fit. Uses only first-party Laravel contracts — router, exception handler, cache store, rate limiter. No published assets, no database migrations, no service-provider ordering hazards called out in the notes. That means it composes cleanly with existing middleware stacks and does not compete with application routing.

Migration path. For current v0.2.0 adopters: bump the constraint, deploy to staging, and diff the response for four cases — signed GET, signed HEAD, unsigned GET, and an unknown method. Confirm no alerting or synthetic check keys on the old empty-message body or on 401/403/405. No config edit is required. For new adopters: install, publish config, set the secret and throttle via environment, and add the endpoint to your deploy verification script.

Compatibility. The main compatibility hazard is client-side, not server-side. Any consumer that treated "unsigned" as a distinguishable error now sees the same 404 as a genuinely missing route. That is the intended design, but it means the endpoint can no longer be used to confirm its own existence without a valid signature. Also verify framework version support before upgrading the application's Laravel major — a pre-1.0 package may lag new framework releases.

Sequencing.

  1. Pin the current version and capture baseline responses for all four cases.
  2. Upgrade in a non-production environment; re-capture and diff.
  3. Exercise the fallback-route interaction explicitly if the application defines one — this is the disclosed edge case most likely to surprise.
  4. Validate throttle behavior with a signed caller and confirm unsigned traffic neither receives rate-limit headers nor consumes allowance.
  5. Roll to production behind the normal change process; update the runbook and the client-side signing documentation.
  6. Keep a rollback pin to v0.2.0 available, though the security direction of the change argues against extended rollback.

Operational Impact

Maintenance. Small surface area: one route, one signature check, one throttle. Maintenance burden is dominated by tracking upstream releases and re-validating behavior on each bump, not by code ownership. Pin to an exact or tilde range and read every changelog — the 0.x line has already demonstrated that patch releases can change response semantics.

Support. Community open-source with an apparent single-maintainer profile. Treat the package as a dependency with a real abandonment scenario. Mitigation is cheap: the logic is a signed route plus an HMAC comparison, so an in-house reimplementation is a few hours of work if the package stalls. Document the signing algorithm internally so a replacement can be built without reverse-engineering.

Scaling. Negligible CPU and memory footprint at expected call volumes — this is a low-QPS endpoint by design. Two scaling caveats: the throttle counter must live in a shared cache store (Redis or similar) if the application runs multiple nodes, otherwise limits are effectively multiplied by node count; and because signature verification now runs before the limiter, unauthenticated requests reach HMAC verification unthrottled. HMAC is cheap, but if the endpoint is internet-reachable, confirm that upstream WAF or edge rate limiting covers it.

Failure modes.

  • Secret misconfiguration or drift between deployer and endpoint — every request returns 404, silently, with no distinguishing signal. This is the highest-probability operational failure and the hardest to diagnose, because the failure is intentionally disguised as "route not found." Add a deploy-time assertion that a signed self-check succeeds before declaring a release healthy.
  • Cache store unavailable — throttle behavior degrades; confirm whether the limiter fails open or closed.
  • Fallback-route divergence — inconsistent 404 semantics across methods in applications with a catch-all route; may confuse synthetic monitors that probe multiple paths.
  • Method-based disclosure — 405 for unknown methods still confirms the route exists, partially undercutting the 404 masking.
  • Client breakage on upgrade — consumers keyed to prior status codes or bodies misinterpret 404 as an outage.

Ramp-up. Low, on the order of hours for an engineer already fluent in Laravel routing and middleware. The real ramp-up cost sits with the consuming teams: whoever writes the deploy check or dashboard must implement the signature correctly and must understand that 404 means "unsigned or absent," not "broken." Budget a short written spec and a shared test fixture rather than assuming the endpoint is self-explanatory.

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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource