depup
Check dependency versions across multiple ecosystems.
depup auto-detects project ecosystems in a directory tree and checks all dependencies for newer versions. Currently supports Maven and npm (with npm, pnpm, yarn classic, and bun package managers).
Installation
Precompiled binaries are available for macOS (Intel & Apple Silicon), Linux, and Windows.
Brew
brew tap hpehl/tap
brew install depup
Cargo
cargo install depup-cli
Build from source
- Install Rust and Cargo
git clone git@github.com:hpehl/depup.gitcd depupcargo build --release && cargo install --path .
This installs the depup binary to ~/.cargo/bin/ which should be in your $PATH.
Usage
# Check current directory (auto-detects ecosystems)
# Check a specific project
# JSON output (for scripting)
# Only show outdated versions
# Exclude pre-release versions (alpha, beta, RC, milestone)
# Generate shell completions (auto-detects shell)
# Install shell completions
# Generate completions for a specific shell
If both Maven and npm ecosystem projects are found in the target path, both are checked and results are combined.
Subcommands
| Command | Description |
|---|---|
check |
Check dependencies for newer versions (default) |
update |
Update dependencies to their latest versions (not yet implemented) |
audit |
Audit dependencies for known vulnerabilities (not yet implemented) |
completions |
Generate and install shell completions |
Ecosystems
Maven
Scans multi-module Maven projects, discovers all ${version.*} properties and the artifacts they control, then checks each against upstream Maven repositories. Works where Maven's versions:display-property-updates fails — when properties are defined in a parent POM but referenced in child POMs.
Also detects Node.js and package manager version properties in Maven POMs (e.g., version.node, version.npm, version.pnpm, version.yarn).
npm
Discovers npm ecosystem projects in the directory tree by detecting the package manager via lock file (pnpm-lock.yaml, package-lock.json, yarn.lock, bun.lock/bun.lockb) or the packageManager field in package.json. Runs the appropriate package manager's outdated command on each discovered project and aggregates results. Workspace members are skipped — only root projects are checked.
Supported package managers: npm, pnpm, yarn (classic), bun.
Example Output
[2/4] ████████████████████████████▓░ org.junit.jupiter:junit-jupiter
Dependencies
✓ org.apache.maven.plugins:maven-compiler-plugin 3.13.0 up-to-date
→ org.junit.jupiter:junit-jupiter 5.10.0 → 5.12.2
Plugins
✓ org.apache.maven.plugins:maven-javadoc-plugin 3.12.0 up-to-date
✓ org.mockito:mockito-core 5.18.0 up-to-date
4 checked: 3 current, 1 outdated (● Dependency, ■ Plugin)
Done in 1s
The exit code is 0 when all versions are current, 1 when any are outdated.
JSON Mode
Use --json for machine-readable output. Progress bars are suppressed, and errors produce structured JSON:
Error codes: POM_NOT_FOUND, POM_PARSE_FAILED, HTTP_REQUEST_FAILED, CLAP_PARSE_ERROR, INTERNAL.
How It Works
Maven
- Parses the root
pom.xmland recursively follows<modules>declarations - For every
<dependency>and<plugin>using${version.*}, maps the property to its groupId and artifactId - Resolves property values from the root POM's
<properties>block - Queries Maven Central for the latest version of each artifact (via
maven-metadata.xml) - If not found on Maven Central, queries all
<repositories>and<pluginRepositories>defined in the POMs in parallel - Compares versions using Maven-aware ordering (handles
.Final,-SP1, and other qualifiers)
npm
- Walks the directory tree finding directories with a recognized lock file or
packageManagerfield inpackage.json - Auto-detects the package manager (npm, pnpm, yarn, or bun) from the lock file type or
packageManagerfield - Skips
node_modules/and workspace members - Runs each package manager's list and outdated commands in JSON mode
- Parses and aggregates results across all discovered projects
Version Filtering
By default, depup includes pre-release versions but always excludes SNAPSHOTs (Maven). Use --stable (alias --releases-only) to also exclude pre-release versions matching these patterns:
*-alpha*,*-beta**-RC*,*-CR**-M*(milestones)*-preview*,*-dev*,*-incubating*
SNAPSHOTs are always excluded regardless of flags.
Shell Completions
Generate and install shell completions for tab-completion of subcommands and flags:
Supported shells: bash, zsh, fish, elvish, powershell.
Requirements
- Rust 1.85+ (edition 2024)
- Network access to Maven Central (
repo1.maven.org) and any custom repositories defined in the project's POMs - For npm ecosystem checks: the respective package manager (npm, pnpm, yarn, or bun) must be installed and on PATH
License
Apache License 2.0