Source-only packages still count
A package with no build step still moves its dependants’ cache keys when its files change.

Many packages ship their TypeScript as is and have no build. If they had no task at all, a change in them could not reach the cache keys of the apps that import them.
So vx gives such a project a build group keyed on its own files. Your config stays short, and a change to a source-only package still invalidates exactly what depends on it.
// what it prints
packages/ui no build task → build: a group keyed on its files
packages/web build: dependsOn ^build
edit packages/ui/src/button.ts → @demo/web#build missesMore in Run what you mean

Run just the task
Skip the dependency chain when you know it is already built.

Timeouts
A hung task is killed and reported as a timeout, not left to stall the run.

Pass arguments through
Arguments after -- reach the task, and the cache keeps each set apart.

Group tasks
Name a set of tasks once and run them with one word.

Say what a task needs
One short syntax for upstream, cross-project and pattern edges.

A typo never runs half the graph
Ask for a task no project has and vx stops before anything starts.

Filter by tag
Tag projects once, then run a task across every project with that tag.

Filter by folder
Pick projects by where they live, or the root project alone.

Remote pools at their own width
Send work to a remote pool and vx fills the pool, not your laptop’s core count.

Runs take turns
Two runs in one checkout wait for each other instead of fighting over files.