Integrate with pre-commit (or replace it)
How to use pre-commit in uv-based project?
I Built a tool that auto-syncs pre-commit hook versions with `uv.lock`
What are your favourite pre-commit hooks and why?
Videos
TL;DR: Auto-sync your pre-commit hook versions with uv.lock
# Add this to .pre-commit-config.yaml
- repo: https://github.com/tsvikas/sync-with-uv
rev: v0.3.0
hooks:
- id: sync-with-uvBenefits:
-
Consistent tool versions everywhere (local/pre-commit/CI)
-
Zero maintenance
-
Keeps pre-commit's isolation and caching benefits
-
Works with pre-commit.ci
The Problem
PEP 735 recommends putting dev tools in pyproject.toml under [dependency-groups]. But if you also use these tools as pre-commit hooks, you get version drift:
-
uv updatebumpsblackto25.1.0in your lockfile -
Pre-commit still runs
black==24.2.0 -
Result: inconsistent results between local tool and pre-commit.
What My Project Does
This tool reads your uv.lock and automatically updates .pre-commit-config.yaml to match.
Works as a pre-commit (see above) or as a one-time run: uvx sync-with-uv
Target Audience
developers using uv and pre-commit
Comparison
❌ Using manual updates?
-
Cumbersome
-
Easy to forget
❌ Using local hooks?
- repo: local
hooks:
- id: black
entry: uv run black-
Breaks pre-commit.ci
-
Loses pre-commit's environment isolation and tool caching
❌ Removing the tools from pyproject.toml?
-
Annoying to repeatedly type
pre-commit run black -
Can't pass different CLI flags (
ruff --select E501 --fix) -
Some IDE integration breaks (when it requires the tool in your environment)
-
Some CI integrations break (like the black action auto-detect of the installed version)
Similar tools:
-
sync_with_poetry- Poetry version -
sync-pre-commit-lock- PDM/Poetry plugin
Try it out: https://github.com/tsvikas/sync-with-uv
⭐ Star if it helps! Issues and PRs welcome. ⭐