jrmajor/cs
jrmajor/cs is an opinionated coding standard package for PHP projects, bundling PHP-CS-Fixer rules and presets so you can enforce consistent code style across your codebase with minimal configuration and a single install.
Architecture fit. jrmajor/cs is a developer-tooling package, not application runtime code. It belongs to the class of Composer require-dev dependencies that configure or bundle a code-style engine (PHP-CS-Fixer rulesets, presets, or a thin wrapper). For a Laravel/PHP codebase this is architecturally low-risk: it never enters the production autoload path, has no database, queue, HTTP, or container-boot surface, and cannot alter request handling. The correct mental model for a TPM is build-tooling supply chain, not service dependency. It competes for the same slot as Laravel Pint, PHP_CodeSniffer + Slevomat, or a hand-rolled .php-cs-fixer.dist.php. Because the package has 2 stars and 0 dependents, it should be evaluated as an internal convention asset with an external maintainer, not as a supported ecosystem component.
Integration feasibility. Mechanically simple — a single Composer line and a config file, plus wiring into CI and pre-commit hooks. The real feasibility question is authority: a coding-standards package is a normative statement about how your team writes PHP. Adopting a third-party ruleset means accepting someone else's opinions on strict types, array syntax, ordering, and docblocks, and then defending it in review. Feasibility is therefore gated less by engineering than by whether the team wants a curated preset at all. The 2025-12-07 release date is a positive signal of recent activity, but a single recent tag on a 2-star repo does not establish a release cadence.
Technical risk.
friendsofphp/php-cs-fixer (or Pint) to a version range. If that range is loose, an upstream major (rule renames, config schema changes, --using-cache semantics) can break your pipeline without this package releasing. If it's tight, you are pinned and blocked on upgrades.type: composer-plugin rather than shipping a plain config, it requires an allow-plugins allowlist entry — treat that as a materially larger trust decision.composer update, producing a noisy diff that obscures real changes.Key questions.
laravel/pint defaults, and is that divergence intentional and defensible?require entries (it should be dev-only), and does it transitively pull anything with broad version ranges?Stack fit. Strong fit for a Laravel/PHP codebase already on Composer with an established composer.json scripts block and CI. The natural comparison is Laravel Pint: Pint ships a curated default, is first-party to the Laravel org, and is already installed in most Laravel projects. Adding jrmajor/cs alongside Pint is redundant; the rational adoption pattern is either (a) it replaces the Pint preset as the single source of truth for style, or (b) it is not adopted. Running two style engines is the anti-pattern to avoid. Worth noting the author's proximity to the Laravel tooling ecosystem — that is a quality signal, but it also raises the question of whether the package is a personal preference profile rather than a broadly-vetted standard.
Migration path. Treat this as a greenfield-on-existing-code problem. The steps are: pin the package at an exact version, generate a fixer config that extends the package preset, run it in --dry-run --diff mode across the codebase to size the blast radius, then land a single mechanical "apply formatting" commit that is added to .git-blame-ignore-revs so history stays reviewable. Only after the baseline is clean should CI enforce it. Do not interleave the reformatting commit with functional changes.
Compatibility. Verify PHP version support against your CI matrix (multiple PHP minors in production is common), and confirm the PHP-CS-Fixer constraint resolves against whatever Pint or other dev tools you already have installed — Composer's solver will surface a conflict immediately, which is a cheap early test. Check that the fixer's cache directory is gitignored and that the tool works identically in local, Docker, and CI images so developers don't get divergent output.
Sequencing.
--dry-run failing the build) and an optional pre-commit hook.Maintenance. Ongoing cost is low but non-zero: one dependency to bump, one config file to curate, one CI job. The subtle cost is ruleset governance — someone must adjudicate rule changes and PR noise, otherwise the preset quietly becomes stale or gets bypassed with inline suppressions that accumulate into debt. Budget a named owner; an unowned style tool degrades into // phpcs:ignore litter within two quarters.
Support. Assume no support. Zero dependents means no Stack Overflow corpus, no third-party blog coverage, and slow or absent maintainer response. The team's effective support contract is "read the source and fork it." This is acceptable for a dev-only formatter and unacceptable if the tool is ever promoted into a gate that blocks releases without a documented fallback.
Scaling. Trivially scalable — it is a deterministic, per-file CPU task. Runtime scales linearly with file count and parallelizes via PHP-CS-Fixer's --parallel. On a large monorepo, expect the full dry-run to take minutes; use the file-based cache and restrict CI runs to changed files on PRs versus a nightly full scan. No concurrency, quota, or state concerns.
Failure modes.
--no-verify on commit hooks makes the CI gate the only real enforcement.allow-plugins is unset.composer remove fully reverts it.Ramp-up. Near-zero for engineers — a formatter is self-teaching via --diff output. The ramp-up cost sits with the adopting TPM/tech lead: an afternoon to size the reformatting diff, a review cycle to ratify the ruleset, and a short written rationale in the repo so future contributors understand why this preset exists instead of Pint. Given 2 stars and 0 dependents, the honest recommendation is: adopt only if a specific rule divergence from Pint delivers concrete value, pin exactly, plan to fork, and otherwise stay on the first-party default.
How can I help you explore Laravel packages today?