luxplus/blade-linter
Luxplus Blade Linter scans Laravel Blade templates for syntax errors and common view issues, helping you catch problems before deployment. Run it via Artisan or CI to keep templates clean and reliable.
Architecture fit. luxplus/blade-linter is a static analysis tool for Laravel Blade templates — it operates on .blade.php source files at build/dev time and has no runtime presence. That places it in the same architectural slot as Pint, PHPStan, and Larastan: a require-dev quality gate rather than an application dependency. For any Laravel team that already runs a lint/static-analysis stage, the fit is natural and additive.
Integration feasibility. Low-friction. Adoption is a single composer require --dev luxplus/blade-linter plus a CLI invocation in local tooling and CI. No service, no schema, no runtime wiring. The 0.3.1 patch is relevant to feasibility: the SiblingBlankLines rule now treats element directives as a boolean toggle and is "safe for --no-dev installs," meaning the package does not misbehave in production installs where dev dependencies are stripped. That removes a class of "works locally, breaks in a --no-dev deploy" surprises that would otherwise need to be validated.
Technical risk. Low. It is a dev-only linter, so a defect cannot reach production traffic; the worst case is a false positive that blocks a pipeline or a false negative that lets a style issue through. The primary residual risk is maturity rather than correctness: this is a 0.3.x pre-1.0 package, so rule behavior and configuration surface can still change between minors.
Key questions. Which PHP and Laravel versions are supported? How large is the rule set, and is SiblingBlankLines configurable as a boolean toggle only, or is per-rule severity configurable? What is the exit-code/CI contract (does it fail the build, and can rules be baselined or suppressed)? What is the performance profile on a large resources/views tree? Is there a published roadmap to 1.0?
Stack fit. Native to the Laravel/PHP toolchain — Composer-installed, CLI-invoked, no external services or credentials. It composes cleanly with an existing composer lint / composer test script surface and with GitHub Actions or GitLab CI.
Migration path. None required — this is a greenfield addition, not a replacement. Teams already running Pint or PHPStan simply add a parallel step; there is no existing configuration to migrate.
Compatibility. Confirm the supported PHP/Laravel matrix before rollout, and pin the version in composer.json rather than floating ^0.3 if rule churn is a concern during the pre-1.0 period. The 0.3.1 --no-dev fix specifically de-risks the production-install path, so it should be treated as the minimum acceptable version for adoption.
Sequencing. (1) Add as a dev dependency and pin the version. (2) Run locally against the current view tree to size the initial violation count. (3) Decide on a baseline/suppression strategy so the first CI run does not fail on pre-existing debt. (4) Add the invocation to the CI lint stage as a non-blocking step, then promote to blocking once the baseline is clean. (5) Document the rule set and the boolean-toggle configuration for SiblingBlankLines in the team's contributor guide.
Maintenance. Low. No infrastructure, no runtime dependencies, no data. The maintenance burden is confined to periodic version bumps and re-baselining when rules change — and at 0.3.x, expect some config churn per minor release.
Support. Open-source, and the release cadence suggests a small maintainer base (single author on the 0.3.1 PR). That is the main operational exposure: no commercial SLA, and bug turnaround depends on community availability. Acceptable for a non-critical quality gate; not something to depend on for a release-blocking compliance control without a fallback.
Scaling. Effectively linear in the number of Blade files and trivially parallelizable across CI jobs. It does not touch request paths, so it has no bearing on application scaling — only on CI wall-clock time, which should be measured on the largest repo before making it blocking.
Failure modes. (a) False positives blocking merges — mitigate with a baseline and a documented suppression path. (b) Version drift in a pre-1.0 package changing rule semantics — mitigate by pinning. (c) --no-dev install breakage — addressed in 0.3.1, but worth a smoke test in the deploy pipeline. (d) Silent non-execution if the CI step is misconfigured, giving false assurance — mitigate by asserting a known-bad fixture fails the build.
Ramp-up. Minimal. Any engineer familiar with Composer and a CI lint stage can adopt and operate this in under a day; the only learning curve is the specific rule set and its configuration semantics for element directives.
How can I help you explore Laravel packages today?