No project description provided
Project description
dcu
Dependency Check & Update — a fast, multi-ecosystem dependency updater written in Rust.
Like npm-check-updates, but for every language.
$ dcu
Checking Cargo.toml
toml_edit 0.22 -> 0.25.4
Run dcu -u to upgrade Cargo.toml
Features
- Multi-ecosystem —
package.json,Cargo.toml,pyproject.tomlin a single tool - Format-preserving — surgical byte-range patching for JSON;
toml_editfor TOML. Your indentation, comments, and line endings stay intact - Fast — concurrent registry lookups across all manifests (
futures::join_all) - Smart range checking — skips false positives where the resolved version already satisfies the current range
- Deep scan —
dcu -drecursively finds manifests in monorepos, respecting.gitignore - ncu-compatible UX — same flags you already know
Supported Ecosystems
| Ecosystem | Manifest | Registry | Crate |
|---|---|---|---|
| Node.js | package.json |
npm | dcu-node |
| Rust | Cargo.toml |
crates.io | dcu-rust |
| Python | pyproject.toml |
PyPI | dcu-python |
Installation
# Rust (cargo)
cargo install dcu-cli
# Node.js (npm/bun)
npm install -g @dcu/cli
bun add -g @dcu/cli
# Python (pip/uv)
pip install dependency-check-updates
uv pip install dependency-check-updates
Usage
# Check for outdated dependencies
dcu
# Apply updates
dcu -u
# Recursively scan monorepo
dcu -d
dcu -d -u
# Target specific update level
dcu -t patch # only patch bumps
dcu -t minor # patch + minor bumps
dcu -t latest # latest stable (default)
# Filter packages
dcu react eslint # only check these
dcu -x typescript # exclude these
# Specific manifest
dcu --manifest path/to/Cargo.toml
# JSON output
dcu --format json
# CI mode (exit 1 if updates exist)
dcu -e 2
# Verbose logging
dcu -v # info
dcu -vv # debug
dcu -vvv # trace
Architecture
Follows the changepacks pattern — one crate per language ecosystem, with bridge crates for cross-language distribution:
.
├── crates/
│ ├── dcu-cli/ # Binary + async CLI orchestration
│ ├── dcu-core/ # Shared traits (ManifestHandler, RegistryClient, Scanner)
│ ├── dcu-node/ # Node.js: package.json parser + npm registry
│ ├── dcu-rust/ # Rust: Cargo.toml parser (toml_edit) + crates.io
│ ├── dcu-python/ # Python: pyproject.toml parser (toml_edit) + PyPI
│ └── dcu-testkit/ # Test fixtures and helpers
├── bridge/
│ ├── node/ # napi-rs N-API binding → npm distribution (@dcu/cli)
│ └── python/ # maturin bin binding → PyPI distribution (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, replaces only those bytes. Indent, line endings, trailing newline, key ordering all 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 dcu-core:
ManifestHandler— parse manifest files, collect dependencies, apply format-preserving updatesRegistryClient— resolve versions from package registries with concurrency control
Range Satisfaction
Before reporting an update, the resolver checks if the selected version already satisfies the current range (e.g., ^3 already covers 3.5.1). This eliminates false positives that plague naive string comparison.
Development
# Install dependencies
bun install
# Build everything (CLI + napi + maturin)
bun run build
# Dev build
bun run build:dev
# Lint (clippy + fmt)
bun run lint
# Test
bun run test
# Run CLI
bun run run -- --help
bun run run -- --manifest Cargo.toml -v
Inspirations
- npm-check-updates — the original
ncuthat inspired dcu's UX and flag design - changepacks — workspace architecture pattern (crates/* + bridge/*), multi-language bridge distribution via napi-rs and maturin, and the overall project structure that dcu follows
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.1-py3-none-win_amd64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-win_amd64.whl
- Upload date:
- Size: 3.0 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
404217038e72a23c28a5acee355b6a8c22908e57e054f7b4137467cbed6a9d6d
|
|
| MD5 |
802c778c1f9bb1b71a69361224892587
|
|
| BLAKE2b-256 |
443fa7395ee9424fbf9eb5cdebf0ddd9673c14edf784f6a694ba8324064558ce
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-win32.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-win32.whl
- Upload date:
- Size: 2.6 MB
- Tags: Python 3, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d4848e8c53cdce9329b55ade2efe6bca4694ccb80dac7bb87d7a5b95c2187f1
|
|
| MD5 |
9abd6353d61380ceda07255be4176eed
|
|
| BLAKE2b-256 |
be03dcaa87fd821de6717826d46610c87c66356636039f8e3cd01331f9265fe0
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 3.0 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eff09d26d13de76c5dd972d234f01389b327c46498408c7694146febdf69fac6
|
|
| MD5 |
c98d04521ce0574b875c3f359e12f918
|
|
| BLAKE2b-256 |
879c60d28886ee19b667f14846c9cef702d8eb92905485fd473757db21cc0699
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-musllinux_1_2_i686.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-musllinux_1_2_i686.whl
- Upload date:
- Size: 3.1 MB
- Tags: Python 3, musllinux: musl 1.2+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b8f862963f7962ca1c91cbb010127f63b7e56d2df639d3b34ec4c8dbb57dae2
|
|
| MD5 |
78964f8b2f4f31af61a547b7351d9356
|
|
| BLAKE2b-256 |
70275179548e4a180fcf5ab42fbbe745291740b0cb5c3c971d1e522b36940d66
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-musllinux_1_2_armv7l.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-musllinux_1_2_armv7l.whl
- Upload date:
- Size: 2.7 MB
- Tags: Python 3, musllinux: musl 1.2+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93d1f0e5e74bc365217071ff4650fe696203bc4f5da6fbe4a54ac8030a029ac0
|
|
| MD5 |
a1bd4c163f36b2992d4aae97d881f7c7
|
|
| BLAKE2b-256 |
59c1e4338c750e9a564e122c70e43294208ac42d2e220af597518b1d21764a6f
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b7054f94cee9e9c6249310eb55327b580b97f86705f9384a880e4759e69a7b5
|
|
| MD5 |
0dd568617279f7fb9d523fe32c6c964d
|
|
| BLAKE2b-256 |
dac3aa3737840f4d89bc870b3eff8cae1727f02d070bbc74b5153a1fd1d57a6e
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 3.0 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
806593b6ef4666a9efe739ad59b9cdda7cb6720543f2518d64aca9aea43ae188
|
|
| MD5 |
987addad6613070621ebfc5ab0f82928
|
|
| BLAKE2b-256 |
11c73a133bbc5fff72e152cce9443d3998786895ffc9199b1bc182298ec25b92
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-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.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
641ae44a2bb6a0d6370e7a8030815b3f05a850d67ec10f1c33d4e62c9e614dfb
|
|
| MD5 |
ad962c5d786f3adfee02f07503b1760e
|
|
| BLAKE2b-256 |
b3e35bd20d25b5749bab158f4c74512d52d1ca6f347f62a99584496eae25619d
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 3, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da6220adf24361319aa88e8c9cea5e7eef5bbb025d0dd62bc1e74f082a574a49
|
|
| MD5 |
4fd4cdd61a1d087850a10cc6a4e782cf
|
|
| BLAKE2b-256 |
80e75b325a37a6440d3c9efd8d6fda992276f89733e55e97e17e880e7bdcc05e
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 2.7 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebd1d3ec49960103f0b2cd86270cae0013cb0e14bc20a3c06269ecbe4f2dc493
|
|
| MD5 |
1ddc38f14d0d4d0a4d62b304af65b314
|
|
| BLAKE2b-256 |
7f6ef9db768b6115e2ec3d8737216f2a1bca6d9e179c5701a42ed43a703dfbd3
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2665f46b5461a492417e6525926fcda168fa0aba7bb676202602b5ac71ff81bb
|
|
| MD5 |
f94db3abe92e065ae9dcc92c31622548
|
|
| BLAKE2b-256 |
d6d01d1e1b34fca5ea587038dd27936a2dc6187d94b5b104c920576c9c89524b
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.8 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13047620cc721f838489b30a24043338b87303307174b683185a5d7a6579bec6
|
|
| MD5 |
016771ae997bf934d7c70df6fa5735f8
|
|
| BLAKE2b-256 |
f043375729aba576b3ab5f3d70e43ee0ff336c136055794994346d2dea1eebf4
|
File details
Details for the file dependency_check_updates-0.1.1-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: dependency_check_updates-0.1.1-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 2.9 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e6898dc8b6372ca1b29c4a9c35d78c8aa6de2da54d0cb1af318a4532f48080f
|
|
| MD5 |
fce32f3c18e1dcd9dfaede26847d83e2
|
|
| BLAKE2b-256 |
7ce3d988035e212133b92647777b8063fc2dc950d851d8985f5d1ee73a6eb9f5
|