boesing/psalm-plugin-stringf
A Psalm plugin that statically validates printf and sprintf format strings, checking that placeholders match the number and types of arguments passed. Mismatches are caught during analysis instead of at runtime, using Psalm's type inference to verify format specifiers across your codebase.
Architecture fit: This is a development-time Psalm plugin, not a Laravel runtime package. It belongs in the static-analysis/CI quality layer and should be isolated as a require-dev dependency. It has no service provider, facade, runtime middleware, or production architecture impact. Its value is narrow: improving Psalm’s understanding of sprintf, printf, sscanf, and fscanf format strings, which can catch placeholder/type mismatches before runtime.
Integration feasibility: Feasible only where the team already standardizes on Psalm. Integration is likely a Composer dev dependency plus Psalm configuration and CI execution. It is not a good reason to introduce Psalm into a Laravel codebase, especially where PHPStan/Larastan is already the standard. Laravel itself does not require this plugin, and most Laravel quality gates will not benefit unless Psalm is already part of the toolchain.
Technical risk: Runtime risk is low because this should never ship to production. Governance and lifecycle risk is medium-to-high: only 12 stars, last release in December 2022, repository metadata is unknown, and the license is reported as NOASSERTION. That license ambiguity is a hard gate for adoption until legal/procurement clears it. Additional risk comes from coupling to Psalm’s plugin API: Psalm upgrades may break the plugin, and stale plugins can create false positives that block CI or false confidence if misconfigured.
Key questions:
sprintf/printf/sscanf/fscanf, or is the benefit theoretical?Stack fit: Best fit is a PHP/Laravel repository already running Psalm in CI. Poor fit is a Laravel team standardized on PHPStan/Larastan, because adding Psalm solely for this plugin increases toolchain surface area for a narrow rule set. The plugin should be scoped to require-dev, excluded from production builds, and run in a dedicated static-analysis job rather than application deployment.
Migration path: There is no migration path from PHPStan to this plugin. If Psalm is already present, the path is incremental: add as a dev dependency, enable in psalm.xml, run against a baseline, triage new findings, then enforce in CI. If Psalm is not present, do not migrate for this package alone; evaluate broader Psalm adoption separately or seek an equivalent PHPStan rule.
Compatibility: Confirm compatibility against the team’s PHP matrix, Psalm major/minor versions, Composer version, and CI image. Pin the plugin and Psalm versions together, and treat Psalm upgrades as requiring a plugin compatibility check. Laravel version compatibility is largely irrelevant because this is not Laravel-coupled, but the package’s age means modern PHP/Psalm combinations must be explicitly tested.
Sequencing:
Maintenance: Low runtime maintenance, but non-zero toolchain maintenance. The plugin is stale relative to current PHP/Psalm releases, so the team may need to pin Psalm or patch/fork the plugin. Because the repository is unknown and the license is unclear, maintenance ownership cannot be assumed to sit with an active upstream. A TPM should require an internal owner if adopted.
Support: Community-only support is likely. There is no evidence of vendor backing, SLA, or broad adoption. Support burden will fall on the platform/quality engineering team, primarily during Psalm upgrades and CI failures. Legal support is also required before adoption because NOASSERTION is not an approved license state for most organizations.
Scaling: Operationally cheap to scale across repositories if Psalm is already standardized: one dev dependency and one CI step per repo. It does not scale as a cross-team standard if some teams use PHPStan and others use Psalm, because that creates duplicate quality-gate logic and inconsistent findings. Keep it as an optional Psalm enhancement, not a platform-wide mandate.
Failure modes:
Ramp-up: Low for teams already fluent in Psalm: configuration and triage are straightforward. Moderate for Laravel teams standardized on PHPStan/Larastan: they must learn Psalm, manage a second analyzer, and reconcile overlapping findings. Given the low adoption signals, stale release, and license ambiguity, the TPM recommendation is a gated pilot only where Psalm already exists; otherwise defer and seek an equivalent rule in the existing static-analysis stack.
How can I help you explore Laravel packages today?