Repository navigation
v11.3.37
Update dependency lint-staged to v17.6.0
Notable changes
- #1850
938d3f4- Task functions like{ title, task }can now use a logger functionlog()to emit output while the task runs. By default, the output will only be visible if the task fails, unless the--verboseoption was used. Additionally, when the task rejects, the error will be shown in the output. - #1854
30562bc- lint-staged now stages changes to all tracked files modified by tasks, including files that weren’t originally staged or didn’t match the configured globs. This can happen when your task has side-effects, or it's a function that ignores the staged files like() => "prettier --write .". - #1860
4296532- The assignment of staged files to lint-staged configuration files (when using multiple, for example in a monorepo) has been rewritten to be more efficient. As a reminder, each staged file is assigned to exactly one configuration (the closest one), even if that config doesn't match the file in its globs. - #1861
c45f28a- Fix running parallel tasks for a single glob, when tasks are created by a function. Nesting one level of arrays inside an array of tasks will result in the inner tasks running in parallel. This behavior should now be consistent when creating tasks using functions. In the following exampleeslintandprettierwill run in parallel (for all files, when any JS files are staged): - #1859
f0ea69d- Various performance improvements from skipping redundant internal Git calls. - #1856
69d7d17- Partially staged changes are hidden in a uniquely-named patch file to avoid multiple invocations of lint-staged overwriting it. This makes it safer to run lint-staged in multiple worktrees at the same time. - #1852
bfcca94- Fix TypeScript issueTS1254fromdefineConfig()by changing the signature fromconstto afunction: - #1847
f9063b7- Lint-staged now refuses to run when files were staged with--intent-to-add, because Git stash doesn't support them. Previously this was an unhandled error. - #1848
d718ccc- Lint-staged now handles color support better in non-TTY streams, and honors theFORCE_COLORenvironment variable. - #1845
7e5ece8- Updatetinyexec@1.3.1so that local binaries fromnode_modules/.binare resolved starting from the directory of each lint-staged configuration file (in monorepo setups). This behavior was broken inlint-staged@16.3.0where they were only resolved from the current working directory and up. - #1845
eb8a4e3- Do not try to restore untracked files when using--hide-alland there is no initial commit yet. - #1840
efe5b63- This is a version-bump-only release because the previous version17.4.0was not published to npmjs.com due to problems with GitHub Actions and Changesets. - #1825
16b3f74- It is now possible to run multiple tasks in parallel for a single glob by configuring it with an array of tasks (which run sequentially), and then placing another array inside it (where the tasks will run in parallel). The following demonstrates the order tasks will start in: - #1829
15f7e53- During an in-progress merge, files that are unchanged from the branch being merged are now skipped. Technically, files are only included if there are staged changes against bothHEADandMERGE_HEAD. - #1823
ee156cc- The chunking of tasks based on maximum command line argument length has been re-implemented to be more precise. Now the chunking happens based on the final generated command string, instead of just the list of staged files like previously. This benefits mainly Windows platforms and function commands like: - #1820
a626a9f- It's now possible to set--max-arg-length=Infinityto effectively disable chunking of tasks based on the number of staged files. The parsing and validation of the numeric CLI options--max-arg-lengthand--concurrencyhas been improved. - #1816
7568d4f- The console output of lint-staged has been simplified so that there's less interactive spinners and more explicit messages like "Started…" -> "Done!". The primary purpose of this was to removeListr2, a very large dependency. - #1816
c19079d- Try to restore hidden unstaged changes when using--no-revert. - #1818
efb23a2- Console output colors are enabled/disabled more consistently. - #1818
26112a1- Failed JS function tasks now properly kill other tasks, unless--continue-on-erroris used. Previously their failure didn't affect other tasks.
lint-staged/lint-staged (lint-staged)
v17.6.0
Minor Changes
-
#1850
938d3f4- Task functions like{ title, task }can now use a logger functionlog()to emit output while the task runs. By default, the output will only be visible if the task fails, unless the--verboseoption was used. Additionally, when the task rejects, the error will be shown in the output.import { defineConfig } from 'lint-staged/config' export default defineConfig({ '*': { title: 'Fail if PDF files are committed', task: async (filepaths, { log }) => { const pdfFiles = filepaths.filter((f) => f.toLowerCase().endsWith('.pdf')) if (pdfFiles.length > 0) { log('PDF files should not be committed: %s', pdfFiles) throw new Error('Failed') } }, }, })
-
#1854
30562bc- lint-staged now stages changes to all tracked files modified by tasks, including files that weren’t originally staged or didn’t match the configured globs. This can happen when your task has side-effects, or it's a function that ignores the staged files like() => "prettier --write .".If you have unstaged changes in a file and the task also edits that file, your unstaged changes will be staged too. Use
--hide-unstagedto hide your changes while tasks run.
Patch Changes
-
#1860
4296532- The assignment of staged files to lint-staged configuration files (when using multiple, for example in a monorepo) has been rewritten to be more efficient. As a reminder, each staged file is assigned to exactly one configuration (the closest one), even if that config doesn't match the file in its globs. -
#1861
c45f28a- Fix running parallel tasks for a single glob, when tasks are created by a function. Nesting one level of arrays inside an array of tasks will result in the inner tasks running in parallel. This behavior should now be consistent when creating tasks using functions. In the following exampleeslintandprettierwill run in parallel (for all files, when any JS files are staged):import { defineConfig } from 'lint-staged/config' export default defineConfig({ '*.js': () => [['eslint --max-warnings=0 .', 'prettier --list-different .']], })
-
#1859
f0ea69d- Various performance improvements from skipping redundant internal Git calls. -
#1856
69d7d17- Partially staged changes are hidden in a uniquely-named patch file to avoid multiple invocations of lint-staged overwriting it. This makes it safer to run lint-staged in multiple worktrees at the same time.
v17.5.1
Patch Changes
-
#1852
bfcca94- Fix TypeScript issueTS1254fromdefineConfig()by changing the signature fromconstto afunction:A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.
v17.5.0
Minor Changes
- #1847
f9063b7- Lint-staged now refuses to run when files were staged with--intent-to-add, because Git stash doesn't support them. Previously this was an unhandled error.
Patch Changes
-
#1848
d718ccc- Lint-staged now handles color support better in non-TTY streams, and honors theFORCE_COLORenvironment variable. -
#1845
7e5ece8- Updatetinyexec@1.3.1so that local binaries fromnode_modules/.binare resolved starting from the directory of each lint-staged configuration file (in monorepo setups). This behavior was broken inlint-staged@16.3.0where they were only resolved from the current working directory and up. -
#1845
eb8a4e3- Do not try to restore untracked files when using--hide-alland there is no initial commit yet.
v17.4.1
Patch Changes
- #1840
efe5b63- This is a version-bump-only release because the previous version17.4.0was not published to npmjs.com due to problems with GitHub Actions and Changesets.
v17.3.0
Minor Changes
-
#1825
16b3f74- It is now possible to run multiple tasks in parallel for a single glob by configuring it with an array of tasks (which run sequentially), and then placing another array inside it (where the tasks will run in parallel). The following demonstrates the order tasks will start in:{ "*.ts": ["first", "second", ["third", "third"], "fourth"] }As a concrete example, lint-staged's own configuration is:
/** @type {import('./lib/index.js').Configuration} */ export default { '*': [ ['oxfmt --check --no-error-on-unmatched-pattern', 'oxlint --no-error-on-unmatched-pattern'], ], '*.ts': () => 'tsc', }
which means:
- for all staged files, run the two commands in parallel with staged filenames appended, for example:
oxfmt --check --no-error-on-unmatched-pattern lib/index.jsoxlint --no-error-on-unmatched-pattern lib/index.js
- additionally, if any
*.tsfiles are staged, runtscwithout appending any arguments - The two sets of commands also run in parallel
- for all staged files, run the two commands in parallel with staged filenames appended, for example:
Patch Changes
- #1829
15f7e53- During an in-progress merge, files that are unchanged from the branch being merged are now skipped. Technically, files are only included if there are staged changes against bothHEADandMERGE_HEAD.
v17.2.0
Minor Changes
-
#1823
ee156cc- The chunking of tasks based on maximum command line argument length has been re-implemented to be more precise. Now the chunking happens based on the final generated command string, instead of just the list of staged files like previously. This benefits mainly Windows platforms and function commands like:/** @type {import('lint-staged').Configuration} */ export default { '*.ts': () => 'tsc', // Run "tsc" when any TS file is changed (for entire project) }
Where the spawned command is literally
"tsc"without any extra arguments. Previously, this was still chunked when a lot of files were staged. Now, it probably won't be chunked because the length of the command is just three letters.Also, native JavaScript/Node.js function tasks won't be chunked at all, when previously they were run multiple times when chunked:
/** @type {import('lint-staged').Configuration} */ export default { '*.js': { title: 'Log staged JS files to console', task: async (files) => { console.log('Staged JS files:', files) }, }, }
v17.1.1
Patch Changes
- #1820
a626a9f- It's now possible to set--max-arg-length=Infinityto effectively disable chunking of tasks based on the number of staged files. The parsing and validation of the numeric CLI options--max-arg-lengthand--concurrencyhas been improved.
v17.1.0
Minor Changes
-
#1816
7568d4f- The console output of lint-staged has been simplified so that there's less interactive spinners and more explicit messages like "Started…" -> "Done!". The primary purpose of this was to removeListr2, a very large dependency.Before:
Size of
node_modules/after installing:1561.7 kBwith 29 packages.Fancy interactive spinners, but output dynamically changes:
✔ Backed up original state in git stash (0b191303) ✔ Running tasks for staged files... ✔ Staging changes from tasks... ✔ Cleaning up temporary files...
After:
Size of
node_modules/after installing:974.0 kBwith 5 packages (37.6 % smaller, 82.7 % less transitive dependencies).Simpler but more explicit output:
⋯ Backing up original state… ✔ Done backing up original state (35b38ed1)! ⋯ Running tasks for staged files… *.js — 1 file ⋯ oxlint --fix *.{json,md} — 1 file ⋯ oxfmt --write ✔ oxfmt --write ✔ oxlint --fix ✔ Done running tasks for staged files! ⋯ Staging changes from tasks… ✔ Done staging changes from tasks! ⋯ Cleaning up temporary files… ✔ Done cleaning up temporary files!
Patch Changes
-
#1816
c19079d- Try to restore hidden unstaged changes when using--no-revert. -
#1818
efb23a2- Console output colors are enabled/disabled more consistently. -
#1818
26112a1- Failed JS function tasks now properly kill other tasks, unless--continue-on-erroris used. Previously their failure didn't affect other tasks.
List of commits
a9e0a8c (Update dependency lint-staged to v17.6.0, 2026-10-24)