Released on 2026-03-23.
- Add experimental
language: denosupport (#1516) - Add
pretty-format-jsonas builtin hook (#915) - Add
check-vcs-permalinksas builtin hook (#1842) - Add
check-illegal-windows-namesas builtin hook (#1841) - Add
check-shebang-scripts-are-executablebuiltin hook (#1847) - Add
destroyed-symlinksbuiltin hook (#1851) - Add
file-contents-sorteras builtin hook (#1846) - Add
--allflag toprek uninstall(#1817) - Improve file pattern parse errors (#1829)
- Validate
uvbinary after download (#1825)
- Fix workspace-relative added file paths (#1852)
- Relax alias-anchor ratio check for check-yaml (#1839)
- @j178
- @shaanmajid
- @mvanhorn
- @feliblo
- @Tiryoh
Due to a release process failure, this version was republished as 0.3.8.
Released on 2026-03-16.
- Allow selectors for hook ids containing colons (#1782)
- Rename
prek install-hookstoprek prepare-hooksandprek install --install-hookstoprek install --prepare-hooks(#1766) - Retry auth-failed repo clones with terminal prompts enabled (#1761)
- Optimize
detect_private_keyby chunked reading and using aho-corasick (#1791) - Optimize
fix_byte_order_markerby shifting file contents in place (#1790)
- Align stage defaulting behavior with pre-commit (#1788)
- Make sure child output is drained in the PTY subprocess (#1768)
- fix(golang): use
GOTOOLCHAIN=localwhen probing system go (#1797)
- Disambiguate “hook” terminology by renaming "Git hooks" to "Git shims" (#1776)
- Document compatibility with pre-commit (#1767)
- Update configuration.md with TOML 1.1 notes (#1764)
- Sync latest identify tags (#1798)
- @github-actions
- @j178
- @pcastellazzi
- @deadnews
- @copilot-swe-agent
Released on 2026-03-09.
- Add automatic Ruby download support using rv binaries (#1668)
- Adjust open file limit on process startup (#1705)
- Allow parallel gem retry (#1732)
- Enable system-proxy feature on reqwest (#1738)
- Expose
--git-dirto force hook installation target (#1723) - Pass
--quiet,--verbose, and--no-progressthroughprek installinto generated hook scripts (#1753) - Respect
core.sharedRepositoryfor hook permissions (#1755) - Support legacy mode hook script (#1706)
- rust: support
cli:git dependency 4th segment package disambiguation (#1747)
- Fix Python
__main__.pyentry (#1741) - python: strip
UV_SYSTEM_PYTHONfromuv venvandpip installcommands (#1756)
- Sync latest identify tags (#1733)
- @Dev-iL
- @tennox
- @shaanmajid
- @is-alnilam
- @github-actions
- @j178
Released on 2026-02-28.
- Allow
pass_filenamesto accept a positive integer (#1698) - Install and compile gems in parallel (#1674)
- Sync identify file-type mappings with pre-commit identify (#1660)
- Use
--lockedfor Rustcargo installcommands (#1661) - Add
PREK_MAX_CONCURRENCYenvironment variable for configuring maximum concurrency (#1697) - Add
PREK_LOG_TRUNCATE_LIMITenvironment variable for configuring log truncation (#1679) - Add support for
python -m prek(#1686)
- Skip invalid Rust toolchains instead of failing (#1699)
- Bitset-based TagSet refactor: precompute tag masks and speed up hook type filtering (#1665)
- Document
winget install j178.Prek(#1670)
- @uplsh580
- @Svecco
- @dbast
- @drichardson
- @JP-Ellis
- @j178
- @is-alnilam
- @copilot-swe-agent
Released on 2026-02-15.
- Read Python version specifier from hook repo
pyproject.toml(#1596) - Add
#:schemadirectives to generated prek.toml (#1597) - Add
prek util list-builtinscommand (#1600) - Expand install source detection to
mise,uv tool,pipx, andasdf(#1605, #1607) - Add progress bar to
cache cleanand show removal summary (#1616) - Make
yaml-to-tomlCONFIG argument optional (#1593) prek uninstallremoves legacy scripts too (#1622)
- Fix underflow when formatting summary output (#1626)
- Match
files/excludefilter against relative path of nested project (#1624) - Select
musllinuxwheel tag for uv on musl-based distros (#1628)
- Clarify
prek listdescription (#1604)
- @ichoosetoaccept
- @shaanmajid
- @soraxas
- @9999years
- @j178
Released on 2026-02-06.
-
prek.tomlis here!You can now use
prek.tomlas an alternative to.pre-commit-config.yamlfor configuring prek.prek.tomlmirrors the structure of.pre-commit-config.yaml, but TOML is less error-prone. Your existing.pre-commit-config.yamlwill continue to work, but for new users and new projects,prek.tomlmay make more sense. If you want to switch, runprek util yaml-to-tomlto convert YAML configs toprek.toml. See configuration docs for details.For example, this config:
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: check-yaml
Can be written as
prek.tomllike this:[[repos]] repo = "https://github.com/pre-commit/pre-commit-hooks" rev = "v6.0.0" hooks = [ { id = "check-yaml" } ]
-
serde-yamlhas been replaced withserde-saphyrWe replaced the long-deprecated
serde-yamlcrate withserde-saphyrfor YAML parsing. It is written in safe Rust and has better error messages, performance, and security. This lets us provide precise location information for configuration parsing errors, which should make it easier to fix config issues.For example, this invalid config:
repos: - repo: https://github.com/crate-ci/typos hooks: - id: typos
Before:
$ prek run error: Failed to parse `.pre-commit-config.yaml` caused by: Invalid remote repo: missing field `rev`
Now:
$ prek run error: Failed to parse `.pre-commit-config.yaml` caused by: error: line 2 column 5: missing field `rev` at line 2, column 5 --> <input>:2:5 | 1 | repos: 2 | - repo: https://github.com/crate-ci/typos | ^ missing field `rev` at line 2, column 5 3 | hooks: 4 | - id: typos |
-
prek utilsubcommandsWe added a new
prek utiltop-level command for miscellaneous utilities that don't fit into other categories. The first two utilities are:prek util identify: shows the identification tags of files that prek uses for file filtering, which can be useful for debugging and writingtypes/types_or/exclude_typesfilters.prek util yaml-to-toml: converts.pre-commit-config.yamltoprek.toml.
We also moved
prek init-template-dirunderprek utilfor better organization. The oldprek init-template-dircommand is still available (hidden) as an alias for backward compatibility.
- Add
prek util identifysubcommand (#1554) - Add
prek util yaml-to-tomlto convert.pre-commit-config.yamltoprek.toml(#1584) - Detect install source for actionable upgrade hints (#1540)
- Detect prek installed by the standalone installer (#1545)
- Implement
serialize_yaml_scalarusingserde-saphyr(#1534) - Improve max cli arguments length calculation (#1518)
- Move
identifyandinit-template-dirunder theprek utiltop-level command (#1574) - Replace serde-yaml with serde-saphyr (again) (#1520)
- Show precise location for config parsing error (#1530)
- Support
Julialanguage (#1519) - Support
prek.toml(#1271) - Added
PREK_QUIETenvironment variable support (#1513) - Remove upper bound constraint of uv version (#1588)
- Do not make the child a session leader (#1586)
- Fix FilePattern schema to accept plain strings (#1564)
- Use semver fallback sort when tag timestamps are equal (#1579)
- Add
OpenClawto the list of users (#1517) - Add
cachix/devenv,apache/lucene,copper-project/copper-rsas projects using prek (#1531, #1514, #1569) - Add document about authoring remote hooks (#1571)
- Add
llms.txtgeneration for LLM-friendly documentation (#1553) - Document using
--refreshto pick up.prekignorechanges (#1575) - Fix PowerShell completion instruction syntax (#1568)
- Update quick start to use
prek.toml(#1576)
- Include
prek.tomlin run hint for config filename (#1578)
- @fatelei
- @domenkozar
- @makeecat
- @fllesser
- @j178
- @copilot-swe-agent
- @oopscompiled
- @rmuir
- @shaanmajid
Released on 2026-01-31.
- Add
language: swiftsupport (#1463) - Add
language: haskellsupport (#1484) - Extract go version constraint from
go.mod(#1457) - Warn when config file exists but fails to parse (#1487)
- Add GitHub artifact attestations to release and build-docker workflow (#1494, #1497)
- Allow
GIT_CONFIG_PARAMETERSfor private repository authentication (#1472) - Show progress bar when running builtin hooks (#1504)
- Include
CocoIndexas a project using prek (#1477) - Add commands for artifact verification using GitHub Attestations (#1500)
- @halms
- @Haleshot
- @simono
- @tisonkun
- @fllesser
- @j178
- @shaanmajid
Released on 2026-01-22.
prek cache gc(also available viaprek gcfor pre-commit compatibility) is finally here! You can now runprek cache gcto clean up unused repos, hook envs and tool versions from prek cache.language: bunis now supported, making it possible to write and run hooks with Bun.
-
Implement
prek cache gc(#1410) -
Add
language: bunsupport (#1411)- Use
git ls-remote --tagsto list bun versions (#1439)
- Use
-
Accept
--stageas an alias for--hook-stageinprek run(#1398) -
Expand
~tilde inPREK_HOME(#1431) -
Support refs to trees (#1449)
- Avoid file lock warning for in-process contention (#1406)
- Resolve relative repo paths from config file directory (#1443)
- fix: use
split()instead ofresolve(None)for builtin hook argument parsing (#1415)
- Add
simple-iconsandast-grepto the users of prek (#1403) - Improve JSON schema for
repofield (#1432) - Improve JSON schema for builtin and meta hooks (#1427)
- Add pronunciation entry to FAQ (#1442)
- Add commitizen to the list of projects using prek (#1413)
- Move docs to zensical (#1421)
- Refactor config layout (#1407)
- @shaanmajid
- @KevinGimbel
- @jtamagnan
- @jmeickle-theaiinstitute
- @YazdanRa
- @j178
- @mschoettle
- @tisonkun
Released on 2026-01-18.
- Build binaries using minimal-size profile (#1376)
- Check for duplicate keys in
check-json5builtin hook (#1387) - Preserve quoting style in
auto-update(#1379) - Show warning if file lock acquiring blocks for long time (#1353)
- Singleflight Python health checks with cached interpreter info (#1381)
- Document language support details (#1380)
- Document that
check-json5now rejects duplicate keys (#1391)
- @j178
Released on 2026-01-16.
files / exclude now support globs (including glob lists), making config filters much easier to read and maintain than heavily-escaped regex.
Before (regex):
files: "^(src/.*\\.rs$|crates/[^/]+/src/.*\\.rs$)"After (glob list):
files:
glob:
- src/**/*.rs
- crates/**/src/**/*.rs- Add
check-json5as builtin hooks (#1367) - Add glob list support for file patterns (
filesandexclude) (#1197)
- Fix missing commit hash from version info (#1352)
- Remove git env vars from
uv pip installsubprocess (#1355) - Set
TERM=dumbunder PTY to prevent capability-probe hangs (#1363)
- Add
home-assistant/coreto the users of prek (#1350) - Document builtin hooks (#1370)
- Explain project configuration scope (#1373)
- @Goldziher
- @yihong0618
- @j178
- @shaanmajid
- @ulgens
Released on 2026-01-13.
- Avoid running
git difffor skipped hooks (#1335) - More accurate command line length limit calculation (#1348)
- Raise platform command line length upper limit (#1347)
- Use
/bin/shin generated git hook scripts (#1333)
- Avoid rewriting if config is up-to-date (#1346)
- Add
tyto the users of prek (#1342) - Add
ruffto the users of prek (#1334) - Complete configuration document (#1338)
- Document UV environment variable inheritance in prek (#1339)
- @copilot-swe-agent
- @MatthewMckee4
- @yihong0618
- @j178
Released on 2026-01-07.
python/cpython is now using prek. That’s the highlight of this release!
- Add hook-level
envoption to set environment variables for hooks (#1279) (#1285) - Support apple's
containerfor docker language (#1306) - Skip cookiecutter template directories like
{{cookiecutter.project_slug}}during project discovery (#1316) - Use global
CONCURRENCYfor repo clone (#1292) - untar: disallow external symlinks (#1314)
- Exit with success if no hooks match the hook stage (#1317)
- Fix Go template string to detect rootless podman (#1302)
- Panic on overly long filenames instead of silently dropping files (#1287)
- Add
python/cpythonto users (#1308) - Add
MoonshotAI/kimi-clito users (#1286) - Drop powerpc64 wheels (#1319)
- @ulgens
- @loganaden
- @danielparks
- @branchv
- @j178
- @yihong0618
- @mocknen
- @copilot-swe-agent
- @ZhuoZhuoCrayon
Released on 2025-12-27.
- Use
git cat-file -ein check if a rev exists (#1277)
- Fix
prioritynot applied for remote hooks (#1281) - Report config file parsing error in
auto-update(#1274) - Unset
GIT_DIRfor auto-update (#1269)
- @j178
- @branchv
Released on 2025-12-23.
- Build and publish docker image to
ghcr.io/j178/prek(#1253) - Support git urls for rust dependencies (#1256)
- Ensure running
uv pip installinside the remote repo path (#1262) - Fix
check-added-large-filesfor traced files (#1260) - Respect
GIT_DIRset by git (#1258)
- Add docker integration docs (#1254)
- Clarify
priorityscope across repos (#1251) - Improve documentation for configurations (#1247)
- Render changelog in document site (#1248)
- @j178
- @branchv
Released on 2025-12-20.
🚀 This release introduces priority-based parallel hook execution: prek can run multiple hooks in parallel when they share the same priority, which can be a huge speed-up for many configs. See configuration docs for priority.
- Allow uv reading user-level or system-level configuration files (#1227)
- Implement
check-case-conflictas builtin hook (#888) - Implement
prioritybased parallel execution (#1232)
- Fix
check-executable-have-shebangs"command line too long" error on Windows (#1236)
- Add FastAPI to the list of projects using prek (#1241)
- Document hook_types flag and default_install_hook_types behavior (#1225)
- Improve documentation for
priority(#1245) - Mention prek can be installed via
taiki-e/install-action@prek(#1234)
- @j178
- @copilot-swe-agent
- @lmmx
Released on 2025-12-13.
In this release, prek adds support for the --cooldown-days option in the prek auto-update command.
This option allows users to skip releases that are newer than a specified number of days.
It is useful to mitigate open source supply chain risks by avoiding very recent releases that may not have been widely adopted or vetted yet.
Big thanks to @lmmx for driving this feature!
- Support
--cooldown-daysinprek auto-update(#1172)- Prefer tag creation timestamp in
--cooldown-days(#1221)
- Prefer tag creation timestamp in
- Use
cargo installfor packages in workspace (#1207)
- Set
CARGO_HOMEforcargo metadata(#1209)
- @j178
- @lmmx
Released on 2025-12-09.
- Fallback to use remote repo package root instead of erroring (#1203)
- Prepend toolchain bin directory to PATH when calling cargo (#1204)
- Use
cargofrom installed toolchain (#1202)
- @j178
Released on 2025-12-08.
In this release:
- Rust hooks are now fully supported with automatic toolchain management, including package discovery in virtual workspaces. Big thanks to @lmmx for driving this.
- Added a
prek cache sizesubcommand so you can quickly see how much cache space prek is using. Thanks @MatthewMckee4! - Nested workspaces are easier to reason about: set
orphan: trueon a project to isolate it from parents so its files are processed only once.
Want to show your project runs on prek? Add our README badge to your docs or repo homepage:
- Support Rust language (#989)
- Add
prek cache sizecommand (#1183) - Support orphan projects (#1129)
- Fallback to
manualstage for hooks specified directly in command line (#1185) - Make go module cache read-writeable (thus deletable) (#1164)
- Provide more information when validating configs and manifests (#1182)
- Improve error message for invalid number of arguments to hook-impl (#1196)
- Disable git terminal prompts (#1193)
- Prevent
post-checkoutdeadlock when cloning repos (#1192) - Prevent color output when redirecting stdout to a file (#1159)
- Add MacPorts to installation methods (#1157)
- Add a FAQ page explaining
prek install --install--hooks(#1162)
- @MatthewMckee4
- @lmmx
- @j178
- @joshmarkovic
- @frazar
- @jmelahman
- @drainpixie
Released on 2025-11-26.
- Simplify
fix_byte_order_markerhook (#1136) - Simplify
trailing-whitespacehook to improve performance (#1135)
- Close stdin for hook subcommands (#1155)
- Fix parsing Python interpreter info containing non-UTF8 chars (#1141)
- @chilin0525
- @nblock
- @j178
Released on 2025-11-21.
In this release, prek adds a new special repo type repo: builtin that lets you use built‑in hooks.
It basically gives you another way to use the existing built‑in fast path for pre‑commit‑hooks, but without needing to point to an external repo.
Since prek doesn’t have to clone anything or set up a virtual environment, repo: builtin hooks work even in air‑gapped environments.
For more details, see: https://prek.j178.dev/builtin/
- Do not recurse into submodules during workspace discovery (#1121)
- Do not dim the hook output (#1126)
- Further reduce max cli length for cmd.exe on Windows (#1131)
- Revert "Disallow hook-level
minimum_prek_version(#1101)" (#1120)
- docs: refer airflow as Apache Airflow (#1116)
- @j178
- @Lee-W
Released on 2025-11-18.
- Revert back to use
serde_yamlagain (#1112)
- @j178
Released on 2025-11-18.
- Disallow hook-level
minimum_prek_version(#1101) - Do not require a project in
prek init-template-dir(#1109) - Make sure
uv pip installuses the Python from virtualenv (#1108) - Restore using
serde_yamlincheck-yamlhook (#1106)
- @j178
Released on 2025-11-17.
prek is now available on crates.io! You can build prek from source via cargo install prek or cargo binstall prek, for more details see Installation.
- Clean up hook environments when install fails (#1085)
- Prepare for publishing prek to crates.io (#1088)
- Replace
serde-yamlwithserde_saphyr(#1087) - Warn unexpected keys in repo and hook level (#1096)
- Fix
prek init-template-dirfails in non-git repo (#1093)
- @j178
Released on 2025-11-14.
- Support
PREK_CONTAINER_RUNTIME=podmanto override container runtime (#1033) - Support rootless container runtime (#1018)
- Support
language: unsupportedandlanguage: unsupported_scriptintroduced in pre-commit v4.4 (#1073) - Tweak to regex used for mountinfo (#1037)
- Fix
--filesargument - files referencing other projects aren’t being filtered (#1064) - Unset
objectFormatingit init(#1048)
- Add scoop to installation (#1067)
- Document workspace file visibility constraints (#1071)
- Add
iceberg-python,msgspecandhumanizeto "who is using prek" (#1039, #1042, #1063)
- Add a hint to install when running inside a sub-project (#1045)
- Add a hint to use
--refreshwhen no configuration found (#1046) - Run uv pip install from the current directory (#1069)
- @zzstoatzz
- @st1971
- @yihong0618
- @j178
- @copilot-swe-agent
- @idlsoft
Released on 2025-11-04.
- Add Ruby support (no download support yet) (#993)
- Implement
check-executables-have-shebangsas builtin-hook (#924) - Improve container id detection (#1031)
- Fix YAML with nested merge keys (#1020)
- Treat every file as executable on Windows to keep compatibility with pre-commit (#980)
- Document that .gitignore is respected by default during workspace discovery (#983)
- Update project stability status (#1005)
- Add FastMCP to "who is using prek" (#1034)
- Add attrs to "who is using prek" (#981)
- @my1e5
- @j178
- @zzstoatzz
- @lmmx
- @feliblo
- @yihong0618
- @st1971
- @is-alnilam
Released on 2025-10-27.
- Add a warning for unimplemented hooks (#976)
- Allow using system trusted store by
PREK_NATIVE_TLS(#959)
- Do not check for
scriptsubprocess status (#964) - Fix compatibility with older luarocks (#967)
- Fix local relative path in
try-repo(#975)
- Update language support status (#970)
- @yihong0618
- @st1971
- @j178
Released on 2025-10-24.
- Support
language: luahooks (#954) - Support
language_version: system(#949) - Implement
no-commit-to-branchas builtin hook (#930) - Improve styling for stashing error message (#953)
- Support nix-shell style shebang (#929)
- Add a page about "Quick start" (#934)
- Add kreuzberg to "who is using prek" (#936)
- Clarify minimum mise version required to use
mise use prek(#931)
- @fllesser
- @j178
Released on 2025-10-18.
- Add
--fail-fastCLI flag to stop after first hook failure (#908) - Add collision detection for hook env directories (#914)
- Error out if not projects found (#913)
- Implement
check-xmlas builtin hook (#894) - Implement
check-merge-conflictas builtin hook (#885) - Use line-by-line reading in
check-merge-conflict(#910)
- Fix pygrep hook env health check (#921)
- Group
pygrepwithpythonwhen installing pygrep hooks (#920) - Ignore
.prefixed directory when searching managed Python for pygrep (#919)
- Add contribution guide (#912)
- @AdityasWorks
- @j178
- @kenwoodjw
- @lmmx
Released on 2025-10-16.
- Lazily check hook env health (#897)
- Implement
check-symlinksas builtin hook (#895) - Implement
detect-private-keyas builtin hook (#893)
- Download files to scratch directory to avoid cross-filesystem rename (#889)
- Fix golang hook install local dependencies (#902)
- Ignore the user-set
UV_MANAGED_PYTHON(#900)
- Add package metadata for cargo-binstall (#882)
- @j178
- @lmmx
Released on 2025-10-14.
This is a re-release of 0.2.6 that fixes an issue where publishing to npmjs.com failed.
- Use relative path with
--cdin the generated hook script (#868) - Fix autoupdate
revrendering for "float-like" version numbers (#867)
- Add Nix and Conda installation details (#874)
- @mondeja
- @j178
- @bbannier
- @yihong0618
- @colindean
Released on 2025-10-10.
- Implement
prek try-repo(#797) - Add fallback mechanism for prek executable in git hooks (#850)
- Ignore config error if the directory is skipped (#860)
- Fix panic when parse config failed (#859)
- Add a Dockerfile (#852)
- @j178
- @luizvbo
Released on 2025-10-07.
- Add support for
.prekignoreto ignore directories from project discovery (#826) - Make
prek auto-update --jobsdefault to 0 (which uses max available parallelism) (#833) - Improve install message when installing for a subproject (#847)
- Convert extension to lowercase before checking file tags (#839)
- Support pass multiple files like
prek run --files a b c d(#828)
- Add requests-cache to "Who is using prek" (#824)
- @SigureMo
- @j178
Released on 2025-09-29.
- Add
--dry-runtoprek auto-update(#806) - Add a global
--log-fileflag to specify the log file path (#817) - Implement hook health check (#798)
- Show error message in quiet mode (#807)
- Write
failentry into output directly (#811)
- Update docs about uv in prek (#810)
- Add a security policy for reporting vulnerabilities (#804)
- @mondeja
- @j178
Released on 2025-09-26.
- Add
prek cache dir, moveprek gcandprek cleanunderprek cache(#795) - Add a hint when hooks failed in CI (#800)
- Add support for specifying
PREK_UV_SOURCE(#766) - Run docker container with
--init(#791) - Support
--allow-multiple-documentsforcheck-yaml(#790)
- Fix interpreter identification (#801)
- Add PaperQA2 to "Who is using prek" (#793)
- Clarify built-in hooks activation conditions and behavior (#781)
- Deduplicate docs between README and MkDocs site (#792)
- Mention
j178/prek-actionin docs (#753)
- Bump
pre-commit-hooksin sample-config to v6.0.0 (#761) - Improve arg parsing for builtin hooks (#789)
- @mondeja
- @akx
- @bxb100
- @j178
- @onerandomusername
- auto-update: prefer tags that are most similar to the current version (#719)
- Fix
git --no-pager diffcommand syntax upon failures (#746) - Clean working tree of current workspace only (#747)
- Use concurrent read and write in
git check-attr(#731)
- @j178
- @matthiask
- @AdrianDC
- @onerandomusername
This is a huge milestone release that introduces Workspace Mode — first‑class monorepo support.
prek now allows you to manage multiple projects with their own .pre-commit-config.yaml within a single repository.
It auto‑discovers nested projects, runs hooks in project scope, and provides flexible selectors to target specific projects and hooks.
This makes prek a powerful tool for managing pre-commit hooks in complex repository structures.
For more details, see Workspace Mode. If you encounter any issues, please report them at Issues.
Note: If you ran prek install in a repo before, you gonna need to run prek install again to replace the old git hook scripts for the workspace mode to work.
Special thanks to @potiuk for all the help and feedback in designing and testing this feature!
For detailed changes between 0.1.6 and 0.2.0, see 0.2.0-alpha.2, 0.2.0-alpha.3, 0.2.0-alpha.4, and 0.2.0-alpha.5.
- Fix hook-impl don't run hooks when specified allow missing config (#716)
- fix: support py38 for pygrep (#723)
- Fix installation on fish and with missing tags (#721)
- @onerandomusername
- @kushudai
- @j178
- Fix
trailing-whitespace&mixed-line-endingwrite file path (#708) - Fix file path handling for meta hooks in workspace mode (#699)
- @kushudai
- @j178
- Bring back
.pre-commit-config.ymlsupport (#676) - Ignore config file from hidden directory (#677)
- Support selectors in
prek install/install-hooks/hook-impl(#683)
- Do not set GOROOT for system install Go when running go hooks (#694)
- Fix
check_tomlandcheck_yamlin workspace mode (#688)
- docs(manifest): Correctly specify metadata for all packages (#687)
- refactor(cli): Clean up usage of clap (#689)
- @j178
- @epage
- @aravindan888
- Add a warning to
hook-implwhen the script needs reinstall (#647)
- Add a notice to rerun
prek installwhen upgrading to 0.2.0 (#646)
- @j178
This is a re-release of 0.2.0-alpha.1, fixed an issue that prereleases are not published to PyPI.
This is a huge milestone release that introduces Workspace Mode — first‑class monorepo support.
prek now allows you to manage multiple projects with their own .pre-commit-config.yaml within a single repository. It auto‑discovers nested projects, runs hooks in project scope, and provides flexible selectors to target specific projects and hooks. This makes prek a powerful tool for managing pre-commit hooks in complex repository structures.
Note: If you ran prek install in a repo before, you gonna need to run prek install again to replace the old git hook scripts for the workspace mode to work.
For more details, see Workspace Mode. If you encounter any issues, please report them at Issues.
Special thanks to @potiuk for all the help and feedback in designing and testing this feature!
- Support multiple
.pre-commit-config.yamlin a workspace (monorepo mode) (#583) - Implement project and hook selector (#623)
- Add
prek run --cd <dir>to change directory before running (#581) - Support
prek listin workspace mode (#586) - Support
prek install|install-hooks|hook-impl|init-template-dirin workspace mode (#595) - Implement
auto-updatein workspace mode (#605) - Implement selector completion in workspace mode (#639)
- Simplify
auto-updateimplementation (#608) - Add a
--dry-runflag toprek run(#622) - Cache workspace discovery result (#636)
- Fix local script hook entry path in workspace mode (#603)
- Fix
hook-implallow missing config (#600) - Fix docker mount in workspace mode (#638)
- Show project line when project is not root (#637)
- Publish docs to
https://prek.j178.dev(#627) - Improve workspace docs about skips rule (#615)
- Add an full example and update docs (#582)
- Reuse hook env only for exactly same dependencies (#609)
- Workaround checkout file failure on Windows (#616)
- Implement
pre-pushhook type (#598) - Implement
pre-commit-hooks:check_yamlas builtin hook (#557) - Implement
pre-commit-hooks:check-tomlas builtin hook (#564) - Add validation for file type tags (#565)
- Ignore NotFound error in extracting metadata log (#597)
- Update project status (#578)
- Improve docker image labels (#551)
- Fix
trailing-whitespacecannot handle file contains invalid utf-8 data (#544) - Fix trailing-whitespace eol trimming (#546)
- Fix trailing-whitespace markdown eol trimming (#547)
- Add authlib to
Who are using prek(#550)
- Support PEP 723 scripts for Python hooks (#529)
- Fix Python hook stderr are not captured (#530)
- Add an error context when reading manifest failed (#527)
- Add a renovate rule to bump bundled uv version (#528)
- Disable semantic commits for renovate PRs (#538)
- Add check for missing hooks in new revision (#521)
- Fix
language: scriptentry join issue (#525)
- Add OpenLineage to prek users (#523)
- Drop support
.ymlconfig file (#493)
- Add moving rev warning (#488)
- Implement
prek auto-update(#511) - Support local path as a
repourl (#513)
- Fix recursion limit when checking deeply nested json (#507)
- Fix rename tempfile across device (#508)
- Fix build on s390x (#518)
- docs: install prek with mise (#510)
- Build wheels for more platforms (#489)
- Fix
git commit -adoes not pick up staged files correctly (#487)
- Fix
inde.lock file existserror when runninggit commit -porgit commit -a(#482) - Various fixes to
init-templdate-dirand directory related bug (#484)
- Clone repo temporarily into scratch directory (#478)
- Don’t show the progress bar if there’s no need for cloning or installing hooks (#477)
- Support
language_version: ltsfor node (#473)
- Disable
prek self updatefor package managers (#468) - Download uv from github releases directly (#464)
- Find
uvalongside theprekbinary (#466) - Run hooks with pty if color enabled (#471)
- Warn unexpected keys in config (#463)
- Canonicalize prek executable path (#467)
- Add "Who are using prek" to README (#458)
- Add check for
minimum_prek_version(#437) - Make
--to-refdefault to HEAD if--from-refis specified (#426) - Support downloading uv from pypi and mirrors (#449)
- Write trace log to
$PREK_HOME/prek.log(#447) - Implement
mixed_line_endingas builtin hook (#444) - Support
--output-format=jsoninprek list(#446) - Add context message to install error (#455)
- Add warning for non-existent hook id (#450)
- Refactor
fix_trailing_whitespace(#411)
- Calculate more accurate max cli length (#442)
- Fix uv install on Windows (#453)
- Static link
liblzma(#445)
- Add dynamic completion of hook ids (#380)
- Implement
prek listto list available hooks (#424) - Implement
pygreplanguage support (#383) - Support
prek runmultiple hooks (#423) - Implement
check_jsonas builtin hook (#416)
- Avoid reading whole file into memory in
fix_end_of_fileand make it consistent withpre-commit-hooks(#399)
- Do not set
GOROOTandGOPATHfor system found go (#415)
In this release, we've renamed the project to prek from prefligit. It's shorter so easier to type, and it avoids typosquatting with preflight.
This means that the command-line name is now prek, and the PyPI package is now listed as prek.
And the Homebrew will be updated to prek as well.
And previously, the cache directory was ~/.cache/prefligit, now it is ~/.cache/prek.
You'd have to delete the old cache directory manually, or run prefligit clean to clean it up.
Then uninstall the old prefligit and install the new prek from scratch.
- Relax uv version check range (#396)
- Rename to
prekfromprefligit(#402)
- Add value hint to
prefligit runflags (#373) - Check minimum supported version for uv found from system (#352)
- Fix
check_added_large_filesparameter name (#389) - Fix
npm installon Windows (#374) - Fix docker mount options (#377)
- Fix identify tags for
Pipfile.lock(#391) - Fix identifying symlinks (#378)
- Set
GOROOTwhen installing golang hook (#381)
- Add
--directorytoprefligit run(#358) - Implement
tags_from_interpreter(#362) - Set GOBIN to
<hook-env>/bin, set GOPATH to$PREGLIGIT_HOME/cache/go(#369)
- Add
nodeto PATH when runningnpm(#371) - Fix bug that default hook stage should be pre-commit (#367)
- Fix cache dir permission before clean (#368)
- Move
Projectintoworkspacemodule (#364)
- Support golang hooks and golang toolchain management (#355)
- Add
--last-commitflag toprefligit run(#351)
- Add migration section to README (#354)
- Add
--install-linkstonpm install(#347) - Fix large file check to use staged_get instead of intent_add (#332)
- Impl
FromStrfor language request (#338)
- Fix node path match, add tests (#339)
- Skipped hook name should be taken into account for columns (#335)
- Add
sample-config --fileto write sample config to file (#313) - Cache computed
dependencieson hook (#319) - Cache the found path to uv (#323)
- Improve
sample-configwriting file (#314) - Reimplement find matching env logic (#327)
- Fix issue that
entryofpygrepis not shell commands (#316) - Support
python311as a valid language version (#321)
- Improve error message for hook (#308)
- Improve error message for hook installation and run (#310)
- Improve hook invalid error message (#307)
- Parse
entrywhen constructing hook (#306) - Rename
autoupdatetoauto-update,init-templatedirtoinit-template-dir(#302)
- Fix
end-of-file-fixerreplaces\r\nwith\n(#311)
In this release, language: node hooks are fully supported now (finally)!.
Give it a try and let us know if you run into any issues!
- Support
nodejslanguage hook (#298) - Show unimplemented message earlier (#296)
- Simplify npm installing dependencies (#299)
- Update readme (#300)
- Show unimplemented status instead of panic (#290)
- Try default uv managed python first, fallback to download (#291)
- Update Rust crate fancy-regex to 0.16.0 (#286)
- Update Rust crate indicatif to 0.18.0 (#287)
- Update Rust crate pprof to 0.15.0 (#288)
- Update Rust crate serde_json to v1.0.142 (#285)
- Update astral-sh/setup-uv action to v6 (#289)
- Add
PREFLIGIT_NO_FAST_PATHto disable Rust fast path (#272) - Improve subprocess error message (#276)
- Remove
LanguagePreferenceand improve language check (#277) - Support downloading requested Python version automatically (#281)
- Implement language specific version parsing (#273)
- Ignore
config not stagederror for config outside the repo (#270)
- Support reading
.pre-commit-config.ymlas well (#213) - Refactor language version resolution and hook install dir (#221)
- Implement
prefligit install-hookscommand (#258) - Implement
pre-commit-hooks:end-of-file-fixerhook (#255) - Implement
pre-commit-hooks:check_added_large_fileshook (#219) - Implement
scriptlanguage hooks (#252) - Implement node.js installer (#152)
- Use
-vto show only verbose message,-vvshow debug log,-vvvshow trace log (#211) - Write
.prefligit-repo.jsoninside cloned repo (#225) - Add language name to 'not yet implemented' messages (#251)
- Do not install if no additional dependencies for local python hook (#195)
- Ensure flushing log file (#261)
- Fix zip deflate (#194)
- Bump to Rust 1.88 and
cargo update(#254) - Upgrade to Rust 2024 edition (#196)
- Bump uv version (#260)
- Simplify archive extraction implementation (#193)
- Use
astral-sh/rs-async-zip(#259) - Use
ubuntu-latestfor release action (#216) - Use async closure (#200)
Warning: This release changed the store layout, it's recommended to delete the old store and install from scratch.
To delete the old store, run:
rm -rf ~/.cache/prefligit- Restructure store folders layout (#181)
- Fallback some env vars to to pre-commit (#175)
- Save patches to
$PREFLIGIT_HOME/patches(#182)
- Do not publish to crates.io (#191)
- Bump cargo-dist to v0.28.0 (#170)
- Bump uv version to 0.6.0 (#184)
- Configure Renovate (#168)
- Format sample config output (#172)
- Make env vars a shareable crate (#171)
- Reduce String alloc (#166)
- Skip common git flags in command trace log (#162)
- Update Rust crate clap to v4.5.29 (#173)
- Update Rust crate which to v7.0.2 (#163)
- Update astral-sh/setup-uv action to v5 (#164)
- Upgrade Rust to 1.84 and upgrade dependencies (#161)
Due to a mistake in the release process, this release is skipped.
- Move home dir to
~/.cache/prefligit(#154) - Implement trailing-whitespace in Rust (#137)
- Limit hook install concurrency (#145)
- Simplify language default version implementation (#150)
- Support install uv from pypi (#149)
- Add executing command to error message (#141)
- Use hook
argsin fast path (#139)
- Remove hook install_key (#153)
- Remove pyvenv.cfg patch (#156)
- Try to use D drive on Windows CI (#157)
- Tweak trailing-whitespace-fixer (#140)
- Upgrade dist to v0.27.0 (#158)
- Uv install python into tools path (#151)
- Add progress bar for hook init and install (#122)
- Add color to command help (#131)
- Add commit info to version display (#130)
- Support meta hooks reading (#134)
- Implement meta hooks (#135)
- Fix same repo clone multiple times (#125)
- Fix logging level after renaming (#119)
- Fix version tag distance (#132)
- Disable uv cache on Windows (#127)
- Impl Eq and Hash for ConfigRemoteRepo (#126)
- Make
pass_env_varsruns on Windows (#133) - Run cargo update (#129)
- Update Readme (#128)
In this release, we’ve renamed the project to prefligit (a deliberate misspelling of preflight) to prevent confusion with the existing pre-commit tool. For further information, refer to issue #73.
- The command-line name is now
prefligit. We suggest uninstalling any previous version ofpre-commit-rsand installingprefligitfrom scratch. - The PyPI package is now listed as
prefligit. - The Cargo package is also now
prefligit. - The Homebrew formula has been updated to
prefligit.
- Support
docker_imagelanguage (#113) - Support
init-templatedirsubcommand (#101) - Implement get filenames from merge conflicts (#103)
- Fix
prefligit install --hook-typename (#102)
- Apply color option to log (#100)
- Improve tests (#106)
- Remove intermedia Language enum (#107)
- Run
cargo clippyin the dev drive workspace (#115)
v0.0.4 release process was broken, so this release is a actually a re-release of v0.0.4.
- Improve subprocess trace and error output (#92)
- Stash working tree before running hooks (#96)
- Add color to command trace (#94)
- Improve hook output display (#79)
- Improve uv installation (#78)
- Support docker language (#67)
- Improve subprocess trace and error output (#92)
- Stash working tree before running hooks (#96)
- Add color to command trace (#94)
- Improve hook output display (#79)
- Improve uv installation (#78)
- Support docker language (#67)
- Check uv installed after acquired lock (#72)
- Add copyright of the original pre-commit to LICENSE (#74)
- Add profiler (#71)
- Publish to PyPI (#70)
- Publish to crates.io (#75)
- Rename pypi package to
pre-commit-rusty(#76)
- Add
pre-commit self update(#68) - Auto install uv (#66)
- Generate shell completion (#20)
- Implement
pre-commit clean(#24) - Implement
pre-commit install(#28) - Implement
pre-commit sample-config(#37) - Implement
pre-commit uninstall(#36) - Implement
pre-commit validate-config(#25) - Implement
pre-commit validate-manifest(#26) - Implement basic
pre-commit hook-impl(#63) - Partition filenames and delegate to multiple subprocesses (#7)
- Refactor xargs (#8)
- Skip empty config argument (#64)
- Use
fancy-regex(#62) - feat: add fail language support (#60)
- Fix stage operate_on_files (#65)