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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ i686

dependency_check_updates-0.1.4-py3-none-musllinux_1_2_armv7l.whl (2.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

dependency_check_updates-0.1.4-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.4-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 1cefaa9f7b67434f64e0edc7768ed1983cbe1f95281be4f0988da84009f2e483
MD5 f4f7bcb4b00fd40b697c1f7da24343a0
BLAKE2b-256 13bb5d9049ad3d2e542fc68460951c368223ac1cea559fe2c6a4792c0e1e9386

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-win32.whl
Algorithm Hash digest
SHA256 fadf6448379ca3618876ffcdb0f430e533632226e84ca2b17e259e0d9584768b
MD5 ade75b54252592826b3039db8e23d727
BLAKE2b-256 24632d6dd503b8662aa1677a7f2f24fd438dffd537e008b1748c91eed1b9c696

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1de65d6b6d444c12acb75fe5b6f2098f27d878d1b249bebc3a0a9aef3027abe2
MD5 fb43d203953d976b3cdcdf5678e07f18
BLAKE2b-256 9ff32b82d8c202a896ff59b5633220bf4dc38fa10fa9285e7e7ec08d10082f22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 5c9fab30e48fc83458b6d1d0bf970e77e29425ebcf8d934f77e1c0f0acb63825
MD5 a7c965a231cff3c963ba3322e649093b
BLAKE2b-256 87bfbe645e3283001b3eb9dd7932fab3b3e433ef7f2093c470af5e74fc29abb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 ded0639c1eaa9c64c71571c66820d7f07eb890b9d8b366ba9e33cc4ca2dcde15
MD5 7e09cb3306f246416f35dd392c761364
BLAKE2b-256 3be75af84281a75149ad4d65a271359eb4738767097609478a9532ce8cf00970

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6c51e1e14051c8ce6170c8fa195318d9cafe15d540bd48cf82d194e1434bb42a
MD5 98a309d87a2a26983d0dae05aef9a3f9
BLAKE2b-256 e1aed93f62d315521aadbb7a1d374f5b2803e1b02dfebe1558504ca3583f8b13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e6a5cd97dfd2277a69c9067e7d4604305fd09e1805b0797f354a677f6d75f7e4
MD5 dff8c2fd352e9e22a2348f43cd803461
BLAKE2b-256 83619e33e0b79f6e9e2ce61d603f88d6efb4cd4235af1c5234a875fd298ac27d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 117b5f7f315daffc586b60d5bb294c23913a8070e1d34ec4033d2a1d1744c3b7
MD5 0409c06fd6fe37fbad4ee747dff1b818
BLAKE2b-256 5205b0700609e9d9498f7ffbc70ce0e77e349819dc9ae355626c83a65fcfc250

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c042870202836d957d6d94f829aa89eb19b47ea0dcf5ee0c2759c8754d22fd5b
MD5 8775c45b19ffbe4cc47ac0ce5626a866
BLAKE2b-256 df8c22d8ab439f24908e1e7ef43517bd6cf2bc0a08ee18017c47121d57ac0669

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 3cf6d9f09c3d451b9f2e84c741e956f520af228c4b1de807fd82be60ea831f29
MD5 0816daa6bc45ed3059b8a38e8154a231
BLAKE2b-256 34004ae043566fb47c36a9a6cec6ab35e4c9b1a8e6f256b43bc37a479d944082

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7a2aeffbbd1d33a33d3f3e89d3e6dd1e1823f131c4e1e8c2eb89972470eff170
MD5 3de249966b49a944033be08a3815f6e5
BLAKE2b-256 8fa74ddc3ddda78a67313acc5613451e92cec86a830827150d854076ab9fb9ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3625fa057774afe37fc48e69ebcc738dcbe171163dc545a8947ffaa0c707eb0a
MD5 a7f4fccd88500084edcc3e9fb8cb53f0
BLAKE2b-256 f53e6edb25e971ec6e71aa187f8611cb114d2f4c8ef988bd06630060953ac8ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.4-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7215ec4ae06b035ccf239fa4a7f4a728b2c040778e59122ff88486d950af1bb1
MD5 50a8f9590c8a03769f1132627ea403d2
BLAKE2b-256 c138e81ecc26e44b55b141377d1f5a9c2440df8c60981bb4303ab445e86b70ea

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