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.9+ 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.9+ 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.5-py3-none-win_amd64.whl (3.1 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

dependency_check_updates-0.1.5-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.5-py3-none-musllinux_1_2_i686.whl (3.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

dependency_check_updates-0.1.5-py3-none-musllinux_1_2_aarch64.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

dependency_check_updates-0.1.5-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.5-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.5-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.5-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.5-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.5-py3-none-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

dependency_check_updates-0.1.5-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.5-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9d4c23afc833c0f6eca376d3edb90a1be309bf218318a92d1ad336167f1b2b0d
MD5 f030bde51b5f716b4d18741de0ddadce
BLAKE2b-256 5b8451a994fefcd60d9385ab62515fa5d303bcc437445520cade7af10a97330d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-win32.whl
Algorithm Hash digest
SHA256 f8918445c72b23a90f165a3f7212123cc28f765f7af09fc70846611f9d1dd830
MD5 9025e26f90c116aa0f4d910643787d36
BLAKE2b-256 d0163889117c945233d9fb2137b0699d2d15ca91e34a824e36f7a273048de36d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b012910bccf76564340e90f2122aa7203eb5dc903b0b0c62fa0fe82ee0e4c82c
MD5 89a5b9eb78dd5b7814822bbc08d4b493
BLAKE2b-256 398f57df38eb2f71256564cd50d9dbee1a5fd36d769ae1e0c6ad8752e221f940

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 97ca5fa62d545f1376b7862908f0efe819733e89e67cfd94788e4f47e3e1ba1b
MD5 e135a943a1f6fbf7ab2739820c5a57de
BLAKE2b-256 594fb9fc38277b9906d6c4a4f1406e96d32fcbf8579507f4055cde205cd6148a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 e40e456f11d9440220baecef63f910324d368c13c7f78585bd57321296593e27
MD5 6447e960c2bf000c212c407ee5214ff4
BLAKE2b-256 8f13f24c045cbc7254d511713522f7d7a34e46e3e8f4499ceb2c521bc1dda41b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 863d462a8aa37c682a9e1f570d6c2bd92d80c42cf3f1eee893bb253aa2d73e17
MD5 3cd244f9a2f2d22de8a4e83f01b6daac
BLAKE2b-256 eb2faaea2f3f9b5d10a4b8ebcb0fe5cb5eabb320178142980037f83fe8b569a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5cfa77d1fbdc75e444d96e8257467c73288ac652d29b8f40eff9da1e3962f8b3
MD5 7ebddcb592aacd6c4bd3b2380436fb14
BLAKE2b-256 32ed86b03303b9ec9e8c220e4b3539db2681e002af6bfb2f555f4b862059c856

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 912ecc15a8785aa9e8ea6057817f47fac34b061eb441a60771f36abb6f608463
MD5 80841dd0f85eda9eb10e0e0b872ace67
BLAKE2b-256 aefd245eeed983d16eb3d96f14350fdeb45e8619dbc49dae3eab4126f2c06396

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 842b6e79db97a766ab16d58806abe37d509a222e68f40e2dc13222a98f41cf48
MD5 9f804269ee594ed7f5d0356728ba2d9b
BLAKE2b-256 3b9c77b5702c1f9a149268a459afa1fa2a1d67b8bfb68a67fbe1c9821a58a85f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 5d0e0aa690236883d9a3bfab59682cff9d4ed236b09fdae7afc388931d17b79b
MD5 2fbfefd24988796208ceb88f57307736
BLAKE2b-256 9febc11477aebd51850cc691fd24f882916675bac6c0c91ac7eaab74a51dfaea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 79e6ae75eb8cb6631f9947ea1bb2e5d90019d4aa311c85833ef465e093704cdd
MD5 5f106f83b6c8d1e9091050c5b6615b9a
BLAKE2b-256 a5044c6c2ddeee1629fd9ce2ba22187591586c3f0a6c9c736193a88ae4021ee9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63199038ea8130ce0ee7186c1f04ba6ddd548fa7dc21c433dc001a36463e2185
MD5 226546058b2db0206cd4438ad5ec6794
BLAKE2b-256 5544dce67ebe72b053b574a90cd226c20cdc36099299017c922d33b0822d6ace

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.5-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3afd8c82cae35d5741bcf844df0031d89d6eb25dbe4dc40f7fe9c3609ef7239a
MD5 bcd1adcf6449bef4cb14a972fd1e87f2
BLAKE2b-256 c9b23f846a00fbaaf058ae40e0ace2fb0b4ac4289c0d29881d208e232c1d5aa1

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