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
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-ecosystem —
package.json,Cargo.toml,pyproject.tomlhandled by a single binary - Format-preserving — surgical byte-range patching for JSON;
toml_editfor 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 (
^3already covers3.5.1) - Deep scan —
-drecursively finds manifests in monorepos, respecting.gitignore - ncu-compatible UX — the same flags you already know from
npm-check-updates - CI-friendly —
-e 2exits non-zero when updates exist;--format jsonemits 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
dcuworks 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_editdocument 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 updatesRegistryClient— 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
ncuthat 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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dependency_check_updates-0.1.12-py3-none-win_amd64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-win_amd64.whl
- Upload date:
- Size: 3.1 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41397968c8c0f462d93c7839b7132a3645344cd06e9f20d1f37730407c4a4ed8
|
|
| MD5 |
3ad0d2ce308b67401f54cb8f4ae10097
|
|
| BLAKE2b-256 |
e9624d97f2b7ec5ab1e2a082d50898b7e2e6906f76cbbd7a9ada6b973c3c16ab
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-win32.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-win32.whl
- Upload date:
- Size: 2.7 MB
- Tags: Python 3, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb6dd1154e25b865decaba22c647a1f0b8ca36b8a39bed2a990ec1d0b96c447d
|
|
| MD5 |
ffa6e0d43acbeb9aafb4baccc32295b6
|
|
| BLAKE2b-256 |
6cba896375cc4f82f21029d0652bdcd09b755eb42c0d186708055b83be9ac57b
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 3.4 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df1bb702083ef0d63f84464e3eabc1a68b575c397b65b8af4d996a2e12f220b0
|
|
| MD5 |
fb8369d1a76e46643b61ab4e5e639974
|
|
| BLAKE2b-256 |
3aa4a27e0a86eb5ba078a214cb034a17f895bf1afe938ccf5d3f6dd2583ff106
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-musllinux_1_2_i686.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-musllinux_1_2_i686.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 3, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43403d6c7be7820fe2a3f4ec4b4efa2dcefd508a0a56e46f1e1a74dc882efdf9
|
|
| MD5 |
2173e9fd920038ae235f59105b62aefe
|
|
| BLAKE2b-256 |
ce2ece1d441d86b8361cfb2f4fb66fe1cbd3e53ee56e641f60b17f28536dedd0
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-musllinux_1_2_armv7l.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-musllinux_1_2_armv7l.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3, musllinux: musl 1.2+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b6b84967dcbb6d8b8823001854686ebd0795479acbb8302fc6008f9c8e68e38
|
|
| MD5 |
55d69f4af177c24594362bd88fdbb5fa
|
|
| BLAKE2b-256 |
45448bd3020f640151b08ca45a20a4c3252b859cea7ed5757cedb3fff1dfe320
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 3.1 MB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c70d6c6e12879bafea6afd63f330124d6362a64531a872b62be06010b17a7002
|
|
| MD5 |
ee5a3b78fe2cd07a38e56db3f8597494
|
|
| BLAKE2b-256 |
97f347695da3712ad9391784058cb05e20a81eebbe030749bda8a8f3ce58f49a
|
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
- Download URL: dependency_check_updates-0.1.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.3 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffcfd7c4a3753a71bad26a902861f61763278fac3a48d4ce95abdd915d75e494
|
|
| MD5 |
ec306217da4d77b30ac24415e6d79f89
|
|
| BLAKE2b-256 |
dd82f00b3d5e3385bbcaa2ae5f296ebedea6ae6a5019a9198c109824472532d9
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
- Upload date:
- Size: 3.8 MB
- Tags: Python 3, manylinux: glibc 2.17+ ppc64le
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
191f77f57ffe2f507675ec720e1c0fdcaeb3edd9151751d943fd2782a88a7cd9
|
|
| MD5 |
b91ebbb774d677439a94b644e3442739
|
|
| BLAKE2b-256 |
328bdaa9e5433d63637d8e0b8ee62f59d7eed6ecf34e20e0aec9a97aab7fb73c
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 3.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5df65d4fcf8b2504e6370d17c22d4dfb04b0fa37c77ae5d75b0cc407db7e2822
|
|
| MD5 |
b648244ad293c778ee60d559c30b4aac
|
|
| BLAKE2b-256 |
7e5a3790d379420dd58d75e8085212d149f9d84a5f4af5050dd2202941acb9f9
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e6a6bc86e30ff13eda5a4bb2014d605b077c91ea65c4cec1998b21c7da0c5cf
|
|
| MD5 |
8ae1af28753eaaf645950e6997acb018
|
|
| BLAKE2b-256 |
8ea5a591a0c281dbddc5811953b155ea8d68168308eeb321ceba6e80b26c67ef
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 3.1 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb035a73fe4abfa731e597c85124f9d58ffab3482a4b85c49ed906931be24faa
|
|
| MD5 |
c4d6944a847819aa94564731c3ff83f3
|
|
| BLAKE2b-256 |
559f90c32c2cd0495462f51f546af11020c09486b3cd3776b741b7e0f7c5e32a
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.1 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a9b6e083b36c4fe295cf708aa4c81c083fbd18a79e5bb7b10f6d7c2b2944daf
|
|
| MD5 |
7533002b290579139b8310cf0876dc93
|
|
| BLAKE2b-256 |
58ee9e07c2146c4c4db467d60df90afe0fd05304fbb410174e21a9c5bdf8350e
|
File details
Details for the file dependency_check_updates-0.1.12-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.12-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0155a71beb0218823ec5c1dc0579ef6d91ef8d12f64cbb6bea516dd19fbfc52
|
|
| MD5 |
40237dcc788d7410e9a3515828cef17e
|
|
| BLAKE2b-256 |
17a336c909b36ea8a93c20a469d33639620ee844da143c7e6652722d6c62c2bd
|