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
| Selector | Description |
|---|---|
:root | The root package (top-level package.json) |
:scope | The current scope of the selector |
:project | Root node plus all workspaces |
:workspace | Workspace packages (listed in vlt.json) |
:root
Returns the root node — the package defined at the top-level
package.json of your project.
$ vlt query ':root'Commonly used with combinators to select direct dependencies:
$ 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.
$ vlt query ':project > *':workspace
Matches workspace packages defined in your vlt.json.
$ vlt query ':workspace'Find workspaces that have changed since main:
$ vlt query ':workspace:diff(main)'Dependency type states
| Selector | Description |
|---|---|
:prod | Production dependencies |
:dev | Development-only dependencies |
:optional | Optional dependencies |
:peer | Peer dependencies |
:missing | Dependencies declared but not installed |
:overridden | Dependencies with an override applied |
:prod
Matches production dependencies:
$ vlt query ':prod':dev
Matches packages that are only used as dev dependencies:
$ vlt query ':dev'Find all dev dependencies that are outdated:
$ vlt query ':dev:outdated':optional
Matches optional dependencies:
$ vlt query ':optional':peer
Matches peer dependencies:
$ vlt query ':peer':missing
Matches edges (dependency declarations) that are not resolved to any installed package. This selector returns edges only — no nodes.
$ vlt query ':missing':overridden
Matches dependencies that have an override applied (via the
overrides field in package.json):
$ vlt query ':overridden'Package property states
| Selector | Description |
|---|---|
:private | Packages with "private": true |
:empty | Packages with no dependencies |
:link | Linked packages |
:prerelease | Packages with prerelease versions |
:built | Packages successfully built during reify |
:scanned | Packages with security metadata |
:private
Matches packages with "private": true in their package.json:
$ vlt query ':private':empty
Matches packages that have no dependencies installed:
$ vlt query ':empty':link
Matches linked packages only:
$ 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):
$ vlt query ':prerelease'Find direct prerelease dependencies:
$ vlt query ':root > :prerelease':built
Matches packages that have been successfully built during the reify
process (have buildState set to 'built'):
$ vlt query ':built':scanned
Matches packages that have Socket security metadata. See Security Insights for security-specific selectors.
$ 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)| Query | Selected |
|---|---|
:root | my-monorepo |
:workspace | core, utils |
:project | my-monorepo, core, utils |
:private | core |
:dev | vitest, typescript |
:prod | react, lodash |
:root > :dev | typescript |
:workspace:private | core |
:prerelease | (packages with pre-versions) |
:missing | (edges with no resolved pkg) |
See also
- Pseudo-class Selectors — functional selectors with arguments
- Combinators — traverse the graph
- Security Insights — security pseudo-selectors