Python program to check versions of dependencies listed in pyproject.toml against the latest versions available on Pypi
  • Python 99%
  • Just 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Marvin8 76aa436c28
All checks were successful
/ pr-review (push) Has been skipped
/ pr-review (release) Has been skipped
/ gitleaks (push) Successful in 24s
/ gitleaks (release) Successful in 18s
/ checks (push) Successful in 2m25s
/ publish (push) Has been skipped
/ checks (release) Successful in 2m19s
/ deploy-docs (release) Has been skipped
/ publish (release) Successful in 26s
/ deploy-docs (push) Successful in 1m15s
🔧 bump: version 1.7.2 → 1.7.3
2026-08-07 13:11:52 +10:00
.forgejo/workflows 🚚 migrate remotes and source refs to forge.marvin8.zone 2026-08-07 12:20:40 +10:00
docs ⬆️ bump dependencies 2026-08-07 12:24:38 +10:00
src/zaojun ⬆️ bump dependencies 2026-08-07 12:24:38 +10:00
tests 🔧 raise ruff target-version to py311; apply UP017 and import-sort fixes 2026-07-19 15:40:12 +10:00
.editorconfig 🔧 config hygiene: ruff-check hook id, gitleaks default config, editorconfig newline fix 2026-07-19 15:40:11 +10:00
.gitignore 🔧 add superpowers working directory to .gitignore 2026-06-24 12:44:41 +10:00
.gitleaks.toml 🔧 config hygiene: ruff-check hook id, gitleaks default config, editorconfig newline fix 2026-07-19 15:40:11 +10:00
.pre-commit-config.yaml ⬆️ bump dependencies 2026-08-07 12:24:38 +10:00
.pre-commit-hooks.yaml Update README.rst and pre-commit hook config. 2025-10-08 19:23:00 +10:00
.python-version Improving PyPi listing 2025-10-16 12:55:55 +10:00
AGENTS.md 📝 consolidate agent instructions into AGENTS.md with CLAUDE.md symlink 2026-07-19 14:58:53 +10:00
CHANGELOG.md docs: update changelog for 1.7.3 2026-08-07 13:11:50 +10:00
CLAUDE.md 📝 consolidate agent instructions into AGENTS.md with CLAUDE.md symlink 2026-07-19 14:58:53 +10:00
justfile 🚚 migrate remotes and source refs to forge.marvin8.zone 2026-08-07 12:20:40 +10:00
LICENSE.md Initial, very rough, version 2024-12-16 18:00:04 +10:00
mkdocs.yml 🚚 migrate remotes and source refs to forge.marvin8.zone 2026-08-07 12:20:40 +10:00
noxfile.py 🔧 use pytest-httpx2 in beta pytest session 2026-07-19 15:40:13 +10:00
pylock.toml 🔒 fix h2 and pymdown-extensions vulnerabilities 2026-08-07 12:26:11 +10:00
pyproject.toml 🔧 bump: version 1.7.2 → 1.7.3 2026-08-07 13:11:52 +10:00
README.md 🚚 migrate remotes and source refs to forge.marvin8.zone 2026-08-07 12:20:40 +10:00
Release-Notes.md 🔧 bump: version 1.7.2 → 1.7.3 2026-08-07 13:11:52 +10:00
Release-Notes.md.template 🔧 add Release-Notes.md.template and fediverse justfile recipes 2026-07-19 14:59:31 +10:00
ROADMAP-detail.md 📝 reformat IMPROVEMENTS.md and ROADMAP.md as yilan intent files 2026-05-15 16:37:04 +10:00
ROADMAP.md 🔧 bump deps and fix CI pipeline secret/env var names 2026-05-23 10:40:46 +10:00
ruff.toml 🔧 raise ruff target-version to py311; apply UP017 and import-sort fixes 2026-07-19 15:40:12 +10:00
uv.lock 🔧 bump: version 1.7.2 → 1.7.3 2026-08-07 13:11:52 +10:00

zaojun

Repo Docs CI Downloads

PySentry

Codestyle Version Wheel

AGPL

zaojun is a command-line (CLI) tool to check versions of your dependencies as defined in pyproject.toml against the latest versions published on PyPI. Full documentation is available at zaojun.marvin8.zone.

New in v1.6.0: License compliance checking — verify that every dependency's license is compatible with your project's own license. Enable with --check-licenses or check-licenses = true in [tool.zaojun]. The allowed set is auto-derived from project.license (SPDX) or specified explicitly via allowed-licenses. Packages with incompatible licenses show ⚖️ inline and a License Violations block at the end of the report; exit code 1. Use unknown-license = "fail" to reject dependencies with unrecognisable licenses, "allow" to ignore them silently. Exempt individual packages with license-ignore (a reason field is required for each entry). Zero extra HTTP requests — all license data comes from the PyPI response already fetched per dependency.

New in v1.5.0: CVE/vulnerability scanning — zaojun surfaces known security advisories from the PyPI vulnerability feed (zero extra HTTP requests; data comes from the same response already fetched per package). Packages with open advisories show 🔒 inline and a Vulnerabilities detail block at the end of the report. Use vuln-ignore in [tool.zaojun] to suppress specific CVEs, GHSAs, or entire packages by name or version range. Also: --flag-major (default on) — flags compatible major-version bumps with 💥 so they don't get lost among minor updates. --major-ok opts out of exit code 1 for major bumps, mirroring --compat-ok. Also: --index-url URL to point zaojun at Artifactory, devpi, or any PyPI JSON API-compatible index. Cache files are now leaner — the unused package metadata blob has been dropped, reducing per-entry disk use.

New in v1.4.0: JSON output via --format json — machine-readable dependency status for scripts and CI pipelines. Also: persistent defaults via [tool.zaojun] in pyproject.toml — set cache, groups, min-age, library, format, and more without repeating CLI flags. CLI flags always override config.

New in v1.3.0: Library mode via --library — checks that version constraints are consumer-friendly (no exact pins, no tight upper bounds) and only flags updates that fall outside the allowed range. Compatible updates are silent when the latest version already satisfies the spec.

New in v1.2.0: Supply-chain quarantine via --min-age N — ignore updates younger than N days, giving the ecosystem time to react to compromised releases. Updates that are too new show and don't trigger exit code 1.

New in v1.0.0: PyPI API response caching for faster repeated checks! Enable with --cache for 10-100x performance improvements on subsequent runs.

Install and run from Source

Alternatively, you can run zaojun from source by cloning the repository:

git clone https://forge.marvin8.zone/marvin8/zaojun.git

zaojun uses uv for dependency control; please install uv before proceeding.

Install all required Python modules:

uv sync

Run zaojun with:

uv run zaojun

Try the new caching feature for faster repeated checks:

uv run zaojun --cache --cache-stats

As a pre-commit hook

Add the following snippet to your .pre-commit-config.yaml:


- repo: https://forge.marvin8.zone/marvin8/zaojun
  rev: 1.2.0
  hooks:
    - id: zaojun
      args:
        "--groups"
        "--cache"  # Enable caching for faster runs

Significance of the name zaojun

Zao Jun is the Chinese god who acts as a household guardian, overseeing domestic harmony and reporting family conduct to the heavens—reinforcing moral behavior within the kin unit. This tool tries to keep your project and its dependencies in harmony. It doesnt report to any third parties, though :)

I know its a bit far-fetched, but I like it—so there!

If youd like to learn more about Zao Jun, the Chinese Kitchen God:

Licensing

zaojun is licensed under the GNU Affero General Public License v3.0.

Supporting zaojun

You can support zaojun in several ways:

  • Create an issue for problems or ideas you have.
  • Create a pull request if you prefer a hands-on approach.
  • Buy me a coffee.
  • Send small change in Monero to the address below:

Monero donation address

88xtj3hqQEpXrb5KLCigRF1azxDh8r9XvYZPuXwaGaX5fWtgub1gQsn8sZCmEGhReZMww6RRaq5HZ48HjrNqmeccUHcwABg