VVinumBeta

Vinum CLI

The Vinum CLI analyzes npm packages from your terminal, or every resolved dependency in your project, using the same evidence as the website. It never installs dependencies or runs package code.

New to scores and coverage? Read What is Vinum?

Install

The installer downloads a single executable that embeds its own runtime, so you do not need Node.js or npm.

Install the latest release
curl -fsSL https://vinum.dev/install.sh | bash
Check it works
vinum --version
  • Installs to ~/.local/bin/vinum. It does not use sudo or edit your shell profile; if the folder is not on your PATH, the installer tells you what to add.
  • Verifies the release's SHA-256 checksum and runs the new executable before replacing any existing install.
  • Supports Linux (glibc, x64 and arm64) and macOS (Intel and Apple silicon). Alpine/musl and Windows are not supported yet.
  • Needs curl and sha256sum or shasum.

To read the script first, or to choose a version or folder:

Terminal
curl -fsSL https://vinum.dev/install.sh -o install-vinum.sh
VINUM_INSTALL_DIR="$HOME/bin" sh install-vinum.sh 0.1.0

Run the installer again to update. There is no self-update command yet.

Analyze a package

Pass a package name, optionally with an exact version. Without a version, Vinum resolves the current one and always prints which exact release it analyzed.

Terminal
vinum analyze express
vinum analyze express@5.1.0
vinum analyze @scope/name@1.2.3

Versions must be exact, such as 5.1.0. Ranges and tags like ^5 or latest are rejected so a result always refers to one published release.

Analyze your project

Run it with no package from inside a project. Vinum finds the owning lockfile in the current folder or a parent and analyzes every resolved direct and transitive dependency.

Terminal
cd my-app
vinum analyze
  • Reads npm package-lock.json (v2 and v3), pnpm-lock.yaml (v9), Yarn Classic v1 and modern Yarn lockfiles. If several lockfiles exist, set packageManager in package.json.
  • The summary shows totals first, then only the packages with findings or that could not be analyzed.
  • Local workspace links, patched, Git and private-registry dependencies are reported as skipped, because Vinum only analyzes public npm releases.
  • Add --details for per-package evidence.

Reading the output

Example
express@5.1.0

100 / 100  ████████████████████████  No major concerns

Coverage  ◐ Limited · 25 analysis gaps
Findings  None

Observed behavior
  • Reads environment configuration
  • Uses network or DNS access
  • Uses filesystem access

Report    https://vinum.dev/express/5.1.0

⚠ Some behavior involving dependencies and dynamic calls could not be fully traced.
  • The score runs from 0 to 100 and its color matches the website: green for no major concerns, yellow for limited concerns, orange for notable concerns, red for high-risk evidence.
  • Coverage says how much of the package Vinum could trace. Limited coverage means some code, such as calls into dependencies or dynamically built references, could not be followed.
  • Findings lists observations worth a closer look with the file and line behind each one. Observed behavior lists what the package can do, which is normal for most packages.
  • Open the report link for the full evidence.

A package with no findings is not guaranteed safe. See What is Vinum? for how scores and coverage work.

Options and exit codes

Command options
OptionWhat it does
--detailsShow full per-package evidence instead of the short summary.
--jsonWrite one schema-versioned JSON document to stdout for scripts and CI.
--timeout <seconds>Overall deadline from 1 to 86400 seconds. The default is 1800.
--versionPrint the CLI version.
--helpShow usage, examples, exit codes and environment variables. `vinum help analyze` shows the analyze options.
Exit codes
CodeMeaning
0Every target completed, including packages with findings or limited coverage.
1Some targets were unavailable, incomplete or skipped, or the analysis was partial.
2Invalid arguments, project, lockfile or API configuration.
130 / 143Interrupted with Ctrl+C (SIGINT) or SIGTERM. Submitted scans may continue.

Progress shows in the terminal while it runs, and colors turn off when the output is piped or NO_COLOR is set. The --json schema is published at https://vinum.dev/schemas/cli/v1.json.

What is sent

  • Only public package names and versions, plus the integrity hash from your lockfile, are sent to Vinum.
  • Your source files, lockfile, project name, paths and dependency graph are not uploaded.
  • The CLI does not install dependencies, run scripts or execute package code, and it adds no telemetry or visitor ID.
  • Results for public packages are shared: if someone already analyzed a release, you get that result immediately.

Limits to know about

  • Results describe the published package, not the files in your node_modules. Vinum does not check that your installed copy matches.
  • Lockfile entries with only a SHA-1 hash cannot be verified and show as not verified.
  • Checksums confirm the download matches the release, not who published it. Signed releases are planned.
  • The service is shared and rate limited. If it is busy the CLI waits and retries, then tells you to try again later.