prek

j178MIT活跃维护

用 Rust 重写的 Git hook 管理器,可直接替代 pre-commit,在提交前快速执行代码检查,省去 Python 启动开销。

⚡ A fast Git hook manager written in Rust, designed as a drop-in alternative to pre-commit, reimagined.

v0.5.10发布于 2026-11-04 01:50 UTC8,768star +20 / 7 天252fork同步于 2026-11-10 11:31 UTC

怎么上手

由 README 提炼,执行前请确认
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.10/prek-installer.sh | sh
uv tool install prek
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 Rust 写的 Git hook 管理器,兼容 pre-commit 配置,可直接替换并更快运行

用 Rust 重写的 Git hook 管理器,可直接替代 pre-commit,在提交前快速执行代码检查,省去 Python 启动开销。

核心能力

  • 单二进制分发,无需 Python 或其他运行时
  • 完全兼容 pre-commit 配置与 hook,可直接替换
  • 用 uv 创建 Python 虚拟环境并安装依赖
  • 支持 monorepo 工作区模式,同深度项目并发执行
  • 内置部分常见 hook 的 Rust 原生实现

容易踩的坑

从源码用 Cargo 构建需要 Rust 1.97+;用 mise 安装需要 v2025.8.11 或更高版本;内置 Rust hook 只覆盖部分 pre-commit-hooks,其余仍需下载对应工具链

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.5.10
  1. v0.5.100.5.10最新正式版2026-11-04 · 2026-11-04 01:50 UTC

    Release Notes

    Released on 2026-11-04.

    Enhancements

    • Add a builtin replace-pattern hook (#2981)

    Bug fixes

    • Avoid downloading Node prereleases by default (#2995)
    • Keep file checks out of rayon's recursive frames (#2999)
    • Skip Node releases without a compatible archive (#2996)

    Documentation

    • Add equivalent prek.toml examples throughout the documentation (#2979)

    Contributors

    • @connorbrinton
    • @j178

    Install prek 0.5.10

    Install prebuilt binaries via shell script

    curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.10/prek-installer.sh | sh
    

    Install prebuilt binaries via powershell script

    powershell -ExecutionPolicy Bypass -c "irm https://github.com/j178/prek/releases/download/v0.5.10/prek-installer.ps1 | iex"
    

    Install prebuilt binaries via Homebrew

    brew install prek
    

    Download prek 0.5.10

    FilePlatformChecksum
    prek-aarch64-apple-darwin.tar.gzApple Silicon macOSchecksum
    prek-x86_64-apple-darwin.tar.gzIntel macOSchecksum
    prek-aarch64-pc-windows-msvc.zipARM64 Windowschecksum
    prek-x86_64-pc-windows-msvc.zipx64 Windowschecksum
    prek-aarch64-unknown-linux-gnu.tar.gzARM64 Linuxchecksum
    prek-powerpc64le-unknown-linux-gnu.tar.gzPPC64LE Linuxchecksum
    prek-x86_64-unknown-linux-gnu.tar.gzx64 Linuxchecksum
    prek-aarch64-unknown-linux-musl.tar.gzARM64 MUSL Linuxchecksum
    prek-x86_64-unknown-linux-musl.tar.gzx64 MUSL Linuxchecksum

    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:

    gh attestation verify <file-path of downloaded artifact> --repo j178/prek
    

    You can also download the attestation from GitHub and verify against that dir

  2. v0.5.90.5.92026-10-30 · 2026-10-30 10:34 UTC
    查看更新说明

    Release Notes

    Released on 2026-10-30.

    Enhancements

    • Add normalize-indentation builtin hook (#2967)
    • Allow overriding the uv install version (#2923)
    • Embed dependency metadata in release binaries (#2976)
    • Select musl Bun builds when glibc is unavailable (#2972)

    Performance

    • Improve workspace discovery performance (#2936)

    Bug fixes

    • Preserve clean-filtered files during stashing (#2915)

    Contributors

    • @j178
    • @tchernobog

    Install prek 0.5.9

    Install prebuilt binaries via shell script

    curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.9/prek-installer.sh | sh
    

    Install prebuilt binaries via powershell script

    powershell -ExecutionPolicy Bypass -c "irm https://github.com/j178/prek/releases/download/v0.5.9/prek-installer.ps1 | iex"
    

    Install prebuilt binaries via Homebrew

    brew install prek
    

    Download prek 0.5.9

    FilePlatformChecksum
    prek-aarch64-apple-darwin.tar.gzApple Silicon macOSchecksum
    prek-x86_64-apple-darwin.tar.gzIntel macOSchecksum
    prek-aarch64-pc-windows-msvc.zipARM64 Windowschecksum
    prek-x86_64-pc-windows-msvc.zipx64 Windowschecksum
    prek-aarch64-unknown-linux-gnu.tar.gzARM64 Linuxchecksum
    prek-powerpc64le-unknown-linux-gnu.tar.gzPPC64LE Linuxchecksum
    prek-x86_64-unknown-linux-gnu.tar.gzx64 Linuxchecksum
    prek-aarch64-unknown-linux-musl.tar.gzARM64 MUSL Linuxchecksum
    prek-x86_64-unknown-linux-musl.tar.gzx64 MUSL Linuxchecksum

    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:

    gh attestation verify <file-path of downloaded artifact> --repo j178/prek
    

    You can also download the attestation from [GitHub](https://github.com/j178/pr

  3. v0.5.70.5.72026-10-21 · 2026-10-21 00:47 UTC
    查看更新说明

    Release Notes

    Released on 2026-10-21.

    Enhancements

    • Support system Rust toolchains without rustup (#2887)

    Performance

    • Use blocking file checks for CPU-heavy builtin hooks (#2910)

    Other changes

    • Update CA root crates and uv for the eMudhra intermediate CA compromise (#2919)

    Contributors

    • @shaanmajid
    • @j178

    Install prek 0.5.7

    Install prebuilt binaries via shell script

    curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.7/prek-installer.sh | sh
    

    Install prebuilt binaries via powershell script

    powershell -ExecutionPolicy Bypass -c "irm https://github.com/j178/prek/releases/download/v0.5.7/prek-installer.ps1 | iex"
    

    Install prebuilt binaries via Homebrew

    brew install prek
    

    Download prek 0.5.7

    FilePlatformChecksum
    prek-aarch64-apple-darwin.tar.gzApple Silicon macOSchecksum
    prek-x86_64-apple-darwin.tar.gzIntel macOSchecksum
    prek-aarch64-pc-windows-msvc.zipARM64 Windowschecksum
    prek-x86_64-pc-windows-msvc.zipx64 Windowschecksum
    prek-aarch64-unknown-linux-gnu.tar.gzARM64 Linuxchecksum
    prek-powerpc64le-unknown-linux-gnu.tar.gzPPC64LE Linuxchecksum
    prek-x86_64-unknown-linux-gnu.tar.gzx64 Linuxchecksum
    prek-aarch64-unknown-linux-musl.tar.gzARM64 MUSL Linuxchecksum
    prek-x86_64-unknown-linux-musl.tar.gzx64 MUSL Linuxchecksum

    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:

    gh attestation verify <file-path of downloaded artifact> --repo j178/prek
    

    You can also download the attestation from GitHub and verify against that directly:

    gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
    
  4. v0.5.60.5.62026-10-19 · 2026-10-19 05:48 UTC
    查看更新说明

    Release Notes

    Released on 2026-10-19.

    Enhancements

    • Add builtin hook check-commit-trailers (#2885)
    • Add builtin hook check-signed-commit (#2725)

    Performance

    • Enable PGO for native release builds (#2890)
    • Reduce hook process launches with balanced batches (#2907)
    • Resolve hook commands before batching (#2840)

    Bug fixes

    • Accept UTF-8 BOM in check-json (#2879)
    • Preserve unquoted dotted revisions in prek update (#2853)

    Documentation

    • Document standalone installer options (#2859)
    • Update benchmarks for prek 0.5.5 (#2786)

    Other changes

    • Enable ICF for release builds (#2891)
    • Update uv to 0.13.0 (#2856)

    Contributors

    • @ebuildy
    • @j178
    • @shaanmajid

    Install prek 0.5.6

    Install prebuilt binaries via shell script

    curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.6/prek-installer.sh | sh
    

    Install prebuilt binaries via powershell script

    powershell -ExecutionPolicy Bypass -c "irm https://github.com/j178/prek/releases/download/v0.5.6/prek-installer.ps1 | iex"
    

    Install prebuilt binaries via Homebrew

    brew install prek
    

    Download prek 0.5.6

    FilePlatformChecksum
    prek-aarch64-apple-darwin.tar.gzApple Silicon macOSchecksum
    prek-x86_64-apple-darwin.tar.gzIntel macOSchecksum
    prek-aarch64-pc-windows-msvc.zipARM64 Windowschecksum
    prek-x86_64-pc-windows-msvc.zipx64 Windowschecksum
    prek-aarch64-unknown-linux-gnu.tar.gzARM64 Linuxchecksum
    prek-powerpc64le-unknown-linux-gnu.tar.gzPPC64LE Linuxchecksum
    prek-x86_64-unknown-linux-gnu.tar.gzx64 Linuxchecksum
    prek-aarch64-unknown-linux-musl.tar.gzARM64 MUSL Linuxchecksum
    prek-x86_64-unknown-linux-musl.tar.gzx64 MUSL Linux[checksum](https://github.com/j178/prek/releases/downl
  5. v0.5.50.5.52026-10-05 · 2026-10-05 06:10 UTC
    查看更新说明

    Release Notes

    Released on 2026-10-05.

    Enhancements

    • Add Nushell completion generation (#2785)
    • Add ppc64le wheel and binary builds (#2809)

    Performance

    • Avoid JSON imports when querying Python interpreters (#2790)
    • Avoid duplicate diffs after hooks rewrite files (#2815)
    • Batch file reads in shebang checks (#2793)
    • Check cached hook environments concurrently (#2797)
    • Overlap Git discovery with worktree status checks (#2821)
    • Query staged additions only for case conflicts (#2802)
    • Reduce worker overhead in XML and pygrep checks (#2789)
    • Reuse Git worktree state during hook startup (#2787)
    • Reuse intent-to-add paths when saving unstaged changes (#2788)
    • Run Git queries concurrently for case-conflict checks (#2792)
    • Share Bun and Deno version queries across environments (#2795)
    • Share Lua runtime probes across hook environments (#2796)
    • Share Ruby version queries across hook environments (#2794)
    • Share mise version queries across hook environments (#2798)
    • Skip site initialization in Python interpreter probes (#2822)
    • Skip untracked files in destroyed symlink checks (#2799)
    • Skip unused file input for always-run hooks (#2813)

    Bug fixes

    • Preserve staged and unstaged changes on conflicted stash restore (#2803)
    • Default missing core.fileMode in shebang checks (#2832)
    • Match protected branch patterns from the start (#2829)
    • Normalize explicit paths in shebang index checks (#2831)
    • Preserve empty trailing-whitespace character sets (#2830)
    • Reject empty files in check-json (#2826)
    • Reject trailing data in check-json (#2828)
    • Round up file sizes in check-added-large-files (#2827)

    Documentation

    • Redesign the prek badge and refresh logo details (#2818)

    Contributors

    • @imphil
    • @j178

    Install prek 0.5.5

    Install prebuilt binaries via shell script

    curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.5/prek-installer.sh | sh
    

    Install prebuilt binaries via powershell script

    powershell -ExecutionPolicy Bypass -c "irm https://github.com/j178/prek/releases/download/v0.5.5/prek-installer.ps1 | iex"
    

    Install prebuilt binaries via Homebrew

    brew install prek
    

    Download prek 0.5.5

    FilePlatformChecksum
    prek-aarch64-apple-darwin.tar.gzApple Silicon macOSchecksum
    prek-x86_64-apple-darwin.tar.gzIntel macOSchecksum

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    prek PyPI version codecov PyPI Downloads Discord

    Installation • Quick start • Documentation

    About

    prek is a framework for running hooks on your code. It runs them before you commit changes, on demand, or in CI. These hooks can format files, catch lint errors, detect secrets, or run any other command your project defines. prek also installs and manages the tools and dependencies they need.

    You may already be familiar with the pre-commit tool. prek is a reimagined version of it, built in Rust. It is faster and distributed as a single binary with no runtime dependencies. It is fully compatible with pre-commit configurations and hooks, so you can use it as a drop-in replacement without changing your setup.

    Although prek is pretty new, it’s already powering real‑world projects like CPython, Apache Airflow, FastAPI, and more projects are picking it up—see Who is using prek?. If you’re looking for an alternative to pre-commit, please give it a try—we’d love your feedback!

    Features

    • A single binary with no dependencies, does not require Python or any other runtime.
    • Faster than pre-commit and more efficient in disk space usage.
    • Fully compatible with the original pre-commit configurations and hooks.
    • Built-in support for monorepos (i.e. workspace mode), including concurrent execution for independent same-depth projects.
    • Integration with uv for managing Python virtual environments and dependencies.
    • Improved toolchain installations for Python, Node.js, Bun, Go, Rust and Ruby, shared between hooks.
    • Built-in Rust-native implementation of some common hooks.

    Installation

    prek provides a standalone installer script to download and install the tool,

    On Linux and macOS:

    curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/download/v0.5.10/prek-installer.sh | sh
    

    On Windows:

    powershell -ExecutionPolicy ByPass -c "irm https://github.com/j178/prek/releases/download/v0.5.10/prek-installer.ps1 | iex"
    

    prek is published as Python binary wheel to PyPI, you can install it using pip, uv (recommended), or pipx:

    # Using uv (recommended)
    uv tool install prek
    
    # Using uvx (install and run in one command)
    uvx prek
    
    # Adding prek to the project dev-dependencies
    uv add --dev prek
    
    # Using pip
    pip install prek
    
    # Using pipx
    pipx install prek
    
    brew install prek
    

    To use prek with mise (v2025.8.11 or later):

    mise use prek
    

    Install pre-compiled binaries from GitHub using cargo-binstall:

    cargo binstall prek
    

    Build from source using Cargo (Rust 1.97+ is required):

    cargo install --locked prek
    

    prek is published as a Node.js package and can be installed with any npm-compatible package manager:

    # As a dev dependency
    npm add -D @j178/prek
    pnpm add -D @j178/prek
    bun add -D @j178/prek
    
    # Or install globally
    npm install -g @j178/prek
    pnpm add -g @j178/prek
    bun install -g @j178/prek
    
    # Or run directly without installing
    npx @j178/prek --version
    bunx @j178/prek --version
    

    prek is available via Nixpkgs.

    # Choose what's appropriate for your use case.
    # One-off in a shell:
    nix-shell -p prek
    
    # NixOS or non-NixOS without flakes:
    nix-env -iA nixos.prek
    
    # Non-NixOS with flakes:
    nix profile install nixpkgs#prek
    

    prek is available as prek via conda-forge.

    conda install conda-forge::prek
    

    prek is available via Scoop.

    scoop install main/prek
    

    prek is available via winget.

    winget install --id j178.Prek
    

    prek is available via MacPorts.

    sudo port install prek
    

    Pre-built binaries are available for download from the GitHub releases page.

    prek can be used in GitHub Actions via the j178/prek-action repository.

    Example workflow:

    name: Prek checks
    on: [push, pull_request]
    
    jobs:
      prek:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
          - uses: j178/prek-action@44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d # v3.1.0
    

    This action installs prek and runs prek run --all-files on your repository.

    prek is also available via taiki-e/install-action for installing various tools.

    To let agents use prek, install the prek skill with gh skill (v2.90.0+):

    gh skill install j178/prek prek
    

    If installed via the standalone installer, prek can update itself to the latest version:

    prek self update
    

    Quick start

    • I already use pre-commit: follow the short migration checklist in the quickstart guide to swap in prek safely.
    • I'm new to pre-commit-style tools: learn the basics—creating a config, running hooks, and installing Git shims—in the beginner quickstart walkthrough.

    Why prek?

    prek is faster

    • It is multiple times faster than pre-commit while also using less disk space.
    • Hook environments and toolchains are shared across hooks instead of being duplicated per repository, which reduces both install time and cache size.
    • Repository fetches and independent hook environment setup run in parallel, hooks can run concurrently by priority using reusable aliases, and independent workspace projects at the same directory depth can run concurrently.
    • It uses uv for creating Python virtualenvs and installing dependencies, which is known for its speed and efficiency.
    • For supported hooks from pre-commit-hooks, the automatic fast path runs built-in Rust implementations without requiring any configuration changes.
    • The prek-only repo: builtin mode provides offline, zero-setup hooks, including native deny-pattern and require-pattern alternatives for common pygrep checks.

    prek is easier to work with

    • No need to install Python or any other runtime just to use prek; it is a single binary.
    • Its language support covers every language available in pre-commit, plus Bun, Deno, mise, and PHP, and it automatically installs managed toolchains when needed for Python, Node.js, Bun, Deno, Go, mise, Rust, and Ruby.
    • It supports native prek.toml in addition to pre-commit YAML, and prek util yaml-to-toml helps migrate existing configs.
    • Built-in support for workspaces means monorepos can keep separate configs per project and still run everything from one command, while independent same-depth projects run concurrently without mixing file scopes.
    • prek install and prek uninstall honor repo-local and worktree-local core.hooksPath.
    • Hook groups let one config define workflows such as CI, linting, or formatting; --group, --require-group, and --no-group select them at runtime.
    • prek run can select or skip multiple projects and hooks, target tracked files with repeatable --glob or --directory filters, pass explicit paths with --files, and preview the selection with --dry-run.
    • The progress UI streams a live preview from running hooks, so long-running checks do not look stuck and failures are easier to diagnose.
    • prek list, prek util identify, and prek util list-builtins -v make it easier to inspect configured hooks, debug file matching, and discover builtins with their supported options.

    prek includes security-focused safeguards

    • For supported managed toolchain downloads, prek verifies the downloaded archive or installer checksum before extracting or installing it, helping ensure the integrity of downloaded toolchains.
    • prek update can keep newly published releases on hold with --cooldown-days, filter eligible tags with glob patterns, and freeze revisions to commit SHAs.
    • prek update validates pinned SHA revisions against the fetched upstream refs, including impostor-commit detection, and keeps # frozen: comments in sync with the configured commit.
    • prek update --check is useful in CI when you want updates or frozen-reference mismatches to fail the job without rewriting the config.

    For more detailed improvements prek offers, take a look at Difference from pre-commit.

    Who is using prek?

    These projects use or recommend prek. Follow the links for adoption details.

    ProjectStars
    Apache Airflow47,116
    Apache Iggy5,044
    ast-grep16,140
    attrs5,853
    Authlib5,430
    Cherry Studio52,443
    CocoIndex11,651
    CPython77,561
    devenv7,721
    FastAPI102,873
    FastMCP28,011
    Godot118,258
    Home Assistant91,313
    Kimi CLI (archived)11,425
    Matplotlib23,341
    msgspec4,155
    OpenClaw391,637
    paper-qa9,329
    PDM8,664
    Pendulum6,677
    Prowler14,985
    Pyodide14,880
    python-telegram-bot29,515
    RSSHub46,449
    Ruff49,936
    Sentry45,507
    Simple Icons25,985
    ty19,817
    Typer20,056
    UltraJSON4,499

    GitHub stars as of October 8, 2026. For more projects, see the GitHub dependents list.

    Acknowledgements

    This project is heavily inspired by the original pre-commit tool, and it wouldn't be possible without the hard work of the maintainers and contributors of that project.

    And a special thanks to the Astral team for their remarkable projects, particularly uv, from which I've learned a lot on how to write efficient and idiomatic Rust code.