Release Notes
Released on 2026-08-27.
Highlights
Choose where hook toolchains come from
language_version now accepts a source preference alongside the version
request, letting you control where prek looks for a compatible toolchain when
it creates a hook environment. Use managed (the default) or system to choose
which source prek tries first while still allowing fallback and downloads. Use
only-managed or only-system to require one source.
For example, this local Ruff hook requires a Python 3.12 toolchain managed by prek:
:::yaml
repos:
- repo: local
hooks:
- id: ruff
name: ruff
language: python
entry: ruff check
additional_dependencies: [ruff]
language_version:
request: "3.12"
preference: only-managed
With only-managed, prek reuses a compatible toolchain from its managed store
or downloads one when needed. It never falls back to Python from PATH, an OS
package manager, or a version manager, so toolchain selection does not depend on
the developer or CI machine's external environment.
Existing scalar values such as language_version: "3.12" continue to work. See
toolchain management and language_version
for the full source-selection behavior. (#2613)
Breaking changes
The breaking changes in this release are mostly small cleanups, and most users should not be affected.
- Group names can no longer start with
@. This prefix is now reserved for special group selectors such as the new@ungroupedselector. (#2617) PREK_MAX_CONCURRENCYhas been removed. UsePREK_CONCURRENT_HOOKSandPREK_CONCURRENT_BATCHESto control hook and per-hook batch concurrency separately. (#2620)- The top-level
prek init-template-dircommand has been removed. Useprek util init-template-dir, orprek init-templatedirfor drop-in compatibility withpre-commit. (#2623) prek auto-updatehas been removed. Useprek update, orprek autoupdatefor drop-in compatibility withpre-commit. (#2619)
Enhancements
- Add configurable toolchain source preferences (#2613)
- Allow explicit
language: pythonto opt out of fast-path hooks (#2608) - Group
runandupdateoptions in CLI help (#2629) - Preserve terminal theme contrast for status labels (#2592)
- Add
@ungroupedgroup selector (#2617) - Retry uv installation with static musl binary (#2600)
- Support
{hook_repo}placeholder in hookentry(#2602)
Bug fixes
- Expose the git work tree to hooks running outside the git root (#2579)
- Isolate local hook environment installation (#2615)
- Preserve hook config deserialization error locations (#2573)
- Resolve hook log files from their config directory (#2580)
- Track explicit config paths as absolute paths (#2574)
Documentation
Contributors
- @jeromeheissler
- @gurgeous
- @j178
Install prek 0.5.0
Install prebuilt binaries via shell script
:::sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.0/prek-installer.sh | sh
Install prebuilt binaries via powershell script
:::sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/j178/prek/releases/download/v0.5.0/prek-installer.ps1 | iex"
Install prebuilt binaries via Homebrew
:::sh
brew install prek
Download prek 0.5.0
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
:::sh
gh attestation verify <file-path of downloaded artifact> --repo j178/prek
You can also download the attestation from GitHub and verify against that directly:
:::sh
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>