Skip to content

Pseudo-state Selectors

Pseudo-state selectors match packages based on their relationship to the project or their dependency type. Unlike pseudo-classes, they don’t take arguments.

Graph structure states

SelectorDescription
:rootThe root package (top-level package.json)
:scopeThe current scope of the selector
:projectRoot node plus all workspaces
:workspaceWorkspace packages (listed in vlt.json)

:root

Returns the root node — the package defined at the top-level package.json of your project.

Terminal
$ vlt query ':root'

Commonly used with combinators to select direct dependencies:

Terminal
$ vlt query ':root > *'

:scope

Returns the current scope of the selector. Useful when using the --scope CLI flag to limit the query context.

:project

Returns the root node along with any workspaces declared in your project. Useful for selecting “your code” vs. third-party dependencies.

Terminal
$ vlt query ':project > *'

:workspace

Matches workspace packages defined in your vlt.json.

Terminal
$ vlt query ':workspace'

Find workspaces that have changed since main:

Terminal
$ vlt query ':workspace:diff(main)'

Dependency type states

SelectorDescription
:prodProduction dependencies
:devDevelopment-only dependencies
:optionalOptional dependencies
:peerPeer dependencies
:missingDependencies declared but not installed
:overriddenDependencies with an override applied

:prod

Matches production dependencies:

Terminal
$ vlt query ':prod'

:dev

Matches packages that are only used as dev dependencies:

Terminal
$ vlt query ':dev'

Find all dev dependencies that are outdated:

Terminal
$ vlt query ':dev:outdated'

:optional

Matches optional dependencies:

Terminal
$ vlt query ':optional'

:peer

Matches peer dependencies:

Terminal
$ vlt query ':peer'

:missing

Matches edges (dependency declarations) that are not resolved to any installed package. This selector returns edges only — no nodes.

Terminal
$ vlt query ':missing'

:overridden

Matches dependencies that have an override applied (via the overrides field in package.json):

Terminal
$ vlt query ':overridden'

Package property states

SelectorDescription
:privatePackages with "private": true
:emptyPackages with no dependencies
:linkLinked packages
:prereleasePackages with prerelease versions
:builtPackages successfully built during reify
:scannedPackages with security metadata

:private

Matches packages with "private": true in their package.json:

Terminal
$ vlt query ':private'

:empty

Matches packages that have no dependencies installed:

Terminal
$ vlt query ':empty'

Matches linked packages only:

Terminal
$ vlt query ':link'

:prerelease

Matches packages whose version contains prerelease identifiers (e.g., 1.0.0-beta.1, 2.0.0-rc.1+rev.2, 0.0.0-canary):

Terminal
$ vlt query ':prerelease'

Find direct prerelease dependencies:

Terminal
$ vlt query ':root > :prerelease'

:built

Matches packages that have been successfully built during the reify process (have buildState set to 'built'):

Terminal
$ vlt query ':built'

:scanned

Matches packages that have Socket security metadata. See Security Insights for security-specific selectors.

Terminal
$ vlt query ':scanned'

What gets selected

Given a monorepo:

my-monorepo (root)
├── packages/core (workspace, private)
│ ├── react@18.2.0 (prod)
│ └── vitest@1.0.0 (dev)
├── packages/utils (workspace)
│ └── lodash@4.17.21 (prod)
└── typescript@5.3.0 (dev)
QuerySelected
:rootmy-monorepo
:workspacecore, utils
:projectmy-monorepo, core, utils
:privatecore
:devvitest, typescript
:prodreact, lodash
:root > :devtypescript
:workspace:privatecore
:prerelease(packages with pre-versions)
:missing(edges with no resolved pkg)

See also