VisCommandsvis list

vis list

List workspace projects with metadata, or per-target rows with type, cache status, and description

vis list

List all workspace projects with their type, layer, tags, and target counts. Add --targets for one row per (project, target) with cache status and description.

Usage

vis list [options]

Examples

vis list                                 # all projects with type, layer, tags, targets
vis list --targets                       # per-target rows
vis list --deps                          # human-readable dep-instance table
vis list --deps --internal-only          # only workspace deps
vis list --deps --format=ndjson          # stream every dep-instance as NDJSON for jq pipelines
vis list --deps --format=json --pretty   # single pretty-printed JSON array
vis list --format=json                   # machine-readable project listing
vis list --query "tag=frontend"          # filter by query
vis list --targets --format=json         # per-target rows as JSON

Options

OptionDefaultDescription
--formattableOutput format: table, json (single document), or ndjson (one record per line; --deps only)
--prettyfalsePretty-print with 2-space indent (only meaningful with --format=json in --deps mode)
--queryFilter projects by query (see below)
--targetsfalseShow per-target rows (type, cache, description)
--inferredfalseFilter target rows to only inferred targets (implies --targets)
--depsfalseRender a dep-instance view (table by default; use --format=ndjson/json for jq-friendly streams)
--dep-typeWith --deps: restrict to specific dep blocks. Repeatable.
--internal-onlyfalseWith --deps: only show internal/workspace deps
--external-onlyfalseWith --deps: only show external/registry deps
--includeWith --deps: glob of declaring package names to keep. Repeatable.
--excludeWith --deps: glob of declaring package names to drop. Repeatable.

--deps columns

When --deps is set, the table shows one row per (declaring package, dep block, dep name):

ColumnDescription
Packagepackage.json#name of the declaring package (or directory when no name)
BlockDep block: dependencies, devDependencies, peerDependencies, pnpm.overrides
DepDependency name (with scope)
SpecifierVerbatim version string as written in package.json
Internalyes when the dep resolves to another workspace package, otherwise no
PathWorkspace-relative path of the source package.json (or pnpm-workspace.yaml)

--deps --format=ndjson record shape

Each NDJSON line (or array entry under --format=json) has the same shape:

{
    "packageName": "@my/app",
    "packageDir": "apps/app",
    "packageJsonPath": "apps/app/package.json",
    "depType": "dependencies",
    "depName": "react",
    "specifier": "^18.2.0",
    "isInternal": false
}

packageJsonPath is workspace-relative for portability across CI runners. isInternal: true indicates the dep name resolves to another workspace package. pnpm-workspace.yaml#overrides (pnpm v9+ moved pnpm.overrides from package.json into the workspace config) surfaces under depType: "pnpm.overrides" with packageJsonPath pointing at pnpm-workspace.yaml.

jq recipes

Count how many packages declare each dep:

vis list --deps --format=ndjson | jq -r '.depName' | sort | uniq -c | sort -rn | head

List every package that pins a specific dep:

vis list --deps --format=ndjson | jq -r 'select(.depName == "react") | "\(.packageName)\t\(.specifier)"'

Find specifier drift for a single dep (alternative to vis deps --workspace-versions --dep <name>):

vis list --deps --format=ndjson | jq -r 'select(.depName == "react") | .specifier' | sort -u

Audit which packages still declare a banned dep before turning on vis deps --banned-deps:

vis list --deps --format=ndjson | jq -r 'select(.depName | IN("left-pad","request","moment")) | "\(.packageName)\t\(.depName)"'

Default columns

ColumnSource
Projectpackage.json#name
Typeproject.json#projectType (defaults to library)
Layerproject.json#layer
Tagsproject.json#tags
TargetsComma list of target names (truncated to 4 + total count)

--targets columns

When --targets is set, the table shows one row per (project, target):

ColumnDescription
Projectpackage.json#name
TargetTarget name from project.json#targets (alphabetical)
TypeTarget's semantic type (build / test / run); when unset
Cacheyes when cache: true, no when cache: false, default when unset (the runtime picks per type)
DescriptionThe target's description field surfaced from project.json / vis.task.ts; when unset

The footer reports the row count and the number of distinct projects.

Query filter

--query accepts the same syntax as vis run --query — clauses joined by && (all match) or || (any matches), filtered against project metadata fields (tag, layer, language, stack, type, etc.).

vis list --query "language=typescript && tag=lib"
vis list --targets --query "tag=frontend"
Support

Contribute to our work and keep us going

Community is the heart of open source. The success of our packages wouldn't be possible without the incredible contributions of users, testers, and developers who collaborate with us every day.Want to get involved? Here are some tips on how you can make a meaningful impact on our open source projects.

Ready to help us out?

Be sure to check out the package's contribution guidelines first. They'll walk you through the process on how to properly submit an issue or pull request to our repositories.

Submit a pull request

Found something to improve? Fork the repo, make your changes, and open a PR. We review every contribution and provide feedback to help you get merged.

Good first issues

Simple issues suited for people new to open source development, and often a good place to start working on a package.
View good first issues