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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3Windows x86

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

dependency_check_updates-0.1.2-py3-none-musllinux_1_2_aarch64.whl (3.2 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

dependency_check_updates-0.1.2-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.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (3.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ppc64le

dependency_check_updates-0.1.2-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.2-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.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

dependency_check_updates-0.1.2-py3-none-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

dependency_check_updates-0.1.2-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.2-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a52638db3e56dd2532f1641aeed4385525ca769b2b6326e24f753f213bb86cc7
MD5 3ab6f47c8fea87d99f174912374e06f8
BLAKE2b-256 68b98b29dff5a9e42791b19cfacfc5a94bf37f0a77c198ed0512aebe6eda597e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-win32.whl
Algorithm Hash digest
SHA256 d231002b531779825a531ebf1dfb50165ccdf4f4b884f5e9277bd55f020b1fda
MD5 b97cad6992e1dbb5fe658c98cd51c05b
BLAKE2b-256 a6e60687f7c73965ba38d81a3aa800927327f14f85b14cccbb854831243e836f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 38090e5a820741ee8f3972130c43c0178912a18d3bc0f9e5396075594d02726e
MD5 e67db4d2ae25508ec360ddc4ce80c30c
BLAKE2b-256 fd7913734cc715bddc87d59a6b56fca0722777aeb0a8d9b3d7244c0577ef5290

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 6fc075ea65b3175f2aa27efdddc2538aaf4c6e340e1c4b58813481fcad766026
MD5 30f58f9b24511ac98a8b2754aa6750b0
BLAKE2b-256 4045a9910b988ff02dafdeda6adaeea95bfc6209d7869418d94d5dfd73ec8cfc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 3fa11f24d5b415097de7aa6838cb5a6c203b8afcad211f61ae4cd8b68d8f1a01
MD5 4c637d9bb303c4adb060b047ff61e36f
BLAKE2b-256 a9b73d8a45d6aa276cf60ad690ffef080f7dd1f3c741084c01153228bd8dd919

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 28bf700dee4e9811529742640c587da5268792b5759e643b4a0d2cb13e3265d2
MD5 5be9f8c0ced3a3723be44ac93765dacd
BLAKE2b-256 d69fe1b9ee132cd7824eb1f66a011091e0962ff30796e15b1c216a981b90f0c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4fde7728667e040764b152681e633fd5792fd179accba69ee68ad568d42b18b6
MD5 089b4341a451d8e4ca51c5d63d1fc2c2
BLAKE2b-256 96c24f891da5b39f6aa65720335091fe8c0df11aba351c653b92fde98478ea39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 a580fe3b2e5ddc1104cd61a4e8ce544f1ac843e1c70d8f7a206731a678ad0833
MD5 3d94e2669795baf5c31dabda2970ac83
BLAKE2b-256 f75d077f2004b32bc49d6c51266e9af104a7a0d04f154142933aa859871f4860

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1e729c1f0c71f48d64875a7bb4af341ee54249dc6702ac94b7eec9812beddff2
MD5 d9b77636e657ea3cd701a01983f7c617
BLAKE2b-256 d49376b3ec782936c65611bc07af031e8aa4fd79e39715038c61fe4f82ef5631

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 bb3246ced642c23de820317f59293adbf100ec448f46346e1d5522baf398682e
MD5 2c804fe6cebb0eaff636bc7b3645161c
BLAKE2b-256 991da3d8ccc888cdb62b798772f08dcfcd5bdcb523bd948c028d897be9dc743e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4c82a9fc7f366484db31d7f81529974b015a3e2824823d1be4bfee5f204a07a5
MD5 d0184157235b3029c51d0c7ae1225dcd
BLAKE2b-256 186ac6e2e42c5c81907b8ec26cce9a4918de11c64cecdf40db5ea1c5c493ff88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f18b18fcca51577efa2d5b3b6d1279b4071aeb45b27c9dce1665a679632f6e65
MD5 64c527c15965ab0dd632bf13f0819b06
BLAKE2b-256 da2711273d6a0401ec356c2d02664c2b07f9e405d8dac988c0d834736d50b51d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for dependency_check_updates-0.1.2-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 45457535d2b64b0abf1971c554fd14941e6b5e07b0097300e45a464f46922e2d
MD5 01a0fdfc18e1420c09fa3156bcc0b8f1
BLAKE2b-256 8e64729b161faf41d9362054e4d3f3d8b11f5a56238994b6f75f1ddc208e90b7

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