dep-daddy
v0.7.0
Published
Interactive pnpm dependency upgrade tool with changelog detection, persistent ignore, and catalog support
Maintainers
Readme
dep-daddy
Interactive pnpm dependency upgrade tool with changelog detection, persistent ignore, catalog support, and monorepo/workspace awareness.
Inspired by npm-upgrade, rebuilt from scratch for pnpm.
Install
# npx (no install)
npx dep-daddy
# global install
pnpm add -g dep-daddy
# or as a dev dependency
pnpm add -D dep-daddyQuick start
daddy
# include already-up-to-date rows in the overview/prompt flow
daddy --show-up-to-date
# emit structured, non-interactive JSON
daddy --output jsonRun from any directory with a package.json (standalone) or from a pnpm workspace root (monorepo). The tool detects the context automatically.
Features
- Monorepo support — workspace root detection, searchable scope picker (catalogs + packages), per-scope overview tables, package-scoped updates, scoped ignore config
- Overview table — outdated dependencies grouped by type (
dependencies,devDependencies, etc.) with current, wanted, latest, and range columns - Update vs upgrade — distinguishes wanted updates (highest registry version satisfying your declared range) from latest upgrades (updates your
package.jsonrange) - Changelog detection — lazy multi-strategy resolver: npm registry field, GitHub/GitLab file probing via HEAD requests, releases page fallback, homepage fallback
- Persistent ignore — semver-range ignore rules in
.dep-daddy.jsonwith reasons; ignored dependencies reappear when the range no longer matches - pnpm catalog support — detects
catalog:protocol and updatespnpm-workspace.yamldirectly, preserving range prefixes and YAML comments - Semver violator flags — mark dependencies that ship breaking changes in minor/patch releases; flagged dependencies show a warning banner on every upgrade
- Keyboard shortcuts — single-key selection (
[u]pdate,[s]kip,[c]hangelog,[m]ore,[n]ext,[f]inish) with arrow key navigation
Usage
Standalone
daddy- Runs
pnpm outdated --jsonto find outdated dependencies - Shows an overview table grouped by dependency type
By default, deps with no available wanted/latest change are hidden; pass
--show-up-to-dateto include them. Pass--output jsonto emit structured non-interactive results instead of the interactive table/prompt flow. - Filters out ignored dependencies from
.dep-daddy.json - Presents each dependency interactively:
[u]pdate— accept the wanted version[s]kip— skip to the next dependency[c]hangelog— resolve and open the changelog in your browser[m]ore— sub-menu:up[g]rade(latest version, updates your range),[i]gnore, semver[v]iolator,[b]ack[f]inish— apply accepted changes so far
- Applies upgrades (
pnpm updatefor regular deps,pnpm-workspace.yamledits for catalog deps)
Monorepo
# from workspace root
daddy- Runs
pnpm outdated -r --jsonacross the workspace - Shows a searchable scope picker:
- All — process every scope sequentially
- Catalogs — shared catalog dependencies (e.g.
default, named catalogs) - Packages — individual workspace packages with their own dependencies
By default, deps with no available wanted/latest change are hidden; pass
--show-up-to-dateto include them. Pass--output jsonto emit structured non-interactive results grouped by scope.
- For each scope: overview table, interactive per-dependency flow,
[n]extto jump to the next scope - Project scopes show a summary of pending catalog updates (managed in the catalog scope, not duplicated)
- Applies upgrades: catalog changes write to
pnpm-workspace.yaml, project changes are scoped to the correct workspace package, followed by a singlepnpm install
Running from inside a workspace package prints an error pointing to the workspace root.
Configuration
.dep-daddy.json
Automatically managed. Created when you ignore a dependency or flag a semver violator; deleted when empty. Same format for both standalone and monorepo.
Ignores are namespaced by scope:
depdaddy-global— applies everywhere (standalone projects use this as their only scope)catalog:<name>— applies to a specific catalog<package>— applies to a specific workspace package
Semver violators are always global (not scoped).
Ignore entries use semver ranges. When the latest version no longer matches, the dependency reappears. Accepting an upgrade removes its ignore entry.
Catalog support
Dependencies using pnpm's catalog: protocol are detected automatically. When you accept an upgrade, dep-daddy updates the version in pnpm-workspace.yaml (not package.json), preserving range prefixes (^, ~, >=) and YAML comments.
Both default (catalog:) and named (catalog:react18) catalogs are supported.
Changelog detection
Resolution is lazy (triggered only when you press [c]) and follows this cascade:
- npm registry
changelogfield — used directly if declared - GitHub/GitLab file probing — HEAD requests for
CHANGELOG.md,HISTORY.md,CHANGES.md - Releases page —
{repo}/releasesfallback - Homepage — offered as
[o]pen homepageif no changelog found
All network requests have a 5-second timeout. Failures are swallowed gracefully.
Requirements
- Node.js >= 18.12
- pnpm >= 9.5.0
License
MIT
