symplify/coding-standard
Symplify Coding Standard provides 23 fixer rules for clean, consistent PHP code, covering array formatting, line length, and strict types. It works best with Easy Coding Standard but is deprecated in favor of using ECS directly.
Verdict: Do not adopt for new Laravel work. If already in the tree, freeze and schedule an exit. This is an archived, self-deprecated rule set (23 fixers) that only runs as an input to ECS, in a market where Laravel ships Pint as the default formatter. The package's own README redirects users to ECS, and the repository is archived — so any value here is time-boxed and the ownership burden transfers entirely to us.
Architecture fit
AbstractFixer subclasses, not Laravel-aware tooling. They know nothing about Blade, Eloquent conventions, Artisan, or Laravel's own style baseline. Value is generic PSR-adjacent hygiene: array/argument line breaking, method-chain newlines, constructor promoted-property layout, and ten narrow docblock @param/@return/@var normalizers.symplify/easy-coding-standard (also deprecated) as the runner. That is a second archived dependency in the dev chain, and ECS is a competitor to Pint/PHP-CS-Fixer's native CLI rather than a complement.pint in CI, composer cs script, pre-commit hook) is poor: Pint cannot load ECS config, and ECS cannot consume pint.json. Adopting this means running two formatters over one codebase — a direct source of rule conflicts and non-deterministic --fix output.StandaloneLinePromotedPropertyFixer, RemoveUselessDefaultCommentFixer) are individually useful but are not worth an entire parallel toolchain.Integration feasibility
composer require --dev, one ecs.php with ->withPreparedSets(symplify: true), run vendor/bin/ecs --fix. Half a day end to end on a mid-size app.composer update. Many hardened CI pipelines and dependency-review bots treat abandoned transitives as a finding to justify.--fix run against an existing Laravel codebase will rewrite arrays, chained calls, and constructor signatures repo-wide. That is a large, low-signal diff landing on top of in-flight feature branches.RemoveSuperfluousVarNameFixer, SwitchedTypeAndNameFixer, and RemoveDeadParamFixer can silently change what static analysis infers — a behavioural risk disguised as a formatting change.Technical risk
--fix on unparseable tokens is how you get corrupted source.git blame on the exact files engineers are actively debugging; without .git-blame-ignore-revs this is a lasting productivity drag.Key questions to answer before any decision
composer.json on any repo we own? If yes, which PHP versions and which Pint version are in play, and are they conflicting today?composer audit/dependency-review policy?@var/@param annotations for Larastan narrowing? If so, which of the ten docblock fixers are safe against our baseline?Stack fit
vendor/bin/pint, pint.json). Anything we standardise should land there. This package has no path into Pint: Pint exposes only built-in PHP-CS-Fixer rules and has no plugin API for custom fixers.AbstractFixer, so they register with $config->registerCustomFixers()), not ECS. That keeps one runner in the repo.Migration path
composer require --dev symplify/coding-standard:13.1.1 symplify/easy-coding-standard:<exact>), do not run composer update on the dev toolchain without review, and add a SECURITY.md note recording the frozen-toolchain exception and its expiry date.pint.json as a built-in rule or a vendored custom fixer) or "drop" (accept Pint's default). This yields a small, defensible rule set rather than a wholesale port.tools/coding-standard package, keep MIT attribution, register via PHP-CS-Fixer. This converts an abandoned dependency into owned code with a known blast radius.Compatibility
pint.json rules we've already committed to (method chaining, array formatting, declare(strict_types=1) spacing are the likely flashpoints).larastan, phpunit, laravel/pint) — abandoned packages are a frequent cause of unsatisfiable dev constraints on the next framework major.ecs --fix exit code zero.Sequencing
grep every composer.json for symplify/ and every ecs.php in the org..git-blame-ignore-revs.--dry-run / pint --test) before enabling --fix locally or in hooks.composer.json, in a separate PR from the formatting commit.Maintenance
Support
composer update and break the build.Scaling
Failure modes
@var/@param that Larastan relies on, degrading static analysis without failing tests. Highest-severity, lowest-visibility failure.--fix has no rollback; recovery is git checkout.--fix landing while branches are open; measurable rework, usually underestimated.Ramp-up
.git-blame-ignore-revs, and a short team note.How can I help you explore Laravel packages today?