Dev servers in the graph
A server is ready when it prints a line, not after sleep 5.

End-to-end tests need the dev server up first, and most setups sleep and hope.
In vx a dev server is a persistent task. readyWhen is a pattern matched against each line it prints; when it matches, the tasks that depend on the server start. When the run ends, the server stops.
// config
// packages/web/vx.config.ts
import { defineProject } from '@vzn/vx/config'
export default defineProject({
tasks: {
dev: {
exec: { command: 'vite', persistent: { readyWhen: 'Local:' } },
},
e2e: {
dependsOn: ['dev'],
exec: { command: 'playwright test' },
},
},
})More in Everyday use

The task picker
Type vx run with no task and pick one from a menu.

Framed output
Sixteen tasks in parallel, and no interleaved lines.

A summary you read at a glance
Every run ends with one block, and nothing prints below it.

Every skip names its blocker
No mystery “skipped” count on a red run.

Ctrl-C leaves nothing running
No dev server still holding its port the next morning.

Watch mode
Every change takes the same path as vx run, and the key decides what re-runs.

Shell completions
Tab-complete every verb and flag in bash, zsh and fish.

Typo hints
A filter that matches nothing asks “Did you mean @acme/app?”.

vx upgrade
The release binary updates itself, digest checked.

Tasks that take the keyboard
A prompt, a REPL or a login flow gets the terminal to itself.

Help where you type
Every verb explains itself with vx help, and vx version says what you run.

Typos get an answer
A mistyped flag, verb or task gets the nearest real spelling.

Type the task, get the command
vx build answers with the vx run command that does what you meant.