Update dependency lint-staged to v17
Notable changes
- #1806
e692e58- Update dependencytinyexec@^1.2.4. - #1803
bdf2770- Run all tests with Deno, in addition to Node.js and Bun. - #1796
7508272- Fix performance regression of lint-staged v17 by going back to usinggit addto stage task modifications. This was changed togit update-index --againin v17 for less manual work, but unfortunately theupdate-indexcommand gets slower in very large Git repos. - #1797
7b2505a- This version of lint-staged uses the new staged publishing for npm packages feature. Releases are already published from GitHub Actions with trusted publishing, but now an additional approval with two-factor authentication is also required. - #1802
321b0a9- Downgrade dependencytinyexec@1.2.2to avoid issues in version 1.2.3. - #1792
1f67271- Correctly set the--max-arg-lengthdefault value based on the running platform. This controls how very long lists of staged files are split into multiple chunks. - #1788
f95c1f8- Another fix for making sure lint-staged adds task modifications correctly to the commit in the following cases: - #1782
06813f9Thanks @iiroj! - Fix lint-staged behavior when implicitly committing files without usinggit addby either: - #1779
88670caThanks @iiroj! - Enable immutable GitHub releases - #1776
4a5664bThanks @iiroj! - Adjust GitHub Actions workflow so that automatic publishing works with signed commits. - #1745
e244adfThanks @iiroj! - Node.js v20 is no longer supported, and the oldest supported version is now22.22.1, which is an active LTS version at the time of this release. Node.js 20 will be EOL after April 2026. Please upgrade your Node.js version! - #1676
0584e0bThanks @outslept! - Lint-staged now tries to verify the installed Git version is at least2.32.0, released in 2021. If you're using an even older Git version, you need to upgrade it before running lint-staged! - #1745
2dcc40aThanks @iiroj! - The dependencyyamlis now marked as optional and probably won't be installed by default. If you're using a YAML configuration file you should install the package separately: - #1748
809d5efThanks @iiroj! - Add new option--hide-allfor hiding all unstaged changes and untracked files, before running tasks. This makes it easier to run tools like Knip which check for unused code. Untracked files are included in the backup stash and restored automatically after running. - #1759
f13045aThanks @iiroj! - Update dependencies, includingtinyexec@1.1.1to fix the following issues: - #1761
d3251b1Thanks @iiroj! - Lint-staged now runsgit update-index --againafter running tasks, instead ofgit add <originally staged files>. This should improve compatibility when using non-default indexes, for example when committing with a pathspecgit commit -m "message" .instead of adding files to the index. - #1745
a9585acThanks @iiroj! - Removecommanderas a dependency and use the built-inparseArgsfromnode:utilto parse CLI flags. - #1755
c82d30bThanks @iiroj! - All tests now pass on the Bun runtime (latest). - #1750
a401818Thanks @iiroj! - Remove manual handling forgit stash --keep-indexresurrecting deleted files, because the issue was fixed in Git2.23.0and lint-staged requires at least Git2.32.0. - #1771
c4b8936Thanks @iiroj! - Fix documentation about multiple config files and the--cwdoption. When using it, all tasks will be run in the specified directory. For example, to run everything in the actualprocess.cwd(), uselint-staged --cwd=".". - #1739
687fc90Thanks @hyperz111! - Replacemicromatchwithpicomatchto reduce dependencies. - #1742
9d6e827Thanks @iiroj! - Update dependencies, includingtinyexec@1.0.4to make sure localnode_modules/.binare preferred to global locations (released intinyexec@1.0.3). - #1740
0109e8dThanks @iiroj! - Make sure Git's warning about CRLF line-endings doesn't interfere with creating initial backup stash. - #1735
2adaf6cThanks @iiroj! - Hide the extracmdwindow on Windows by spawning tasks without thedetachedoption. - #1729
cd5d762Thanks @iiroj! - Removenano-spawnas a dependency frompackage.jsonas it was replaced withtinyexecand is no longer used. - #1698
feda37aThanks @iiroj! - Run external processes withtinyexecinstead ofnano-spawn.nano-spawnreplacedexecain lint-staged version 16 to limit the amount of npm dependencies required, but caused some unknown issues related to spawning tasks. Let's hopetinyexecimproves the situation. - #1699
1346d16Thanks @iiroj! - Removepidtreeas a dependency. When a task fails, its sub-processes are killed more efficiently via the process group on Unix systems, and thetaskkillcommand on Windows. - #1726
87467aaThanks @iiroj! - Incorrect brace expansions like*.{js}(nothing to expand) are detected exhaustively, instead of just a single pass. - #1711
ef74c8dThanks @iiroj! - Do not display a "failed to spawn" error message when a task fails normally. This message is reserved for when the task didn't run because spawning it failed. - #1693
33d4502Thanks @Adrian-Baran-GY! - Fix problems with--continue-on-erroroption, where tasks might have still been killed (SIGINT) when one of them failed. - #1687
9e02d9dThanks @iiroj! - Fix unhandled promise rejection when spawning tasks (instead of the tasks themselves failing). Previously when a task failed to spawn, lint-staged also failed and the backup stash might not have been automatically restored. - #1682
0176038Thanks @iiroj! - Update dependencies, includingnano-spawn@2.0.0with bug fixes. - #1671
581a54eThanks @iiroj! - Speed up execution by only importing theyamldepedency if using YAML configuration files. - #1669
27cd541Thanks @iiroj! - When using--fail-on-changes, automatically hidden (partially) unstaged changes are no longer counted to make lint-staged fail. - #1667
699f95dThanks @iiroj! - The backup stash will not be dropped when using--fail-on-changesand there are errors. When reverting to original state is disabled (via--no-revertor--fail-on-changes), hidden (partially) unstaged changes are still restored automatically so that it's easier to resolve the situation manually. - #1664
8277b3bThanks @iiroj! - The built-in TypeScript types have been updated to more closely match the implementation. Notably, the list of staged files supplied to task functions isreadonly string[]and can't be mutated. Thanks @outslept!
lint-staged/lint-staged (lint-staged)
v17.0.7
Patch Changes
v17.0.6
Patch Changes
-
#1803
bdf2770- Run all tests with Deno, in addition to Node.js and Bun. -
#1796
7508272- Fix performance regression of lint-staged v17 by going back to usinggit addto stage task modifications. This was changed togit update-index --againin v17 for less manual work, but unfortunately theupdate-indexcommand gets slower in very large Git repos. -
#1797
7b2505a- This version of lint-staged uses the new staged publishing for npm packages feature. Releases are already published from GitHub Actions with trusted publishing, but now an additional approval with two-factor authentication is also required. -
#1802
321b0a9- Downgrade dependencytinyexec@1.2.2to avoid issues in version 1.2.3.
v17.0.5
Patch Changes
- #1792
1f67271- Correctly set the--max-arg-lengthdefault value based on the running platform. This controls how very long lists of staged files are split into multiple chunks.
v17.0.4
Patch Changes
-
#1788
f95c1f8- Another fix for making sure lint-staged adds task modifications correctly to the commit in the following cases:- after editing
<file>it is staged withgit add <file>, and then committed withgit commit - after editing
<file>it is committed withgit commit --allwithout explicitgit add - after editing
<file>it is committed withgit commit <pathspec>without explicitgit add
There's new test cases which actually setup the Git
pre_commithook to run lint-staged and verify them. These issues started in v17.0.0 when trying to improve support for committig without having explicitly staged files. - after editing
v17.0.3
Patch Changes
- #1782
06813f9Thanks @iiroj! - Fix lint-staged behavior when implicitly committing files without usinggit addby either:git commit -am "my commit message"where-a(--all) means to automatically stage all tracked modified and deleted filesgit commit -m "my commit message" .where.is an example of a pathspec where matching files will be staged
v17.0.2
Patch Changes
v17.0.1
Patch Changes
- #1776
4a5664bThanks @iiroj! - Adjust GitHub Actions workflow so that automatic publishing works with signed commits.
v17.0.0
Major Changes
-
#1745
e244adfThanks @iiroj! - Node.js v20 is no longer supported, and the oldest supported version is now22.22.1, which is an active LTS version at the time of this release. Node.js 20 will be EOL after April 2026. Please upgrade your Node.js version! -
#1676
0584e0bThanks @outslept! - Lint-staged now tries to verify the installed Git version is at least2.32.0, released in 2021. If you're using an even older Git version, you need to upgrade it before running lint-staged! -
#1745
2dcc40aThanks @iiroj! - The dependencyyamlis now marked as optional and probably won't be installed by default. If you're using a YAML configuration file you should install the package separately:npm install --development yaml
If you're using
.lintstagedrcas the config file name (without a file extension), it will be treated as a YAML file. If the content is JSON, consider renaming it to.lintstagedrc.jsonto avoid needing to installyaml.
Minor Changes
-
#1748
809d5efThanks @iiroj! - Add new option--hide-allfor hiding all unstaged changes and untracked files, before running tasks. This makes it easier to run tools like Knip which check for unused code. Untracked files are included in the backup stash and restored automatically after running. -
#1759
f13045aThanks @iiroj! - Update dependencies, includingtinyexec@1.1.1to fix the following issues:- When using a Node.js version manager with multiple versions installed (nvm, n, for example), scripts with the
#!/usr/bin/env nodeshebang (Prettier, ESLint, for example) were previously spawned using the default Node.js version configured by the version manager (the onewhich nodepoints to) on POSIX systems. Now, they will be spawned with the same version that lint-staged itself was started with.- For example, if your default Node.js version is 24.14.1 but lint-staged is run with the latest version 25.9.0, the tasks spawned by lint-staged will now also use version 25.9.0. Previously they were spawned using 24.14.1.
- When installing Node.js from the Ubuntu App Center (Snap store), the
nodeexecutable available inPATHis a symlink pointing to Snap itself. The sandboxing features of Snap prevented lint-staged from spawning scripts with the#!/usr/bin/env nodeshebang, because it meant lint-staged tried to spawn Snap via the symlink. This resulted in anENOENTerror when trying to runprettier, for example. Now, since the realnodeexecutable's directory is available in thePATH, lint-staged will instead spawn the script with the realnodebinary succesfully.
- When using a Node.js version manager with multiple versions installed (nvm, n, for example), scripts with the
-
#1761
d3251b1Thanks @iiroj! - Lint-staged now runsgit update-index --againafter running tasks, instead ofgit add <originally staged files>. This should improve compatibility when using non-default indexes, for example when committing with a pathspecgit commit -m "message" .instead of adding files to the index. -
#1745
a9585acThanks @iiroj! - Removecommanderas a dependency and use the built-inparseArgsfromnode:utilto parse CLI flags.
Patch Changes
-
#1755
c82d30bThanks @iiroj! - All tests now pass on the Bun runtime (latest). -
#1750
a401818Thanks @iiroj! - Remove manual handling forgit stash --keep-indexresurrecting deleted files, because the issue was fixed in Git2.23.0and lint-staged requires at least Git2.32.0. -
#1771
c4b8936Thanks @iiroj! - Fix documentation about multiple config files and the--cwdoption. When using it, all tasks will be run in the specified directory. For example, to run everything in the actualprocess.cwd(), uselint-staged --cwd=".".
v16.4.0
Minor Changes
- #1739
687fc90Thanks @hyperz111! - Replacemicromatchwithpicomatchto reduce dependencies.
v16.3.4
Patch Changes
- #1742
9d6e827Thanks @iiroj! - Update dependencies, includingtinyexec@1.0.4to make sure localnode_modules/.binare preferred to global locations (released intinyexec@1.0.3).
v16.3.3
Patch Changes
- #1740
0109e8dThanks @iiroj! - Make sure Git's warning about CRLF line-endings doesn't interfere with creating initial backup stash.
v16.3.2
Patch Changes
- #1735
2adaf6cThanks @iiroj! - Hide the extracmdwindow on Windows by spawning tasks without thedetachedoption.
v16.3.1
Patch Changes
- #1729
cd5d762Thanks @iiroj! - Removenano-spawnas a dependency frompackage.jsonas it was replaced withtinyexecand is no longer used.
v16.3.0
Minor Changes
-
#1698
feda37aThanks @iiroj! - Run external processes withtinyexecinstead ofnano-spawn.nano-spawnreplacedexecain lint-staged version 16 to limit the amount of npm dependencies required, but caused some unknown issues related to spawning tasks. Let's hopetinyexecimproves the situation. -
#1699
1346d16Thanks @iiroj! - Removepidtreeas a dependency. When a task fails, its sub-processes are killed more efficiently via the process group on Unix systems, and thetaskkillcommand on Windows.
Patch Changes
- #1726
87467aaThanks @iiroj! - Incorrect brace expansions like*.{js}(nothing to expand) are detected exhaustively, instead of just a single pass.
v16.2.7
Patch Changes
- #1711
ef74c8dThanks @iiroj! - Do not display a "failed to spawn" error message when a task fails normally. This message is reserved for when the task didn't run because spawning it failed.
v16.2.6
Patch Changes
- #1693
33d4502Thanks @Adrian-Baran-GY! - Fix problems with--continue-on-erroroption, where tasks might have still been killed (SIGINT) when one of them failed.
v16.2.5
Patch Changes
- #1687
9e02d9dThanks @iiroj! - Fix unhandled promise rejection when spawning tasks (instead of the tasks themselves failing). Previously when a task failed to spawn, lint-staged also failed and the backup stash might not have been automatically restored.
v16.2.4
Patch Changes
-
#1682
0176038Thanks @iiroj! - Update dependencies, includingnano-spawn@2.0.0with bug fixes. -
#1671
581a54eThanks @iiroj! - Speed up execution by only importing theyamldepedency if using YAML configuration files.
v16.2.3
Patch Changes
- #1669
27cd541Thanks @iiroj! - When using--fail-on-changes, automatically hidden (partially) unstaged changes are no longer counted to make lint-staged fail.
v16.2.2
Patch Changes
-
#1667
699f95dThanks @iiroj! - The backup stash will not be dropped when using--fail-on-changesand there are errors. When reverting to original state is disabled (via--no-revertor--fail-on-changes), hidden (partially) unstaged changes are still restored automatically so that it's easier to resolve the situation manually.Additionally, the example for using the backup stash manually now uses the correct backup hash, if available:
% npx lint-staged --fail-on-changes ✔ Backed up original state in git stash (c18d55a3) ✔ Running tasks for staged files... ✖ Tasks modified files and --fail-on-changes was used! ↓ Cleaning up temporary files... ✖ lint-staged failed because `--fail-on-changes` was used. Any lost modifications can be restored from a git stash: > git stash list --format="%h %s" c18d55a3 On main: lint-staged automatic backup > git apply --index c18d55a3
v16.2.1
Patch Changes
-
#1664
8277b3bThanks @iiroj! - The built-in TypeScript types have been updated to more closely match the implementation. Notably, the list of staged files supplied to task functions isreadonly string[]and can't be mutated. Thanks @outslept!export default {
List of commits
0ef5669 (Update dependency lint-staged to v17, 2026-06-03)