Skip to main content

taze 🥬

Keep your Python dependencies fresh.

Inspired by taze, this is the Python-native version: the same safe-by-default CLI workflow, adapted for PyPI, PEP 440, Python project metadata, and GitHub Actions.


Features

  • Checks all dependencies against PyPI in parallel
  • Shows the bump level (patch / minor / MAJOR) with colors
  • Displays release age for both the current and latest version
  • Supports pyproject.toml (PEP 508, PEP 735, uv, Poetry, PDM, and Hatch) and requirements*.txt
  • Writes updated version constraints back to the file (-w)
  • Detects uv, Poetry, PDM, and Pixi before installing (-i)
  • Interactive package selection (-I)
  • Recursive monorepo scanning (-r)
  • Pre-release support (newest / next mode)
  • Regex/glob filtering for include / exclude, including version selectors such as requests@2
  • Checks GitHub Actions refs with tag or SHA-preserving writes
  • JSON output for agents and CI, with optional fail-on-outdated status
  • Safe PEP 440 range resolution, a local TTL cache, maturity periods, and per-package policies

Installation

uv tool install taze
# or
uvx taze
# or
pip install taze

Usage

taze [mode] [options]

Modes

Mode What it shows
default Latest stable release allowed by the declared PEP 440 range
major Latest stable release, including major changes
minor Latest stable release in the current major version
patch Latest stable release in the current major/minor version
latest Alias for major
stable Range-safe stable updates
newest All updates including pre-releases
next Same as newest

Examples

# Check everything in the current directory
taze

# Only show minor and patch updates
taze minor

# Write patch updates back to pyproject.toml
taze patch -w

# Write all updates and run uv sync
taze -w -i

# Interactive checkbox menu (↑/↓, space, a, → version, Enter, Esc)
taze -I

# Include pre-releases
taze newest

# Scan all subdirectories (monorepo)
taze -r

# Only check specific packages
taze -n requests,httpx

# Skip packages matching a pattern
taze -x /^pytest/

# Skip only one version range, not the whole package
taze -x requests@3

# Do not upgrade releases published in the last two weeks
taze --maturity-period 14

# Include exact == pins (they are skipped by default)
taze -l

# Sort by largest update first
taze --sort diff-desc

# Machine-readable JSON output
taze --json

Options

  -w, --write              Write updates back to file
  -i, --install            Install after writing (implies -w)
  -u, --update             Alias for --install
  -I, --interactive        Choose which packages to update interactively
  -r, --recursive          Scan subdirectories for pyproject.toml / requirements*.txt
      --ignore-paths <glob> Comma-separated glob paths to skip with --recursive
      --ignore-other-workspaces / --include-other-workspaces
                            Skip nested repositories and workspaces (default: skip)
  -a, --all                Show up-to-date packages too
  -n, --include <deps>     Only check these packages (comma-separated or /regex/)
  -x, --exclude <deps>     Skip these packages (comma-separated or /regex/)
  -C, --cwd <path>         Working directory
  -s, --silent             No output
  -v, --version            Show version
      --sort <type>        Sort output: name-asc | name-desc | diff-asc | diff-desc
      --fail-on-outdated   Exit with code 1 if any outdated dependencies are found
  -l, --include-locked     Include exact == version pins
      --maturity-period <n>
                            Require a release to be at least n days old
      --maturity-period-exclude <deps>
                            Bypass the maturity period for selected packages
      --config <path>      Read settings from a taze.toml file
      --concurrency <n>    Number of concurrent PyPI requests (default: 10)
      --json               Machine-readable JSON output (updates only; use -a for all)
      --force, -f          Bypass the local metadata cache
      --retry <n>          Retries after failed registry requests
      --no-retry           Disable registry retries
      --request-timeout <s>
                            Registry request timeout in seconds
      --github-actions/--no-github-actions
                            Check workflow and composite-action references
      --github-actions-style <auto|tag|sha>
                            Preserve or choose action reference style
      --github-actions-pin  Pin GitHub Actions to their commit SHA even if
                            already up to date (implies sha style)

Output

  📦  pyproject.toml  /home/user/myproject/pyproject.toml

  dependencies  3 outdated
    packaging  ~8mo  >=25.2     →  >=26.2     ~3mo  MAJOR
    rich       ~4mo  >=14.0.0   →  >=15.0.0   ~3d   MAJOR
    typer      ~6mo  >=0.25.7   →  >=0.26.7   ~3d   minor

  group:dev  1 outdated
    ruff       ~8mo  >=0.14.1   →  >=0.15.19  ~1d   minor

  Run taze -w to write 4 update(s) to pyproject.toml

The age columns show how old the current pinned version is and how recently the latest version was released — green for < 4 weeks, yellow for < 6 months, red for older.


Supported file formats

File Section
pyproject.toml [project] dependencies
pyproject.toml [project.optional-dependencies.*]
pyproject.toml [dependency-groups.*] (PEP 735)
pyproject.toml [tool.uv.dev-dependencies]
pyproject.toml [tool.uv.constraint-dependencies]
pyproject.toml [tool.poetry.dependencies]
pyproject.toml [tool.poetry.group.*.dependencies]
pyproject.toml [tool.pdm.dev-dependencies.*]
pyproject.toml [tool.hatch.envs.*.dependencies]
requirements*.txt Standard pip format
.github/workflows/*.yml / action.yml Versioned uses: refs

Monorepos

taze -r finds supported dependency files under the working directory. It skips virtual environments, build/cache directories, and nested repositories/workspaces by default. Use --ignore-paths examples/**,vendor/** for additional exclusions, or --include-other-workspaces to deliberately scan nested workspaces.

Project names declared in workspace pyproject.toml files are recognised as local packages and are not looked up on PyPI.

Configuration

Place options in taze.toml or in the [tool.taze] table of pyproject.toml. CLI values take precedence over project configuration.

[tool.taze]
recursive = true
ignore-paths = ["examples/**", "vendor/**"]
maturity-period = 7
maturity-period-exclude = "internal-tools"
include-locked = false

[tool.taze.package-mode]
django = "minor"
"/pytest-.*/" = "patch"
setuptools = "ignore"

package-mode accepts every mode listed above, plus ignore. Exact package names, * globs, and slash-delimited regular expressions are supported. The cache lives at $XDG_CACHE_HOME/taze/pypi.json (or ~/.cache/taze/pypi.json) for 30 minutes; --force bypasses it.

GitHub Actions use the GitHub REST API. Set GITHUB_TOKEN or GH_TOKEN to avoid unauthenticated API limits. Branch refs, local actions, Docker actions, and non-v tags are left untouched.

Installation

taze -i writes updates, then chooses an installer from the project metadata: uv sync, poetry install, pdm install, or pixi install. -u is an alias for -i.


License

MIT

Release files for taze 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for taze 0.3.0
File Size Uploaded
taze-0.3.0.tar.gz 32.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for taze 0.3.0
File Interpreter ABI Platform
taze-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 69.4 kB

Release files / taze-0.3.0.tar.gz

Download URL taze-0.3.0.tar.gz
Size 32.2 kB
Tags Source
SHA-256 checksum
How to use checksums
7de4d818770981f0a5e4f2eb343633b3a41f5fa06bcdc13de083aadfb6b6467d
BLAKE2b-256 checksum
How to use checksums
2d9de3b4fa2bb7e153a9979bbe72c3f983e06711d2c8ea149781e8d6e83310a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / taze-0.3.0-py3-none-any.whl

Download URL taze-0.3.0-py3-none-any.whl
Size 37.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f890a24d55c01ef84df3f32ec4b918d030ff995357b5e6adc1330a96a5ed542
BLAKE2b-256 checksum
How to use checksums
dc670cac9e67f37703ea2502b85b698cb0d52a2ee538fb23afbe84b41f62352e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.5.0

2 release files

This release

0.3.0 This release

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page