*Super saiyan ~~god~~ dog! It's over 9.0.0!*
*There's a bug with this release which prevents the deprecation notice to appear and requires to remove `#!/usr/bin/env sh` and `. "$(dirname -- "$0")/_/husky.sh"` (which are deprecated by the way). I'll publish a new version to fix that. Sorry about any inconvenience.*
### What's new
You can now run package commands directly, no need for `npx` or equivalents.
It makes writing hooks more intuitive and is also slightly faster 🐺⚡️
```diff
### .husky/pre-commit
- npx jest
+ jest # ~0.2s faster
```
A new recipe has been added to the docs. Lint staged files without external dependencies (inspired by Prettier docs). Feel free to modify it.
```shell
### .husky/pre-commit
prettier $(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g') --write --ignore-unknown
git update-index --again
```
For more advanced use cases, see [lint-staged](https://redirect.github.com/lint-staged/lint-staged).
### Fixes
- `bunx husky init` command
- Workaround for some hooks implementation on Windows 🤷
### Deprecations
- Remove `#!/usr/bin/env sh` and `. "$(dirname -- "$0")/_/husky.sh"` from your hooks
- Move your code from `~/.huskyrc` to `.config/husky/init.sh`
Support for these will be removed in v10, notices have been added.
### Friendly reminder
If Git hooks don't fit your workflow, you can disable Husky globally. Just add `export HUSKY=0` to `.config/husky/init.sh`.
I've seen some confusion about this on X, so just a heads-up!
### Sponsoring
Husky is downloaded over 45M times per month and used by ~1.5M projects. If your company wants to sponsor, you can do so here: [GitHub Sponsors](https://redirect.github.com/sponsors/typicode).
**Have a nice summer ☀️ I'm open to new opportunities/consulting so feel free to drop me a message 😉**
### [`v9.0.11`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.11)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.10...v9.0.11)
- chore: update package-lock.json by [@btea](https://redirect.github.com/btea) in [https://github.com/typicode/husky/pull/1383](https://redirect.github.com/typicode/husky/pull/1383)
- fix: husky=0 in init (fixes [#1393](https://redirect.github.com/typicode/husky/issues/1393)) by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1395](https://redirect.github.com/typicode/husky/pull/1395)
### [`v9.0.10`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.10)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.9...v9.0.10)
- fix: rename index.d.ts to index.d.mts by [@mrkjdy](https://redirect.github.com/mrkjdy) in [https://github.com/typicode/husky/pull/1379](https://redirect.github.com/typicode/husky/pull/1379)
### [`v9.0.9`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.9)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.8...v9.0.9)
- refactor: rename files by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1378](https://redirect.github.com/typicode/husky/pull/1378)
### [`v9.0.8`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.8)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.7...v9.0.8)
- docs: update index.md by [@khaledYS](https://redirect.github.com/khaledYS) in [https://github.com/typicode/husky/pull/1369](https://redirect.github.com/typicode/husky/pull/1369)
- Fix tab detection on install command by [@glensc](https://redirect.github.com/glensc) in [https://github.com/typicode/husky/pull/1376](https://redirect.github.com/typicode/husky/pull/1376)
- refactor: reduce file size by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1377](https://redirect.github.com/typicode/husky/pull/1377)
### [`v9.0.7`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.7)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.6...v9.0.7)
- fix: typo and source `~/.huskyrc` correctly (compatibility with v8)
- docs: fix example by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1363](https://redirect.github.com/typicode/husky/pull/1363)
### [`v9.0.6`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.6)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.5...v9.0.6)
- docs: add favicon by [@rakleed](https://redirect.github.com/rakleed) in [https://github.com/typicode/husky/pull/1354](https://redirect.github.com/typicode/husky/pull/1354)
- chore: apply editorconfig to code only by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1355](https://redirect.github.com/typicode/husky/pull/1355)
- docs: update install script to mjs and fix CI checks by [@starnayuta](https://redirect.github.com/starnayuta) in [https://github.com/typicode/husky/pull/1357](https://redirect.github.com/typicode/husky/pull/1357)
- Fix unbound variable by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1359](https://redirect.github.com/typicode/husky/pull/1359)
### [`v9.0.5`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.5)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.4...v9.0.5)
- docs: update path to startup files by [@ManuelRauber](https://redirect.github.com/ManuelRauber) in [https://github.com/typicode/husky/pull/1350](https://redirect.github.com/typicode/husky/pull/1350)
- fix: init error by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1353](https://redirect.github.com/typicode/husky/pull/1353)
### [`v9.0.4`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.4)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.3...v9.0.4)
- fix: init create dir before by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1348](https://redirect.github.com/typicode/husky/pull/1348)
- refactor: simplify by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1349](https://redirect.github.com/typicode/husky/pull/1349)
- fix: init not working on pnpm [#1334](https://redirect.github.com/typicode/husky/issues/1334) by [@rozbo](https://redirect.github.com/rozbo) in [https://github.com/typicode/husky/pull/1347](https://redirect.github.com/typicode/husky/pull/1347)
### [`v9.0.3`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.3)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.2...v9.0.3)
- docs: fix link by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1340](https://redirect.github.com/typicode/husky/pull/1340)
- chore: fix links in issue template by [@julien-f](https://redirect.github.com/julien-f) in [https://github.com/typicode/husky/pull/1341](https://redirect.github.com/typicode/husky/pull/1341)
- fix: add scripts field if not present by [@chalkygames123](https://redirect.github.com/chalkygames123) in [https://github.com/typicode/husky/pull/1338](https://redirect.github.com/typicode/husky/pull/1338)
- docs: changelog link by [@typicode](https://redirect.github.com/typicode) in [https://github.com/typicode/husky/pull/1343](https://redirect.github.com/typicode/husky/pull/1343)
- fix: insert final newline by [@chalkygames123](https://redirect.github.com/chalkygames123) in [https://github.com/typicode/husky/pull/1339](https://redirect.github.com/typicode/husky/pull/1339)
- fix: fix git hooks path on windows by [@rozbo](https://redirect.github.com/rozbo) in [https://github.com/typicode/husky/pull/1346](https://redirect.github.com/typicode/husky/pull/1346)
### [`v9.0.2`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.2)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.1...v9.0.2)
#### What's Changed
- fix: exit code by [@gergelypap](https://redirect.github.com/gergelypap) in [https://github.com/typicode/husky/pull/1336](https://redirect.github.com/typicode/husky/pull/1336)
- docs: typo by [@chalkygames123](https://redirect.github.com/chalkygames123) in [https://github.com/typicode/husky/pull/1337](https://redirect.github.com/typicode/husky/pull/1337)
#### New Contributors
- [@gergelypap](https://redirect.github.com/gergelypap) made their first contribution in [https://github.com/typicode/husky/pull/1336](https://redirect.github.com/typicode/husky/pull/1336)
**Full Changelog**: https://github.com/typicode/husky/compare/v9.0.1...v9.0.2
### [`v9.0.1`](https://redirect.github.com/typicode/husky/releases/tag/v9.0.1)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v8.0.3...v9.0.1)
Kicking off the year with an exciting update!
#### TLDR;
Improved user experience and a (even) smaller package size while packing in more features!
#### 👋 By the Way
**I'm available for remote work** (Front-end/Back-end mainly JS/TS but open to other stacks Rails, Go, Elixir). You can contact me at my mail: typicode at gmail :slightly_smiling_face:
#### Introducing `husky init`
Adding husky to a project is now easier than ever. Although the installation process was straightforward, it often required consulting the documentation.
##### v8
```shell
npm pkg set scripts.prepare="husky install"
npm run prepare
npx husky add .husky/pre-commit "npm test"
```
##### v9
```shell
npx husky init
```
#### Adding a New Hook
Adding a hook is now as simple as creating a file. This can be accomplished using your favorite editor, a script or a basic `echo` command.
##### v8
```shell
npx husky add .husky/pre-commit "npm test"
git add --chmod=+x .husky/pre-commit # On Windows
```
##### v9
```shell
echo "npm test" > .husky/pre-commit
```
#### Further Size Reduction
`v8` was already the most compact Git hooks manager at approximately `6kB`.
`v9` takes this a step further, reducing the size to just `3kB`, likely making it the smallest devDependency in your toolkit.
**To give you an idea of how small it is, the biggest file in the project is the MIT license 😄**
#### More to Come
Additional features are in the pipeline for `v9`. Stay tuned :raised_hands:
#### Other Changes
- **Enhanced security** with CI and npm `--provenance` for safer publishing.
- Added **`$XDG_CONFIG_HOME`** support. Move `~/.huskyrc` to `~/.config/husky/init.sh` for centralized configuration.
- **Fixed permission issue for Windows-created hooks**; they no longer need to be executable.
- Removed `husky install`. Use `husky` or `husky some/dir` for the same functionality (deprecation notice to be added).
- Modified behavior when `.git` is missing; it now triggers a warning instead of failure.
- Replaced `HUSKY_DEBUG=1` with `HUSKY=2` for debugging.
- Updated the Husky API for module usage.
- Transitioned to `ESM` for module usage.
- Dropped support for Node 14 and 16.
- Revamped docs.
#### How to Migrate
`v9` is backward compatible with `v8`, allowing you to freely upgrade and migrate your hooks later.
`package.json`
```diff
{
"scripts": {
- "prepare": "husky install"
+ "prepare": "husky"
}
}
```
`.husky/pre-commit`
```diff
- #!/usr/bin/env sh
- . "$(dirname -- "$0")/_/husky.sh"
npm test
```
### [`v8.0.3`](https://redirect.github.com/typicode/husky/releases/tag/v8.0.3)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v8.0.2...v8.0.3)
- fix: add git not installed message [#1208](https://redirect.github.com/typicode/husky/issues/1208)
### [`v8.0.2`](https://redirect.github.com/typicode/husky/releases/tag/v8.0.2)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v8.0.1...v8.0.2)
- docs: remove deprecated npm set-script
### [`v8.0.1`](https://redirect.github.com/typicode/husky/releases/tag/v8.0.1)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v8.0.0...v8.0.1)
- fix: use POSIX equality operator
### [`v8.0.0`](https://redirect.github.com/typicode/husky/releases/tag/v8.0.0)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v7.0.4...v8.0.0)
#### What's Changed
##### Feats
- feat: add `husky -` prefix to logged global error messages by [@joshbalfour](https://redirect.github.com/joshbalfour) in [https://github.com/typicode/husky/pull/1092](https://redirect.github.com/typicode/husky/pull/1092)
- feat: show `PATH` when command not found to improve debuggability
- feat: drop Node 12 support
- feat: skip install if `$HUSKY=0`
##### Fixes
- fix: hook script use `/usr/bin/env sh` instead of direct path of `sh` by [@skhaz](https://redirect.github.com/skhaz) in [https://github.com/typicode/husky/pull/1051](https://redirect.github.com/typicode/husky/pull/1051)
- fix: actually set 'husky_skip_init' as readonly in `./husky.sh` by [@hyperupcall](https://redirect.github.com/hyperupcall) in [https://github.com/typicode/husky/pull/1104](https://redirect.github.com/typicode/husky/pull/1104)
- fix: force `basename`/`dirname` to treat `$0` as an argument by [@mataha](https://redirect.github.com/mataha) in [https://github.com/typicode/husky/pull/1132](https://redirect.github.com/typicode/husky/pull/1132)
- fix: remove `git.io` links by [@renbaoshuo](https://redirect.github.com/renbaoshuo) in [https://github.com/typicode/husky/pull/1136](https://redirect.github.com/typicode/husky/pull/1136)
##### Docs
- docs: fix uninstall via npm by [@pddpd](https://redirect.github.com/pddpd) in [https://github.com/typicode/husky/pull/1033](https://redirect.github.com/typicode/husky/pull/1033)
- docs: add dog emoji as favicon by [@jamiehaywood](https://redirect.github.com/jamiehaywood) in [https://github.com/typicode/husky/pull/1095](https://redirect.github.com/typicode/husky/pull/1095)
- docs: replace deprecated `npx --no-install` option with `npx --no` by [@sibiraj-s](https://redirect.github.com/sibiraj-s) in [https://github.com/typicode/husky/pull/1070](https://redirect.github.com/typicode/husky/pull/1070)
- docs: add `pnpm` installation by [@MohamadKh75](https://redirect.github.com/MohamadKh75) in [https://github.com/typicode/husky/pull/1139](https://redirect.github.com/typicode/husky/pull/1139)
##### Chore
- chore: update workflows by [@tiziodcaio](https://redirect.github.com/tiziodcaio) in [https://github.com/typicode/husky/pull/1125](https://redirect.github.com/typicode/husky/pull/1125)
### [`v7.0.4`](https://redirect.github.com/typicode/husky/releases/tag/v7.0.4)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v7.0.3...v7.0.4)
*No changes. Husky v7.0.3 was reverted, this version is the same as v7.0.2.*
### [`v7.0.3`](https://redirect.github.com/typicode/husky/compare/v7.0.2...v7.0.3)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v7.0.2...v7.0.3)
### [`v7.0.2`](https://redirect.github.com/typicode/husky/releases/tag/v7.0.2)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v7.0.1...v7.0.2)
Fix pre-commit hook in WebStorm ([#1023](https://redirect.github.com/typicode/husky/issues/1023))
### [`v7.0.1`](https://redirect.github.com/typicode/husky/releases/tag/v7.0.1)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v7.0.0...v7.0.1)
- Fix gracefully fail if Git command is not found [#1003](https://redirect.github.com/typicode/husky/issues/1003) (same as in v6)
### [`v7.0.0`](https://redirect.github.com/typicode/husky/releases/tag/v7.0.0)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v6.0.0...v7.0.0)
- Improve `.husky/` directory structure. **`.husky/.gitignore` is now unnecessary and can be removed**.
- Improve error output (shorter)
- Update [`husky-init`](https://redirect.github.com/typicode/husky-init) CLI
- Update [`husky-4-to-7`](https://redirect.github.com/typicode/husky-4-to-7) CLI
- Drop Node 10 support
*Please help me develop and release OSS projects :heart: on [GitHub Sponsors](https://redirect.github.com/sponsors/typicode) or [Open Collective](https://opencollective.com/husky). Thank you for your support!*
### [`v6.0.0`](https://redirect.github.com/typicode/husky/releases/tag/v6.0.0)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v5.2.0...v6.0.0)
After being in early access for Open Source projects and Sponsors for a limited time, **I'm happy to announce that husky 6 is MIT again** and can be freely used in commercial projects! 🎉
**Many thanks to the [Open Source projects](https://typicode.github.io/husky/#/?id=used-by) and Companies which have switched to/sponsored the new husky during this period!**
*OSS is my full-time job, please consider sponsoring the development of husky on [GitHub sponsors](https://redirect.github.com/sponsors/typicode) or [Open Collective](https://opencollective.com/husky). Thank you!*
### Breaking change
- `husky init` has been moved to its own package (`npx husky-init`)
### Added
- Programmatically use husky: `require('husky')`
- TypeScript definitions
### Migrating from husky 4
Husky 6 contains breaking changes. If you're coming from v4, `npm install husky@6` won't be enough.
**Recommended:** see [husky-4-to-6](https://typicode.github.io/husky/#/?id=husky-4-to-6-cli) CLI to automatically migrate your config. There's also a dedicated section in the [docs](https://typicode.github.io/husky/#/?id=migrate-from-v4-to-v6).
**If you're curious why config has changed, you may be interested in reading:**
https://blog.typicode.com/husky-git-hooks-javascript-config/
**Also Husky 6 follows official [npm](https://docs.npmjs.com/cli/v7/using-npm/scripts#best-practices) and [Yarn](https://yarnpkg.com/advanced/lifecycle-scripts#a-note-about-postinstall) best practices regarding autoinstall.** It's recommended to use `prepare` script instead (see [usage](https://typicode.github.io/husky/#/?id=usage) in docs).
### [`v5.2.0`](https://redirect.github.com/typicode/husky/releases/tag/v5.2.0)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v5.1.3...v5.2.0)
- Add `set` command to replace hooks (`husky set .husky/pre-commit cmd`)
- Update `add` command to append command (`husky add .husky/pre-commit cmd`)
- Improve error messages
### [`v5.1.3`](https://redirect.github.com/typicode/husky/releases/tag/v5.1.3)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v5.1.2...v5.1.3)
- docs: add specific Yarn v2 install/uninstall instructions
- cli: `husky init` will detect Yarn v2 and initialize accordingly
### [`v5.1.2`](https://redirect.github.com/typicode/husky/releases/tag/v5.1.2)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v5.1.1...v5.1.2)
- docs: recommend `prepare` script instead of `postinstall` ([#890](https://redirect.github.com/typicode/husky/issues/890))
- cli: `husky init` use `prepare` script ([#890](https://redirect.github.com/typicode/husky/issues/890))
### [`v5.1.1`](https://redirect.github.com/typicode/husky/releases/tag/v5.1.1)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v5.1.0...v5.1.1)
- style(shell): add trailing newlines ([#870](https://redirect.github.com/typicode/husky/issues/870))
- fix(init): update package.json postinstall
### [`v5.1.0`](https://redirect.github.com/typicode/husky/releases/tag/v5.1.0)
[Compare Source](https://redirect.github.com/typicode/husky/compare/v5.0.9...v5.1.0)
- Add `husky init`
Configuration
📅 Schedule: Branch creation - "on the 1st through 7th day of the month" in timezone America/Los_Angeles, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
^5.0.9
->^9.1.6
Test plan: CI should pass with updated dependencies. No review required: this is an automated dependency update PR.
Release Notes
typicode/husky (husky)
### [`v9.1.6`](https://redirect.github.com/typicode/husky/compare/v9.1.5...a2d942a670b3d6a04578005a0fd2dc310e511849) [Compare Source](https://redirect.github.com/typicode/husky/compare/v9.1.5...v9.1.6) ### [`v9.1.5`](https://redirect.github.com/typicode/husky/compare/v9.1.4...2fee8d212c601942ad146ea9209f15c20a07fb6d) [Compare Source](https://redirect.github.com/typicode/husky/compare/v9.1.4...v9.1.5) ### [`v9.1.4`](https://redirect.github.com/typicode/husky/compare/v9.1.3...fc549e0e5c8723a6d796f6ad26ef6590769f5d82) [Compare Source](https://redirect.github.com/typicode/husky/compare/v9.1.3...v9.1.4) ### [`v9.1.3`](https://redirect.github.com/typicode/husky/releases/tag/v9.1.3) [Compare Source](https://redirect.github.com/typicode/husky/compare/v9.1.2...v9.1.3) - fix: better handle space in `PATH` ### [`v9.1.2`](https://redirect.github.com/typicode/husky/compare/v9.1.1...v9.1.2) [Compare Source](https://redirect.github.com/typicode/husky/compare/v9.1.1...v9.1.2) ### [`v9.1.1`](https://redirect.github.com/typicode/husky/compare/v9.1.0...2968998755465f69069f297b5bb603e26d6b1772) [Compare Source](https://redirect.github.com/typicode/husky/compare/v9.1.0...v9.1.1) ### [`v9.1.0`](https://redirect.github.com/typicode/husky/releases/tag/v9.1.0) [Compare Source](https://redirect.github.com/typicode/husky/compare/v9.0.11...v9.1.0)Kicking off the year with an exciting update!
Configuration
📅 Schedule: Branch creation - "on the 1st through 7th day of the month" in timezone America/Los_Angeles, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.