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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

dependency_check_updates-0.1.12-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.12-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 41397968c8c0f462d93c7839b7132a3645344cd06e9f20d1f37730407c4a4ed8
MD5 3ad0d2ce308b67401f54cb8f4ae10097
BLAKE2b-256 e9624d97f2b7ec5ab1e2a082d50898b7e2e6906f76cbbd7a9ada6b973c3c16ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-win32.whl
Algorithm Hash digest
SHA256 cb6dd1154e25b865decaba22c647a1f0b8ca36b8a39bed2a990ec1d0b96c447d
MD5 ffa6e0d43acbeb9aafb4baccc32295b6
BLAKE2b-256 6cba896375cc4f82f21029d0652bdcd09b755eb42c0d186708055b83be9ac57b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 df1bb702083ef0d63f84464e3eabc1a68b575c397b65b8af4d996a2e12f220b0
MD5 fb8369d1a76e46643b61ab4e5e639974
BLAKE2b-256 3aa4a27e0a86eb5ba078a214cb034a17f895bf1afe938ccf5d3f6dd2583ff106

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 43403d6c7be7820fe2a3f4ec4b4efa2dcefd508a0a56e46f1e1a74dc882efdf9
MD5 2173e9fd920038ae235f59105b62aefe
BLAKE2b-256 ce2ece1d441d86b8361cfb2f4fb66fe1cbd3e53ee56e641f60b17f28536dedd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 8b6b84967dcbb6d8b8823001854686ebd0795479acbb8302fc6008f9c8e68e38
MD5 55d69f4af177c24594362bd88fdbb5fa
BLAKE2b-256 45448bd3020f640151b08ca45a20a4c3252b859cea7ed5757cedb3fff1dfe320

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c70d6c6e12879bafea6afd63f330124d6362a64531a872b62be06010b17a7002
MD5 ee5a3b78fe2cd07a38e56db3f8597494
BLAKE2b-256 97f347695da3712ad9391784058cb05e20a81eebbe030749bda8a8f3ce58f49a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ffcfd7c4a3753a71bad26a902861f61763278fac3a48d4ce95abdd915d75e494
MD5 ec306217da4d77b30ac24415e6d79f89
BLAKE2b-256 dd82f00b3d5e3385bbcaa2ae5f296ebedea6ae6a5019a9198c109824472532d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 191f77f57ffe2f507675ec720e1c0fdcaeb3edd9151751d943fd2782a88a7cd9
MD5 b91ebbb774d677439a94b644e3442739
BLAKE2b-256 328bdaa9e5433d63637d8e0b8ee62f59d7eed6ecf34e20e0aec9a97aab7fb73c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5df65d4fcf8b2504e6370d17c22d4dfb04b0fa37c77ae5d75b0cc407db7e2822
MD5 b648244ad293c778ee60d559c30b4aac
BLAKE2b-256 7e5a3790d379420dd58d75e8085212d149f9d84a5f4af5050dd2202941acb9f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 6e6a6bc86e30ff13eda5a4bb2014d605b077c91ea65c4cec1998b21c7da0c5cf
MD5 8ae1af28753eaaf645950e6997acb018
BLAKE2b-256 8ea5a591a0c281dbddc5811953b155ea8d68168308eeb321ceba6e80b26c67ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fb035a73fe4abfa731e597c85124f9d58ffab3482a4b85c49ed906931be24faa
MD5 c4d6944a847819aa94564731c3ff83f3
BLAKE2b-256 559f90c32c2cd0495462f51f546af11020c09486b3cd3776b741b7e0f7c5e32a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a9b6e083b36c4fe295cf708aa4c81c083fbd18a79e5bb7b10f6d7c2b2944daf
MD5 7533002b290579139b8310cf0876dc93
BLAKE2b-256 58ee9e07c2146c4c4db467d60df90afe0fd05304fbb410174e21a9c5bdf8350e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.12-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c0155a71beb0218823ec5c1dc0579ef6d91ef8d12f64cbb6bea516dd19fbfc52
MD5 40237dcc788d7410e9a3515828cef17e
BLAKE2b-256 17a336c909b36ea8a93c20a469d33639620ee844da143c7e6652722d6c62c2bd

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