andrey-helldar/strong-password
A Laravel/PHP package for generating and validating strong passwords. It provides customizable strength checks and a Laravel validation rule to help developers enforce safer credentials, reject weak passwords, and improve account security with minimal setup. Designed for easy integration into forms...
Architecture fit
The package is a single, stateless validation rule — no service provider logic, no migrations, no config surface, no persistence, no I/O. Architecturally it imposes essentially zero footprint, which is why it "fits" any Laravel codebase: there is nothing to fit. That is also the core TPM finding — the capability it provides is roughly one class and one regex, and since Laravel 8 the framework ships Illuminate\Validation\Rules\Password (with min(), mixedCase(), numbers(), symbols(), uncompromised()) plus Password::defaults() for application-wide policy. The package is functionally superseded by the platform.
Integration feasibility
Installation is a Composer require and a string in a validation array; any Laravel developer can wire it into a form request, controller, or Validator::make() in minutes. The blocker is not effort, it is provenance: the repo is archived and the last release is 2020-12-30, meaning it predates Laravel 9, 10, and 11. Custom rules must implement Illuminate\Contracts\Validation\ValidationRule to be idiomatic on Laravel 10+, and the older Rule contract has been deprecated. Whether this package's rule satisfies that contract is unverified and must be confirmed by reading the source, not the README.
Technical risk
uncompromised()), so adopting it may move us away from current best practice.Key questions
ValidationRule or the legacy Rule — and does it type-hint cleanly under PHP 8.2/8.3?Given the score (0.04) and the archived status, the appropriate disposition is: treat the repository as reference source to read and reimplement, not as a dependency to adopt.
Stack fit Good fit for Laravel 6/7/8-era applications. Unverified and probably broken for Laravel 10/11. It is stack-compatible in shape but not in version support — the two must not be conflated.
Migration path (recommended: reimplement, don't adopt)
Password::min(N)->mixedCase()->numbers()->symbols()->uncompromised(). Existing validation strings ('password' => 'strong_password') keep working; the implementation underneath becomes framework-maintained.Password::defaults([...]) in a service provider so registration, reset, and change-password flows inherit one definition, and so policy changes are one deploy of one config value — not a dependency bump.If for some reason the native rule is insufficient (e.g. legacy Laravel 6/7 with no Password rule), write a ~20-line first-party ValidationRule implementing the policy directly. The cost is comparable to evaluating and vendoring this package, and the ownership outcome is strictly better.
Compatibility
Inspect composer.json require constraints before anything else — if laravel/framework is capped at ^8.0 or php at ^7.x, installation on a modern app requires --ignore-platform-reqs, which is a hard stop. Verify whether the rule relies on Illuminate\Support\Str helpers or deprecated array/string helpers removed in Laravel 9+.
Sequencing
Password rule is available.Password::defaults(), with unit and integration tests.Maintenance If adopted: full internal ownership of an archived package — effectively a permanent fork. Budget is small per-incident but unbounded in duration, and it competes with framework upgrades, which is precisely when it will break. If reimplemented on the native rule: near-zero, inherited from Laravel's release cadence.
Support No upstream support channel, no responsive maintainer, 17 stars implying no community knowledge base. Any issue becomes an internal debugging exercise. Documentation is a README; there is no upgrade guide, changelog discipline, or security disclosure process. For a security-relevant component this is a governance gap, not just an inconvenience.
Scaling
Runtime cost is negligible: one stateless regex evaluation per validation call, no network, no cache, no DB. It scales trivially and will never be a bottleneck. Note the asymmetry: if we add breach checking (uncompromised()), we introduce an outbound HTTP call to HIBP into the registration/login hot path — that is the real scaling and availability consideration, and it argues for the native rule with its built-in caching/k-anonymity handling rather than a hand-rolled call.
Failure modes
Ramp-up Effectively zero for any Laravel developer — the concept is a validation rule, and the README is sufficient. That low ramp-up is the trap: it makes adoption feel free while the ownership cost is deferred to the first framework upgrade. The reimplementation path has the same near-zero ramp-up with none of the deferred cost.
How can I help you explore Laravel packages today?