Skip to main content

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-ecosystempackage.json, Cargo.toml, pyproject.toml in a single tool
  • Format-preserving — surgical byte-range patching for JSON; toml_edit for 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 scandcu -d recursively 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_edit document 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 updates
  • RegistryClient — 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 ncu that 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

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

Uploaded Python 3Windows x86-64

dependency_check_updates-0.1.1-py3-none-win32.whl (2.6 MB view details)

Uploaded Python 3Windows x86

dependency_check_updates-0.1.1-py3-none-musllinux_1_2_x86_64.whl (3.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

dependency_check_updates-0.1.1-py3-none-musllinux_1_2_i686.whl (3.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

dependency_check_updates-0.1.1-py3-none-musllinux_1_2_armv7l.whl (2.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

dependency_check_updates-0.1.1-py3-none-musllinux_1_2_aarch64.whl (2.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

dependency_check_updates-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

dependency_check_updates-0.1.1-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.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ i686

dependency_check_updates-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (2.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARMv7l

dependency_check_updates-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

dependency_check_updates-0.1.1-py3-none-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

dependency_check_updates-0.1.1-py3-none-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file dependency_check_updates-0.1.1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 404217038e72a23c28a5acee355b6a8c22908e57e054f7b4137467cbed6a9d6d
MD5 802c778c1f9bb1b71a69361224892587
BLAKE2b-256 443fa7395ee9424fbf9eb5cdebf0ddd9673c14edf784f6a694ba8324064558ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-win32.whl
Algorithm Hash digest
SHA256 9d4848e8c53cdce9329b55ade2efe6bca4694ccb80dac7bb87d7a5b95c2187f1
MD5 9abd6353d61380ceda07255be4176eed
BLAKE2b-256 be03dcaa87fd821de6717826d46610c87c66356636039f8e3cd01331f9265fe0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eff09d26d13de76c5dd972d234f01389b327c46498408c7694146febdf69fac6
MD5 c98d04521ce0574b875c3f359e12f918
BLAKE2b-256 879c60d28886ee19b667f14846c9cef702d8eb92905485fd473757db21cc0699

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 3b8f862963f7962ca1c91cbb010127f63b7e56d2df639d3b34ec4c8dbb57dae2
MD5 78964f8b2f4f31af61a547b7351d9356
BLAKE2b-256 70275179548e4a180fcf5ab42fbbe745291740b0cb5c3c971d1e522b36940d66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 93d1f0e5e74bc365217071ff4650fe696203bc4f5da6fbe4a54ac8030a029ac0
MD5 a1bd4c163f36b2992d4aae97d881f7c7
BLAKE2b-256 59c1e4338c750e9a564e122c70e43294208ac42d2e220af597518b1d21764a6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7b7054f94cee9e9c6249310eb55327b580b97f86705f9384a880e4759e69a7b5
MD5 0dd568617279f7fb9d523fe32c6c964d
BLAKE2b-256 dac3aa3737840f4d89bc870b3eff8cae1727f02d070bbc74b5153a1fd1d57a6e

See more details on using hashes here.

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

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 806593b6ef4666a9efe739ad59b9cdda7cb6720543f2518d64aca9aea43ae188
MD5 987addad6613070621ebfc5ab0f82928
BLAKE2b-256 11c73a133bbc5fff72e152cce9443d3998786895ffc9199b1bc182298ec25b92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 641ae44a2bb6a0d6370e7a8030815b3f05a850d67ec10f1c33d4e62c9e614dfb
MD5 ad962c5d786f3adfee02f07503b1760e
BLAKE2b-256 b3e35bd20d25b5749bab158f4c74512d52d1ca6f347f62a99584496eae25619d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 da6220adf24361319aa88e8c9cea5e7eef5bbb025d0dd62bc1e74f082a574a49
MD5 4fd4cdd61a1d087850a10cc6a4e782cf
BLAKE2b-256 80e75b325a37a6440d3c9efd8d6fda992276f89733e55e97e17e880e7bdcc05e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 ebd1d3ec49960103f0b2cd86270cae0013cb0e14bc20a3c06269ecbe4f2dc493
MD5 1ddc38f14d0d4d0a4d62b304af65b314
BLAKE2b-256 7f6ef9db768b6115e2ec3d8737216f2a1bca6d9e179c5701a42ed43a703dfbd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2665f46b5461a492417e6525926fcda168fa0aba7bb676202602b5ac71ff81bb
MD5 f94db3abe92e065ae9dcc92c31622548
BLAKE2b-256 d6d01d1e1b34fca5ea587038dd27936a2dc6187d94b5b104c920576c9c89524b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 13047620cc721f838489b30a24043338b87303307174b683185a5d7a6579bec6
MD5 016771ae997bf934d7c70df6fa5735f8
BLAKE2b-256 f043375729aba576b3ab5f3d70e43ee0ff336c136055794994346d2dea1eebf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e6898dc8b6372ca1b29c4a9c35d78c8aa6de2da54d0cb1af318a4532f48080f
MD5 fce32f3c18e1dcd9dfaede26847d83e2
BLAKE2b-256 7ce3d988035e212133b92647777b8063fc2dc950d851d8985f5d1ee73a6eb9f5

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