Rules that catch slow configs
Checks for configs that would make runs slow or wrong, on by default, each one optional.

Two tasks writing the same dist/** delete each other’s output. An input glob that reads another task’s output makes keys wait on builds. vx refuses both at load, with the fix.
Each rule can be turned off in vx.workspace.ts when you know better.
// config
// vx.workspace.ts
import { defineWorkspace } from '@vzn/vx/config'
export default defineWorkspace({
rules: { exclusiveOutputs: false, upfrontKeys: true },
})More in Config

One command per task
A task is a shell command with edges and a cache block; nothing boots in between.

A config that hangs, named
A config whose evaluation runs away fails after a deadline, naming the file.

No runs inside runs
A vx run inside a task of the same workspace is refused, with the reason.

Config with autocomplete
defineProject gives you completion and errors while you type.

Presets are just functions
Share task setups across projects with a TypeScript function, no new concept.

Config errors that point
A bad config fails at load with the file, the line and the key, no stack trace.