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.
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:
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.
TrustProxies, and what happens behind a load balancer?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.
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.
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.
How can I help you explore Laravel packages today?