NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #186 most downloaded on PyPI
A framework for managing and maintaining multi-language pre-commit hooks.
Last release 1 months ago
10 Aug 2026
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
204 releases · first in 2014
Fix language: node hooks that contain "scripts": {"build": ...} with npm 11.x.
Install language: node hooks via git .
language: node hooks via git.
JULIA_DEPOT_PATH for language: julia.
--repo for pre-commit autoupdate.
pre-push.
pre-commit run --all-files.
One column per quarter.
pre-commit hook-impl : allow --hook-dir to be missing to enable easier usage with git 2.54+ git hooks.
Fix language: python with repo: local without additional_dependencies .
Features Add pre-commit hazmat . #3585 PR by @asottile .
Add language: unsupported / language: unsupported_script as aliases for language: system / language: script (which will eventually be deprecated).
--fail-fast option to pre-commit run.
ruby-build / rbenv.
language: unsupported / language: unsupported_script as aliases for language: system / language: script (which will eventually be deprecated).
language: docker / language: docker_image : detect rootless docker.
language: docker / language: docker_image: detect rootless docker.
language: julia: avoid startup.jl when executing hooks.
language: dart: support latest dart versions which require a higher sdkFor language: python first attempt a versioned python executable for the default language version before consulting a potentially unversioned sys.exec
language: python first attempt a versioned python executable for the default language version before consulting a potentially unversioned sys.executable.
Disable automatic toolchain switching for language: golang.
language: julia.
language: golang.
language: r installation when initiated by RStudio.
Fix pre-commit migrate-config for unquoted deprecated stages names with purelib pyyaml .
pre-commit migrate-config for unquoted deprecated stages names withpyyaml.
Handle stages deprecation in pre-commit migrate-config.
pre-commit migrate-config to handle more yaml formats.
stages deprecation in pre-commit migrate-config.
ruby-build.
repo: meta.
stages (commit -> pre-commit, push ->
pre-push, merge-commit -> pre-merge-commit).
language: python_venv has been removed -- use language: python instead.
Implement health checks for language: r so environments are recreated if the system version of R changes.
language: r so environments are recreated if the system version of R changes.
Fix language: rust default language version check when rust-toolchain.toml is present.
language: rust default language version check when rust-toolchain.toml
is present.
Use a tty for docker and docker_image hooks when --color is specified.
docker and docker_image hooks when --color is specified.
fail_fast for individual hooks stopping when previous hooks had failed.
fail_fast was fixed. If you want the pre-3.7.0
behaviour, add fail_fast: true to all hooks before the last fail_fast
hook.Fix building golang hooks during git commit --all.
git commit --all.
Remove PYTHONEXECUTABLE from environment when running.
PYTHONEXECUTABLE from environment when running.
Fix deprecation warnings for importlib.resources.
minimum_pre_commit_version first when parsing configs.
importlib.resources.
Improve performance of check-hooks-apply and check-useless-excludes.
check-hooks-apply and check-useless-excludes.
time.monotonic() for more accurate hook timing.
language: node hooks.
Improve cpu count detection when run under cgroups.
language: haskell.
Work around OS packagers setting --install-dir / --bin-dir in gem settings.
--install-dir / --bin-dir in gem settings.
Work around r on windows sometimes double-un-quoting arguments.
r on windows sometimes double-un-quoting arguments.
Work around git partial clone bug for autoupdate on windows.
git partial clone bug for autoupdate on windows.
Use blobless clone for faster autoupdate.
-j / --jobs argument to autoupdate for parallel execution.
### Fixes - Fix support for swift >= 5.8. - #2836 PR by @edelabar. - #2835 issue by @kgrobelny-intive.
Fix language_version for language: rust without global rustup.
language_version for language: rust without global rustup.
Allow pre-commit, pre-push, and pre-merge-commit as stages.
pre-commit, pre-push, and pre-merge-commit as stages.
pre-rebase hook support.
language: rust installs.
Fix rust with language_version and a non-writable host RUSTUP_HOME.
rust with language_version and a non-writable host RUSTUP_HOME.
Deprecate language: python_venv. Use language: python instead.
dotnet for .sln-based hooks for dotnet>=7.0.200.
diff fails to execute.
language: python_venv. Use language: python instead.
Fix hook diff detection for files affected by --textconv.
--textconv.
Revert "Prevent local Gemfile from interfering with hook execution.".
Gemfile from interfering with hook execution.".
Prevent local Gemfile from interfering with hook execution.
Gemfile from interfering with hook execution.
language: r, repo: local hooks
Ensure coursier hooks are available offline after install.
Make language: golang bootstrap go if not present.
language: golang bootstrap go if not present.
language: coursier now supports additional_dependencies and repo: local
ruby-build to 20221225.
pre-commit autoupdate.
repo: local no longer provisions an empty git repo.
pre-commit migrate-config to update.
sha to specify revision, use pre-commit migrate-config to update.
pre-commit-validate-config and pre-commit-validate-manifest, use pre-commit validate-config and pre-commit validate-manifest instead.
language: golang hooks must use go.mod to specify dependencies
Require new-enough virtualenv to prevent 3.10 breakage
SKIP for environment install.
pre-commit run --files against unmerged paths.
repo: local hooks.
rust is now a "first class" language -- supporting language_version and installation when not present.
r now uses more-reliable binary installation.
GIT_ALLOW_PROTOCOL is now passed through for git operations.
GIT_ASKPASS is now passed through for git operations.
toml dependency by using cargo add directly.
dotnet hooks which have dotted prefixes.
--commit-msg-filename if run from a sub directory.
--intent-to-add detection by using git diff.
R.exe selection on windows.
nuget source when installing dotnet packages.
Expose source and object-name (positional args) of prepare-commit-msg hook as PRE_COMMIT_COMIT_MSG_SOURCE and PRE_COMMIT_COMMIT_OBJECT_NAME.
source and object-name (positional args) of prepare-commit-msg hook as PRE_COMMIT_COMIT_MSG_SOURCE and PRE_COMMIT_COMMIT_OBJECT_NAME.
language: ruby installs when --user-install is set in gemrc.
--config option from gc, sample-config, validate-config, validate-manifest sub-commands.
Add pre-commit validate-config / pre-commit validate-manifest and deprecate pre-commit-validate-config and pre-commit-validate-manifest.
language: dotnet hooks.
healthy() failure.
pre-commit validate-config / pre-commit validate-manifest and deprecate pre-commit-validate-config and pre-commit-validate-manifest.
pre-push when pushed ref contains spaces.
pre-commit-validate-config / pre-commit-validate-manifest to pre-commit validate-config / pre-commit validate-manifest.
Fix regression for repo: local hooks running python<3.7
repo: local hooks running python<3.7
Keep GIT_HTTP_PROXY_AUTHMETHOD in git environ.
GIT_HTTP_PROXY_AUTHMETHOD in git environ.
cs and coursier executables for coursier hooks.
language_version / additional_dependencies for languages which do not support them.
ruby-build.
default_install_hook_types which will be installed when --hook-types is not specified in pre-commit install.
--from-ref and --to-ref.
$R_HOME for R hooks.
master branch to main.
add warnings for regexes containing [\\/].
[\\/].
language: conda to use mamba or micromamba via PRE_COMMIT_USE_MAMBA=1 or PRE_COMMIT_USE_MICROMAMBA=1 respectively.
git --version in error report.
language: lua as a supported language.
setuptools to the zipapp.
go install instead of go get for go 1.18+ support.
language: r with a local renv and RENV_PROJECT set.
entry in language: meta hooks which breaks them.
#!/bin/sh on windows for hook script.
add warning for regexes containing [\/] or [/\\].
[\/] or [/\\].
bash resolving shebang-portability issues.
fail_fast at the individual hook level.
GIT_CONFIG_KEY_*, GIT_CONFIG_VALUE_*, and GIT_CONFIG_COUNT.
core.useBuiltinFSMonitor=true on windows.
submodule.recurse=1.
exit(...) with raise SystemExit(...) for portability.
add support for hooks written in dart.
dart.
post-rewrite hooks.
check-useless-excludes with exclude matching broken symlink.
pre-commit autoupdate.
fix force-push of disparate histories using git>=2.28.
check-useless-excludes and check-hooks-apply matching non-root
.pre-commit-config.yaml.
During pre-push hooks, expose local branch as PRE_COMMIT_LOCAL_BRANCH.
pre-push hooks, expose local branch as PRE_COMMIT_LOCAL_BRANCH.
Setting SKIP=... skips installation as well.
SKIP=... skips installation as well.
repo: local for r hooks.
ruby-build and rbenv.
r packages.
renv versions.
Fix race condition when stashing files in multiple parallel invocations
Give command length a little more room when running batch files on windows so underlying commands can expand further.
Fix r hooks when hook repo is a package
Improve warning for mutable ref.
post-merge hook.
r as a supported hook language.
pre-commit install on subst / network drives on windows.
local golang repositories for go 1.16.
Fix language: golang repositories containing recursive submodules
language: golang repositories containing recursive submodules
Allow ci as a top-level map for configuration for https://pre-commit.ci
ci as a top-level map for configuration for https://pre-commit.ci
rev in configuration
/* in top-level files / exclude regexes
PRE_COMMIT_REMOTE_BRANCH environment variable during pre-push hooks
language / language_version for non-installable languages
Fix crash on cygwin mismatch check outside of a git directory
Fix default value for types_or so symlink and directory can be matched
types_or so symlink and directory can be matched
Improve error message for "hook goes missing"
/* in files / exclude regexes
healthy() check for language: python on windows when the base executable has non-ascii characters.
Add types_or which allows matching multiple disparate types in a hook
types_or which allows matching multiple disparate types in a hook
language: dotnet
rbenv and language_version: default
git status / git diff commands by ignoring submodules
Fix installation of ruby hooks with language_version: default
language_version: default
Allow default language_version of system when the homedir is /
language_version of system when the homedir is /
Add --negate option to language: pygrep hooks
rbenv / ruby-build
sample-config versions
dotnet
--negate option to language: pygrep hooks
coursier (a jvm-based package manager)
healthy() check for language: node + language_version: system hooks when the system executable goes missing.
C:\PythonXX\python.exe path on windows as it caused confusion (and virtualenv can sometimes do better)
language: ruby hooks when --format-executable is present in a gemrc
Rainbow Tux (discord).cygwin / win32 mismatch error earlier to catch msys2 mismatches
-p workaround for old virtualenv
language: node installations to not symlink outside of the environment
system for defaulting
language_version for language: node / language: ruby
Improve performance of docker hooks by removing slow ps call
ps call
healthy() invalidation followed by install being reported as un-healthy().
os.replace()
Produce error message if an environment is immediately unhealthy
diff performance with many hooks
Fix node hooks when NPM_CONFIG_USERCONFIG is set
NPM_CONFIG_USERCONFIG is set
rbenv / ruby-download if system ruby is available
Your coding agent can read these notes before it upgrades. Set up the MCP server →