prefligit
pre-commit is a framework to run hooks written in over a dozen languages, and it manages the toolchain and dependencies for running the hooks.
prefligit is a reimplementation of the tool in Rust, designed to be a faster, dependency-free and drop-in alternative for pre-commit, while also providing some additional opinionated features.
Warning
This project is still in early stage of development, only a few of the original pre-commit features are implemented. It is not production-ready yet, but feel free to try it out and provide feedback.
Current supported languages are
python,node,docker,docker-image,system,scriptandfail.
Note
This project was previously named
pre-commit-rs, but it was renamed toprefligitto prevent confusion with the existing pre-commit tool. See #73 for more information.
Features
- 🚀 A single binary with no dependencies, does not require Python or any other runtime.
- 🔄 Fully compatible with the original pre-commit configurations and hooks.
- ⚡ Improved performance in hook preparation and execution.
- 🐍 Integration with
uvfor managing Python virtual environments and dependencies. - 🛠️ Improved toolchain installations for Python, Node.js, Go, Rust and Ruby, shared between hooks.
- 📦 Built-in implementation of some common hooks.
- 🏗️ (TODO) Built-in support for monorepos.
Usage
$ prefligit run
trim trailing whitespace.................................................Passed
fix end of files.........................................................Passed
typos....................................................................Passed
cargo fmt................................................................Passed
cargo clippy.............................................................Passed
prefligit is designed to be a drop-in alternative for the original pre-commit tool, so you can use it with your existing configurations and hooks.
Please refer to the official documentation for more information on how to configure and use pre-commit.
Installation
Standalone installer
prefligit 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/prefligit/releases/download/v0.0.17/prefligit-installer.sh | sh
# On Windows
powershell -ExecutionPolicy ByPass -c "irm https://github.com/j178/prefligit/releases/download/v0.0.17/prefligit-installer.ps1 | iex"
PyPI
prefligit is published as Python binary wheel to PyPI, you can install it using pip, uv (recommended), or pipx:
pip install prefligit
# or
uv tool install prefligit
# or
pipx install prefligit
Homebrew
brew install prefligit
Cargo
Build from source using Cargo:
cargo install --locked --git https://github.com/j178/prefligit
GitHub Releases
prefligit release artifacts can be downloaded directly from the GitHub releases.
If installed via the standalone installer, prefligit can update itself to the latest version:
$ prefligit self update
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.