Pint is a formatter that removed the configuration decisions and kept the fixing engine
Laravel Pint is an opinionated PHP code style fixer for minimalists.
At a glance
- What is it?
- Three thousand stars for a wrapper around PHP-CS-Fixer that ships one opinionated rule set, packages itself as a PHAR, and uses Prettier on its own Blade and Tailwind files.
- Who is it for?
- Pint is the rare formatting tool whose main feature is a decision it refuses to hand to you. It sits on PHP-CS-Fixer, keeps the whole engine, and replaces the rule-set decision with Laravel's own opinion, which is why a package this small has 3,166 stars and nearly no open issues.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 27 days ago.
- What is it written in?
- Mainly PHP, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 7, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The README is two sentences and a documentation link
The introduction paragraph is the whole product statement. It says Laravel Pint is an opinionated PHP code style fixer for minimalists, that Pint is built on top of PHP-CS-Fixer, and that it makes it simple to ensure your code style stays clean and consistent. Then it links to laravel.com/docs/pint and stops.
The rest of the README is badges, a contributing guide, a code of conduct, a security policy and the MIT licence line. At 1,907 characters it is smaller than the Octane README, which is remarkable for a package with 3,166 stars, 194 forks and 9 open issues.
The description repeats the framing almost verbatim, calling Pint an opinionated PHP code style fixer for minimalists, and the topic tags are exactly what you would expect for that category: `format`, `formatter`, `lint`, `linter` and `php`. There is no Laravel topic on the project itself, which is worth noticing. Pint is packaged as a Laravel package and shipped by Laravel, but the tool it wraps is framework-agnostic and the tagline deliberately does not mention the framework.
What it removed and what it kept
The design decision here is subtler than it looks. PHP-CS-Fixer is a mature, powerful engine, and the conventional way to use it is to pick a rule set, assemble a configuration file, and then maintain that file for the life of the project. Teams end up with a `php_cs` or `.php-cs-fixer.php` that nobody wants to touch and that drifts from whatever the upstream tool now recommends.
Pint keeps the engine and removes the decision. You install it, run it, and your PHP files come out formatted to Laravel's house style. There is nothing to choose, which means there is nothing to argue about, which is the actual product being sold here.
The trade-off is that the rule set is not yours. If your team has a specific disagreement about parenthesisation, import ordering or blank lines, you are not going to resolve it by picking a different Pint preset, because there is not a preset list. You either accept the framework's style or write your own configuration, and the documentation is where that path is described.
The practical consequence is worth stating plainly. Pint is a tool for teams who agree. If your organisation has a code style standard that predates Pint and differs from it, adopting Pint means either rewriting the standard or carrying an override file forever.
A PHAR, a global binary and three directories of configuration
The repository tree explains how the thing is distributed. `box.json` is the Box configuration used to build the PHAR, `builds/` holds the build inputs, and `pint` at the root is the executable entry point. That combination is the reason the README never tells you to install it through Composer for local use: there is a standalone binary you can fetch and run.
Two configuration paths are visible in the tree. `pint.json` at the root is Pint's own configuration for its own codebase, which tells you the maintainers dogfood it, and `config/` sits alongside `overrides/` for the configuration a consumer project would write. The existence of a directory literally named `overrides` is a good sign about the extension model: rather than forcing you to fork the rule set, the design lets you describe where you want to differ.
The rest of the tree is Laravel application scaffolding: `app/`, `bootstrap/`, `resources/`, `storage/`, plus `phpunit.xml.dist` and a `phpstan.neon`. So Pint is itself a Laravel package that analyses itself at a static analysis level, which is the level of rigour you would expect from a first-party tool whose entire job is mechanical code quality.
`CHANGELOG.md` and `RELEASE.md` are both present, which means releases are generated rather than hand-written. Combined with the default branch being `main`, this is a project on a straightforward release train.
It formats its own Blade files with Prettier
The one file worth reading closely is `package.json`, and it is a small detail that says a lot. Pint's JavaScript dev dependencies are `prettier`, `prettier-plugin-blade` and `prettier-plugin-tailwindcss`.
That is the tool dogfooding in a way that is easy to miss. A PHP code style fixer cannot format a Blade template or sort Tailwind class names, so Pint, which is mostly about PHP, reaches for a different tool for its own front-end assets. The Prettier Blade plugin handles template markup and the Tailwind plugin handles class ordering, while Pint handles the PHP behind them. Two formatters, two configuration files, and a boundary that happens to fall exactly along the language line.
You can read a project's relationship with its own tooling from a single dependency list like this one, and the picture here is a Laravel shop that uses the Laravel-blessed tool for PHP and Prettier for everything else, which is close to the default answer for most Laravel teams in 2026.
`composer.lock` and `package-lock.json` are both committed, so the dependency graph of the tool is reproducible down to the exact version of PHP-CS-Fixer it ships with. For a formatter whose output must be byte-identical across machines, that is not a small thing.
Recent releases and how to judge the project
The release history is thin in a way that suits this category. v1.31.1 on 2026-09-08 contains exactly one entry, a dependency update via composer update, which in practice means the shipped PHP-CS-Fixer version moved. v1.32.0 on 2026-09-09 and v1.32.1 on 2026-09-10 both carry only a comparison link to the previous tag, meaning the release notes are generated and the substantive content is in the diff.
Three releases inside three days is a cadence that looks busy and is in fact routine for a package whose upstream dependency moves frequently and whose own code changes rarely. A formatter does not gain features the way a framework does. It gains rule updates, PHP version support and fixes to edge cases in parsing.
The maintenance numbers are the strongest signal. Nine open issues on a project with 3,166 stars is remarkably low, and low is the good direction for a formatter because almost every issue is either a false positive on somebody's code or a request for a rule that belongs in PHP-CS-Fixer rather than here. The last push was 2026-09-10, the repository is not archived, MIT licensed, and the homepage points at laravel.com/docs/pint.
What to check before committing to it is your own codebase's resistance. Pint will reformat every file it touches, so the first run on an existing project produces a diff far larger than the change you were making. Teams that adopt Pint usually pair it with a single dedicated formatting commit so the behavioural review stays readable, and that is a workflow choice the README leaves entirely to you.
Editorial conclusion
Pint is the rare formatting tool whose main feature is a decision it refuses to hand to you. It sits on PHP-CS-Fixer, keeps the whole engine, and replaces the rule-set decision with Laravel's own opinion, which is why a package this small has 3,166 stars and nearly no open issues. What it gives up is control: no per-directory overrides without writing config, no rule shopping, no negotiation between teams about which preset to use. The `overrides/` directory and the `pint.json` at the root exist precisely for the cases where you need to step away from that default. If the debate in your team is about formatting rather than about code, adopting Pint ends the debate and starts a pull request that only ever reformats.
Frequently asked questions
What is Laravel Pint used for?
Pint fixes PHP code style automatically. It is built on PHP-CS-Fixer and applies an opinionated rule set chosen by Laravel, so a team can keep formatting consistent without maintaining a fixer configuration file or debating which preset to adopt.
Can I configure which Pint rules run?
Yes, though the defaults are meant to be accepted as-is. The repository carries a `config/` directory and a directory literally named `overrides/`, so a project can describe where it wants to differ from the built-in opinion instead of forking the rule set.
Is Pint the same thing as PHP-CS-Fixer?
No. Pint is built on top of PHP-CS-Fixer and keeps its engine, but it replaces the configuration decision with a single Laravel opinionated rule set. That is why it needs no setup file to produce consistent output, and also why you cannot shop for rules the way you can with the underlying tool.
Does Pint handle Blade templates and Tailwind classes?
No, and the project's own repository is a demonstration of the boundary. Pint formats PHP with PHP-CS-Fixer, while its `package.json` pulls in `prettier`, `prettier-plugin-blade` and `prettier-plugin-tailwindcss` for templates and class ordering.
Is Laravel Pint still maintained?
The repository is MIT licensed, not archived, on the `main` default branch, and was last pushed 2026-09-10. It has 3,166 stars, 194 forks and only 9 open issues, with v1.32.1 released the same day as the last push.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/laravel-pint)