npm PACKAGE

dependency-cruiser 18.7.0

Warn

PkgFire would install this release with a warning.·Checked 2 hours ago·Published 19 October 2026

npmjs.com

Why

  • warnSuspicious behaviour

    Difference between manifest and package.json found: devDependencies: svgo: Manifest("4.1.0"), package.json("None") @types/prompts: Manifest("2.4.9"), package.json("None") ajv: Manifest("8.20.0"), package.json("None") svelte: Manifest("5.57.2"), package.json("None") c8: Manifest("12.0.0"), package.json("None") @types/node: Manifest("^26.6.5"), package.json("None") prettier: Manifest("3.9.10"), package.json("None") oxlint: Manifest("1.87.0"), package.json("None") upem: Manifest("11.0.1"), package.json("None") @swc/core: Manifest("1.16.18"), package.json("None") esbuild: Manifest("0.28.2"), package.json("None") @babel/core: Manifest("^7.29.7"), package.json("None") symlink-dir: Manifest("^7.1.0"), package.json("None") npm-run-all2: Manifest("9.0.3"), package.json("None") typescript: Manifest("^6.0.3"), package.json("None") husky: Manifest("9.1.7"), package.json("None") clean-pkg-json: Manifest("2.0.0"), package.json("None") coffeescript: Manifest("2.7.0"), package.json("None") yarn: Manifest("1.22.22"), package.json("None") normalize-newline: Manifest("5.0.0"), package.json("None") mocha: Manifest("12.0.3"), package.json("None") @babel/plugin-transform-modules-commonjs: Manifest("^7.29.7"), package.json("None") proxyquire: Manifest("2.1.3"), package.json("None") @vue/compiler-sfc: Manifest("3.5.43"), package.json("None") @babel/preset-typescript: Manifest("^7.29.7"), package.json("None") lint-staged: Manifest("17.6.0"), package.json("None") vue-template-compiler: Manifest("2.7.16"), package.json("None") scripts: update-dependencies: Manifest("npm-run-all --node-run upem:update upem:install build:clean build lint:eslint:clear-caches lint:fix depcruise test:cover"), package.json("None") depcruise:graph:view: Manifest("node ./bin/dependency-cruiser.mjs bin src --prefix vscode://file/$(pwd)/ --config configs/.dependency-cruiser-show-metrics-config.mjs --output-type dot-webpage --progress cli-feedback --highlight "$(watskeburt main)" | browser"), package.json("None") prepack:clean-pkg-json: Manifest("clean-pkg-json --dry | jq '.scripts = {test: "echo see github for test, build and analysis scripts"}' | jq '.type = "module"' > smaller-package.json && mv smaller-package.json package.json && prettier --log-level warn --write --use-tabs package.json"), package.json("None") depcruise:graph:doc:fmt-dir: Manifest("./bin/depcruise-fmt.mjs -T ddot -f - node_modules/.cache/tmp_graph_deps.json | dot -T svg -Grankdir=TD | tee doc/real-world-samples/dependency-cruiser-dir-graph.svg | node bin/wrap-stream-in-html.mjs > docs/dependency-cruiser-dir-graph.html"), package.json("None") lint: Manifest("npm-run-all --parallel --aggregate-output --node-run lint:eslint format:check lint:types"), package.json("None") prepack: Manifest("npm-run-all --node-run prepack:format-src-with-tabs prepack:clean-pkg-json"), package.json("None") depcruise:graph:doc:samples: Manifest("sh tools/generate-samples.sh"), package.json("None") postpack: Manifest("git restore package.json bin src types configs"), package.json("None") scm:push:github:tags: Manifest("git push --tags"), package.json("None") test:load:cached:short: Manifest("hyperfine --warmup 1 --runs 5 "bin/dependency-cruiser.mjs src bin test configs types tools --ignore-known --cache node_modules/.cache/dependency-cruiser/load-cached --no-progress""), package.json("None") format: Manifest("prettier --log-level warn --write "src/**/*.?js" "configs/**/*.?js" "tools/**/*.mjs" "bin/*" "types/*.d.mts" "test/**/*.spec.{cjs,js}" "test/**/*.{spec,utl}.mjs""), package.json("None") scm:push:github:commits: Manifest("git push"), package.json("None") lint:types: Manifest("npm-run-all --node-run lint:types:tsc lint:types:lint"), package.json("None") depcruise:graph:mermaid: Manifest("node ./bin/dependency-cruiser.mjs bin src --include-only ^src/ --collapse 2 --output-type mermaid"), package.json("None") scm:push:gitlab-mirror:tags: Manifest("git push --tags gitlab-mirror"), package.json("None") test:load: Manifest("hyperfine --warmup 3 --runs 30 "bin/dependency-cruiser.mjs src bin test configs types tools --ignore-known --no-cache --no-progress""), package.json("None") depcruise:explain: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types tools --output-type err-long --progress none"), package.json("None") depcruise:graph:view:diff: Manifest("node ./bin/dependency-cruiser.mjs bin src test --prefix vscode://file/$(pwd)/ --config configs/.dependency-cruiser-unlimited.mjs --output-type dot-webpage --progress cli-feedback --affected | browser"), package.json("None") lint:eslint: Manifest("oxlint bin/dependency-cruiser.mjs bin src test configs tools/**/*.mjs"), package.json("None") lint:types:tsc: Manifest("tsc --project types/tsconfig.json"), package.json("None") test:glob: Manifest("set -f && test "`bin/dependency-cruiser.mjs --no-config test/extract/__mocks__/gather-globbing/packages/**/src/**/*.js | grep "no dependency violations found"`" = "✔ no dependency violations found (6 modules, 0 dependencies cruised)""), package.json("None") test: Manifest("LANG=en_US.UTF-8 NODE_OPTIONS=--no-warnings NO_COLOR=1 mocha"), package.json("echo see github for test, build and analysis scripts") lint:eslint:clear-caches: Manifest("rm -rf node_modules/.cache/eslint/"), package.json("None") lint:fix: Manifest("npm-run-all --node-run lint:eslint:fix format lint:types:fix"), package.json("None") format:check: Manifest("prettier --log-level warn --check "src/**/*.?js" "configs/**/*.?js" "tools/**/*.mjs" "bin/*" "types/*.d.mts" "test/**/*.spec.{cjs,js}" "test/**/*.{spec,utl}.mjs""), package.json("None") check: Manifest("npm-run-all --node-run build lint depcruise test:cover"), package.json("None") depcruise:graph:doc: Manifest("npm-run-all --node-run depcruise:graph:doc:json --parallel depcruise:graph:doc:fmt-* depcruise:graph:doc:samples"), package.json("None") scm:push:bitbucket-mirror: Manifest("run-p --aggregate-output scm:push:bitbucket-mirror:*"), package.json("None") upem:install: Manifest("npm install"), package.json("None") scm:push:bitbucket-mirror:commits: Manifest("git push bitbucket-mirror"), package.json("None") lint:types:fix: Manifest("oxlint --fix types/*.d.mts"), package.json("None") version: Manifest("npm-run-all --node-run build depcruise:graph:doc scm:stage"), package.json("None") scm:stage: Manifest("git add ."), package.json("None") build:clean: Manifest("make clean"), package.json("None") lint:types:lint: Manifest("oxlint types/*.d.mts"), package.json("None") depcruise:graph:doc:fmt-schema: Manifest("cd tools/schema && node ../../bin/dependency-cruiser.mjs . --output-type dot | dot -T svg | tee ../overview.svg | node ../../bin/wrap-stream-in-html.mjs > ../../docs/schema-overview.html && cd -"), package.json("None") depcruise:graph:doc:fmt-types: Manifest("cd types && node ../bin/dependency-cruiser.mjs . --output-type dot | dot -T svg | tee overview.svg | ../bin/wrap-stream-in-html.mjs > overview.html && cd -"), package.json("None") depcruise:graph:doc:fmt-detail: Manifest("./bin/depcruise-fmt.mjs -T dot -f - node_modules/.cache/tmp_graph_deps.json | dot -T svg | tee doc/real-world-samples/dependency-cruiser-without-node_modules.svg | node bin/wrap-stream-in-html.mjs > docs/dependency-cruiser-dependency-graph.html"), package.json("None") test:load:short: Manifest("hyperfine --warmup 1 --runs 5 "bin/dependency-cruiser.mjs src bin test configs types tools --ignore-known --no-cache --no-progress""), package.json("None") test:cover: Manifest("LANG=en_US.UTF-8 NODE_OPTIONS=--no-warnings NO_COLOR=1 c8 mocha"), package.json("None") depcruise:reaches: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types tools --progress --no-cache --config configs/.dependency-cruiser-unlimited.mjs --output-type text --reaches"), package.json("None") test:e: Manifest("LANG=en_US.UTF-8 NODE_OPTIONS=--no-warnings NO_COLOR=1 mocha --grep "^\[[E]\]""), package.json("None") depcruise:baseline: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types tools --baseline --progress"), package.json("None") test:u: Manifest("LANG=en_US.UTF-8 NODE_OPTIONS=--no-warnings NO_COLOR=1 mocha --grep "^\[[U]\]""), package.json("None") depcruise: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types tools --ignore-known"), package.json("None") upem:update: Manifest("npm outdated --json --long | upem | pbcopy && pbpaste"), package.json("None") prepack:format-src-with-tabs: Manifest("prettier --log-level warn --write --use-tabs bin src types configs"), package.json("None") depcruise:graph:doc:json: Manifest("node ./bin/dependency-cruiser.mjs bin src test --output-type json --output-to node_modules/.cache/tmp_graph_deps.json --progress"), package.json("None") check:full: Manifest("npm-run-all --node-run check test:glob"), package.json("None") lint:eslint:fix: Manifest("oxlint bin/dependency-cruiser.mjs bin src test configs tools/**/*.mjs --fix"), package.json("None") depcruise:all: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types tools"), package.json("None") depcruise:focus: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types tools --progress --no-cache --output-type text --focus"), package.json("None") test:load:cached: Manifest("hyperfine --warmup 3 --runs 30 "bin/dependency-cruiser.mjs src bin test configs types tools --ignore-known --cache node_modules/.cache/dependency-cruiser/load-cached --no-progress""), package.json("None") upem-outdated: Manifest("npm outdated --json --long | upem --dry-run"), package.json("None") scm:push:gitlab-mirror:commits: Manifest("git push gitlab-mirror"), package.json("None") build: Manifest("make build"), package.json("None") scm:push: Manifest("run-p --aggregate-output scm:push:*"), package.json("None") scm:push:github: Manifest("run-p --aggregate-output scm:push:github:*"), package.json("None") depcruise:report:view: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types --output-type err-html --config configs/.dependency-cruiser-show-metrics-config.mjs --output-to - | browser"), package.json("None") scm:push:bitbucket-mirror:tags: Manifest("git push --tags bitbucket-mirror"), package.json("None") prepare: Manifest("husky"), package.json("None") depcruise:graph:mermaid:diff: Manifest("node ./bin/dependency-cruiser.mjs bin src test types tools --config configs/.dependency-cruiser-unlimited.mjs --output-type mermaid --affected $SHA"), package.json("None") depcruise:report: Manifest("node ./bin/dependency-cruiser.mjs src bin test configs types --output-type err-html --config configs/.dependency-cruiser-show-metrics-config.mjs --output-to dependency-violations.html"), package.json("None") depcruise:graph:doc:fmt-archi: Manifest("./bin/depcruise-fmt.mjs -T archi -f - node_modules/.cache/tmp_graph_deps.json | dot -T svg -Gordering=in -Grankdir=TD | tee doc/real-world-samples/dependency-cruiser-archi-graph.svg | node bin/wrap-stream-in-html.mjs > docs/dependency-cruiser-archi-graph.html"), package.json("None") scm:push:gitlab-mirror: Manifest("run-p --aggregate-output scm:push:gitlab-mirror:*"), package.json("None") test:i: Manifest("LANG=en_US.UTF-8 NODE_OPTIONS=--no-warnings NO_COLOR=1 mocha --grep "^\[[I]\]""), package.json("None")

Provenance

A registry signature proves the registry served these bytes unaltered. Build provenance proves which workflow built them from which commit; a stolen publishing token can fake the first but not the second.

Signature
Verified against the registry's key
Build provenance
Attested · source commit ↗

What the code does

On its own this is weak signal: plenty of honest libraries read files or talk to the network. What PkgFire watches is a release gaining something the one before it did not.

Code reading

PkgFire's own reading of the files: what the code can do.

  • code-execsrc/report/dot-webpage/dot-module.mjs

Source patterns

Patterns found in the source, including those malware is known to use.

  • capability-filesystem-read
  • capability-network-outbound
  • capability-process-spawn
  • metadata_mismatch

Check every dependency before it installs

This page is one release. PkgFire checks every package in your lockfile, on every install and in every pull request, and blocks the bad ones before they run.