One task shows everything. Fifty tasks show a line for each one that ran. CI shows every frame. Then pick a mode yourself, write a report for the PR, or open the run as a Chrome trace.
DX
DX
vx run test in one package should feel like running the test command
directly. vx run test --all across fifty packages should not bury you
in fifty logs. vx picks what to print from what you asked for.
flowchart LR
R[vx run] --> F{what was asked?}
F -->|one task| A[focused: the task's full output, live]
F -->|many tasks| B[broad: one line per task that ran]
F -->|CI is set| C[CI: every frame]
B --> E[failures replay in full at the end]
style E stroke:#c6f84e,stroke-width:2px
A broad run prints one line for each task that ran and stays silent for
hits. A failure prints its line right away, and its full log replays
just above the summary, so it is the last thing you read. A truthy CI
always wins and shows every frame.
--report-file appends a markdown report to a file when the run ends:
a pass or fail headline, counts, time saved, and one row per task with
its status, cache result and duration. Point it at
$GITHUB_STEP_SUMMARY and the run shows up on the job’s summary page:
vx run picks the project you stand in. Off a terminal it never waits on a picker. On GitHub Actions every task folds into its own log group. Plus colors that respect FORCE_COLOR=0, and a build edge for packages that ship as source.
vx run test --affected runs the projects your branch changed and every project downstream of them. Nothing else starts, and what it skips it can explain.
vx prune --production leaves out the workspace packages only dev dependencies pull in, and strikes them from the copied manifests and lockfile, so the image that runs your app installs frozen without them.
Turborepo, Nx and other product names are trademarks of their owners. vx is not affiliated with or endorsed by them.