Skip to main content

Fast multi-ecosystem dependency updater: package.json, Cargo.toml, pyproject.toml in a single CLI (like npm-check-updates for every language)

Project description

dependency-check-updates

CI Codecov deps.rs License: MIT

crates.io npm PyPI Rust 1.85+ Python 3.11+ Node

crates.io downloads npm downloads PyPI downloads

GitHub stars GitHub forks GitHub issues GitHub PRs Last commit Contributors

Dependency Check & Update — a fast, multi-ecosystem dependency updater written in Rust.

Like npm-check-updates, but for every language.

$ dependency-check-updates
Checking Cargo.toml
 toml_edit  0.22  ->  0.25.4

Run dependency-check-updates -u to upgrade Cargo.toml

Quick Start (Zero Install)

No install needed — run straight from your package manager's ephemeral runner:

# Node.js ecosystem
bunx @dependency-check-updates/cli
npx  @dependency-check-updates/cli

# Python ecosystem
uvx dependency-check-updates
pipx run dependency-check-updates

All four accept the same flags described in Usage.

Features

  • Multi-ecosystempackage.json, Cargo.toml, pyproject.toml handled by a single binary
  • Format-preserving — surgical byte-range patching for JSON; toml_edit for TOML. Your indentation, comments, trailing newlines, and key ordering stay intact
  • Fast — concurrent registry lookups across all manifests via futures::join_all
  • Smart range checking — skips false positives where the resolved version already satisfies the current range (^3 already covers 3.5.1)
  • Deep scan-d recursively finds manifests in monorepos, respecting .gitignore
  • ncu-compatible UX — the same flags you already know from npm-check-updates
  • CI-friendly-e 2 exits non-zero when updates exist; --format json emits machine-readable output

Supported Ecosystems

Ecosystem Manifest Registry Package
Node.js package.json npm @dependency-check-updates/cli
Rust Cargo.toml crates.io dependency-check-updates
Python pyproject.toml PyPI dependency-check-updates

Installation

Every distribution below ships the exact same binary. Pick whichever matches your toolchain.

Rust (Cargo)

cargo install dependency-check-updates

Installs command: dependency-check-updates

Node.js (npm / bun / pnpm / yarn)

Permanent global install:

npm  install   -g @dependency-check-updates/cli
bun  add       -g @dependency-check-updates/cli
pnpm add       -g @dependency-check-updates/cli
yarn global add   @dependency-check-updates/cli

Installs commands: dependency-check-updates and dcu (short alias).

One-off execution (no install):

bunx @dependency-check-updates/cli [flags]
npx  @dependency-check-updates/cli [flags]

Python (pip / uv / pipx)

Permanent isolated install:

pipx install dependency-check-updates
uv tool install dependency-check-updates

Install inside a virtualenv:

pip    install dependency-check-updates
uv pip install dependency-check-updates

Installs command: dependency-check-updates

One-off execution (no install):

uvx dependency-check-updates [flags]
pipx run dependency-check-updates [flags]

Usage

Run from a directory containing at least one of package.json, Cargo.toml, or pyproject.toml. Every supported manifest in the current directory is auto-detected.

Basic

# Check for outdated dependencies (read-only, nothing is written)
dependency-check-updates

# Apply updates in place (format-preserving)
dependency-check-updates -u

# Recursively scan subdirectories (monorepo-friendly, respects .gitignore)
dependency-check-updates -d
dependency-check-updates -d -u

On Node.js installations the short alias dcu works identically — e.g. dcu -d -u.

All Options

Usage: dependency-check-updates [OPTIONS] [FILTER]...
Flag Description Default
[FILTER]... Positional package names to include (allowlist; repeatable) (all)
-u, --upgrade Write updated versions back to the manifest file off
-d, --deep Recursively scan subdirectories, respecting .gitignore off
-t, --target <LEVEL> Version target: patch · minor · latest · newest · greatest latest
-x, --reject <PATTERN> Exclude packages by name (repeatable)
--manifest <PATH> Operate on a single specific manifest file (auto)
--format <FORMAT> Output format: table or json table
-e, --error-level <N> 1 = always exit 0 · 2 = exit 1 when updates exist (CI gate) 1
-v, --verbose Increase verbosity: -v info · -vv debug · -vvv trace off
-h, --help Print help
-V, --version Print version

-t, --target values

Value Behavior
patch Only patch bumps (e.g., 1.0.1 → 1.0.2)
minor Patch + minor bumps (e.g., 1.0.0 → 1.1.0)
latest Latest stable version; prereleases are skipped (default)
newest Most recently published version by publish date
greatest Highest version number, including prereleases

Examples

# Target specific update level
dependency-check-updates -t patch           # patch only
dependency-check-updates -t minor           # minor + patch
dependency-check-updates -t latest          # default: latest stable
dependency-check-updates -t greatest        # include prereleases

# Filter packages — positional args act as an include-list
dependency-check-updates react eslint       # only check react and eslint
dependency-check-updates -x typescript      # exclude typescript
dependency-check-updates -x typescript -x lodash

# Operate on a specific manifest
dependency-check-updates --manifest path/to/Cargo.toml
dependency-check-updates --manifest apps/web/package.json

# Machine-readable output for scripting/CI
dependency-check-updates --format json

# CI gate: exit 1 if any updates are available
dependency-check-updates -e 2

# Verbose logging (accumulating)
dependency-check-updates -v    # info
dependency-check-updates -vv   # debug
dependency-check-updates -vvv  # trace

# Combining flags — recursive, patch-only upgrade in a monorepo
dependency-check-updates -d -u -t patch

Zero-Install Examples

Every example above works identically via the ephemeral runners, too:

bunx @dependency-check-updates/cli                  # check
bunx @dependency-check-updates/cli -u               # apply updates
bunx @dependency-check-updates/cli -d -t minor      # deep scan, minor bumps
bunx @dependency-check-updates/cli react eslint     # filter
npx  @dependency-check-updates/cli --format json

uvx dependency-check-updates
uvx dependency-check-updates -d -u -t patch
pipx run dependency-check-updates --format json

Architecture

Follows the changepacks pattern — one crate per language ecosystem, with bridge crates for cross-language distribution:

.
├── crates/
│   ├── cli/           # Binary + async CLI orchestration
│   ├── core/          # Shared traits (ManifestHandler, RegistryClient, Scanner)
│   ├── node/          # Node.js: package.json parser + npm registry
│   ├── rust/          # Rust: Cargo.toml parser (toml_edit) + crates.io
│   ├── python/        # Python: pyproject.toml parser (toml_edit) + PyPI
│   └── testkit/       # Test fixtures and helpers
├── bridge/
│   ├── node/          # napi-rs N-API binding → npm: @dependency-check-updates/cli
│   └── python/        # maturin bin binding → PyPI: dependency-check-updates
├── Cargo.toml         # Workspace root
└── package.json       # Bun workspace (build/lint/test scripts)

Format Preservation

  • JSON (package.json): Surgical byte-range replacement — finds exact byte offsets of version values and replaces only those bytes. Indent, line endings, trailing newline, and key ordering are preserved byte-for-byte.
  • TOML (Cargo.toml, pyproject.toml): toml_edit document model preserves comments, table ordering, inline-table formatting, and whitespace.

Shared Traits

Each ecosystem crate implements two core traits from dependency-check-updates-core:

  • ManifestHandler — parse manifests, collect dependencies, apply format-preserving updates
  • RegistryClient — resolve versions from package registries with concurrency control

Range Satisfaction

Before reporting an update, the resolver checks whether the selected version already satisfies the current range (e.g., ^3 already covers 3.5.1). This eliminates the false positives that plague naive string comparison.

Development

Build prerequisites:

  • Rust 1.85+ (stable toolchain)
  • Bun 1.0+ (or Node.js 18+ with npm)
  • Python 3.11+ with maturin (only for the Python wheel step)
  • Windows: Visual Studio 2022 Build Tools (MSVC linker)
# First-time setup: install JS toolchain deps (@napi-rs/cli, etc.)
bun install

# Build everything (native CLI + napi .node + maturin wheel)
bun run build

# Dev build (faster, unoptimized)
bun run build:dev

# Lint (cargo clippy + rustfmt + bun workspace lints)
bun run lint
bun run lint:fix

# Test (cargo test --workspace + bun workspace tests)
bun run test

# Run CLI from source
bun run run -- --help
bun run run -- --manifest Cargo.toml -v
bun run run:release -- -d

Inspirations

  • npm-check-updates — the original ncu that inspired this tool's UX and flag design
  • changepacks — the workspace architecture pattern (crates/* + bridge/*), multi-language bridge distribution via napi-rs and maturin, and the overall project structure

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dependency_check_updates-0.1.10-py3-none-win_amd64.whl (3.1 MB view details)

Uploaded Python 3Windows x86-64

dependency_check_updates-0.1.10-py3-none-win32.whl (2.7 MB view details)

Uploaded Python 3Windows x86

dependency_check_updates-0.1.10-py3-none-musllinux_1_2_x86_64.whl (3.4 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

dependency_check_updates-0.1.10-py3-none-musllinux_1_2_i686.whl (3.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

dependency_check_updates-0.1.10-py3-none-musllinux_1_2_armv7l.whl (2.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

dependency_check_updates-0.1.10-py3-none-musllinux_1_2_aarch64.whl (3.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

dependency_check_updates-0.1.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

dependency_check_updates-0.1.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

dependency_check_updates-0.1.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

dependency_check_updates-0.1.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

dependency_check_updates-0.1.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

dependency_check_updates-0.1.10-py3-none-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

dependency_check_updates-0.1.10-py3-none-macosx_10_12_x86_64.whl (3.2 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file dependency_check_updates-0.1.10-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 cd9994744f76a9d024a6e81bdb400d1bdbd97d7db601a299c57fcae8bddb3a2f
MD5 84876a0b457d89bd7c2df64e1355108b
BLAKE2b-256 1e676b024dcaca051850a477f7b44111f91f390a7d00e6af7ebfbf13f46cc205

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-win32.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-win32.whl
Algorithm Hash digest
SHA256 fcad89a41331ad409d5509e0966104ce3f26bd8e2a6b1c91231e7b8a7dbf97fa
MD5 46ca298f720ab0639cfd3ae208be72c6
BLAKE2b-256 fb6d58c2874214f9e626da98b825ad0833dc6a8d58897c1c9c48373e312df6e0

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49d7f984eb8ff586e459a372e9319c65b06a01c676f516cd7f837dfb38f97234
MD5 637eae07b3ec743d1ecbe65ad684481c
BLAKE2b-256 dc6eaa3a458149c9321a578b3b256c3df841db711757321c8ff584b35833618d

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 e5557e0682bcd47cea2b8ae9f216ea7030b8f865661b13a2177c03e2292da730
MD5 c47809eb42720d73d118e207790f1d96
BLAKE2b-256 bcd1b30718e9b7e1e9a65df0d2204b7f00f7e836168f23323df781e0d5c30a3c

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 7ca6012f2a338d4f1a93877c126223da71db7657648e299e3f486cb50800ddbb
MD5 7a2b26d47bd4d3c48e3a4518d6efd369
BLAKE2b-256 8ef9120f1d85c696880d7118f1a0ca54d66574eb8e54bb0e62d1ace02de18548

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ee5c1d5204b8a8d15dff68b73059c166eb57370382c95216ec40b9d206d018be
MD5 b0b18db7fe8fe061249ad59f3a1c5adf
BLAKE2b-256 3694cf88f67fbb09be94e501e657dac17298e4044e70c57b11037257abea0bfc

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 26f3b23848e8b09352bcd466829f0cdc5b755fcdfd540b99ac5dd70f2c1f79f6
MD5 c4436eaa578e017dee611715a35d9d19
BLAKE2b-256 73fc8a7f8788c48bfb299516a1bfb27c905f67eb9a359758bd75852c33536e44

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 5bb2eb509468dbbcf876084e8541869e290c8411d0c3bde928979c4e36ab001a
MD5 cfcc71a7d94a4fff0f919720db4f3047
BLAKE2b-256 53a01de16812af2da383d21c67b26919ed8575702f39ede7817f111579ff1ec9

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3c537492259a6636b5a36e42d1ff5a6cf95587e91e3512c195a61c157117f29b
MD5 63fa8ef8a6288e9ad7cadf17c5b040a7
BLAKE2b-256 e4397f892361f47cdd93631b4833822f29b7cac40458bbef2441e2b70c3f2239

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 7b4205f9382979add319f671064b36930e387e519a14b570518e74e7335e4837
MD5 6e9db0d4d6279dbbc453c18305766c80
BLAKE2b-256 75f967aa181d8e10bddf37a7b7fae31c01bbbbd07df33d56e43b0741d2483705

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7fce6ef9e2a605f2ec8d5211f5821b8dadc81c8e211d5275ed1115bc14d993d9
MD5 c39f3e2a6733250e7dc4489602e086a4
BLAKE2b-256 3be6db98649aad702e86f58a5febdd9afc73e7646b7b6a2e9621cfe5f62ab551

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2144b83c10a360b1ecd4263432b067977b01bfaa75372e57163a7c5d271d732
MD5 64e64ca4078c266b61feb14fc1a04cf3
BLAKE2b-256 3f246acd09d1c5467911d849156108bbe75b9660be3bbf814fc78877af2fe67b

See more details on using hashes here.

File details

Details for the file dependency_check_updates-0.1.10-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.10-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 afd7888c58c6af9ecd2d98285e76c1ef52793c7aad29f57db41389b26373136d
MD5 3f72e680bfef1e4017a8f058096d759f
BLAKE2b-256 60c7a45174bff351ce954d42502cebe73bd24b0bd465107d2d293a6c52c425d4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page