Skip to content
GitHubRSS

Turbo and Nx config support

Every key turbo.json, nx.json and project.json accept, read from the upstream schemas (@turbo/types 2.11.5, nx 23.2.1), and what vx does with it when @vzn/vx-migrate’s turbo() or nx() runs the repo unchanged. A key a new upstream release adds fails vx’s tests until it has a row here.

  • supported: vx honours it with the same meaning.
  • mapped, with a note: vx honours it through a translation; the note says how it differs.
  • not supported: vx ignores or refuses it; the note says which.
  • not applicable: it configures something outside a task runner and its cache.
KeyvxNote
$schemanot applicableEditor schema hint only; the mapper never reads it.
agentGuidancenot applicableGuidance for AI agents, not task or cache config; vx ignores it.
boundariesnot applicableTurbo’s import-rule checker; vx has no module-boundary rules and ignores it.
cacheDirnot supportedIgnored without a warning; vx uses its own cacheDir in vx.workspace.ts.
cacheMaxAgenot supportedIgnored without a warning; prune with vx cache prune --older-than.
cacheMaxSizenot supportedIgnored without a warning; prune with vx cache prune --max-size.
concurrencynot supportedIgnored without a warning; use --concurrency or the workspace’s concurrency.
daemonnot applicablevx has no daemon by design.
dangerouslyDisablePackageManagerChecknot applicableTurbo’s package-manager check; vx has none.
envModemapped, with a noteStrict is vx’s behaviour; loose gets a note, since vx passes only declared variables.
extendssupportedPackage configs’ extends chains are followed as Turbo does; cycles and missing parents are refused.
futureFlagsmapped, with a noteThe flags are not read; what they gate (global, structured inputs) is detected by shape.
globalmapped, with a noteinputs, env and passThroughEnv are read as the global* fields they replace; envMode: loose gets a note.
globalDependenciesmapped, with a noteBecomes cache.inputs.workspaceFiles; $NAME entries become env inputs.
globalEnvmapped, with a noteAdded to every task’s cache.inputs.env and passthrough; a wildcard name is dropped with a note.
globalPassThroughEnvmapped, with a noteAdded to every task’s exec.env.passThrough, not hashed; a wildcard name is dropped with a note.
noUpdateNotifiernot applicableTurbo CLI update notice.
remoteCachemapped, with a noteturboCache() reads apiUrl, teamId, teamSlug and enabled, below env vars and options.
tagsnot applicablePackage tags feed only Turbo boundaries; never read.
taskssupportedEach task (or Turbo 1 pipeline) becomes a vx task for the packages that declare the script.
uinot applicableTerminal UI choice.
tasks.*.cachesupportedcache: false means no cache block: the task always runs.
tasks.*.dependsOnmapped, with a noteSame syntax; edges to tasks nobody runs are dropped; $TURBO_ROOT$ deps get a TODO; $NAME becomes env.
tasks.*.descriptionsupportedCopied to the task’s description.
tasks.*.envmapped, with a noteGoes to cache.inputs.env and exec.env.passThrough; wildcard names get a TODO.
tasks.*.inputsmapped, with a noteGlobs translated; $TURBO_DEFAULT$ becomes **/*, $TURBO_ROOT$ workspace files; unsafe globs get a TODO.
tasks.*.interactivenot supportedReported as a key with no vx equivalent, then ignored.
tasks.*.interruptiblenot supportedReported as a key with no vx equivalent, then ignored.
tasks.*.outputLogsmapped, with a notenew-only is vx’s default; other values get a TODO pointing at --output-logs.
tasks.*.outputsmapped, with a noteBecome cache.outputs, negations kept; vx cleans outputs, so a wildcard first segment leaves the task uncached with a TODO.
tasks.*.passThroughEnvmapped, with a noteGoes to exec.env.passThrough, not hashed; wildcard names get a TODO.
tasks.*.persistentmapped, with a noteAn uncached exec.persistent task, with a readyWhen TODO when something depends on it.
tasks.*.withnot supportedReported as a key with no vx equivalent, then ignored.
tasks.*.inputs[].fromnot supportedIgnored; vx folds each dependency’s cache key instead of its outputs.
tasks.*.inputs[].globsmapped, with a noteFor startup and jit entries, keyed like plain input strings.
tasks.*.inputs[].modemapped, with a notestartup and jit are keyed alike (no separate pass); dependencyOutputs adds nothing.
tasks.*.inputs[].withDefaultsmapped, with a notetrue adds $TURBO_DEFAULT$: every package file.
remoteCache.apiUrlsupportedThe cache URL when neither the option nor TURBO_API is set, as in Turbo.
remoteCache.enabledmapped, with a notefalse turns turboCache() off unless its options name a cache.
remoteCache.loginUrlnot applicableUsed only by turbo login; vx has no login.
remoteCache.preflightnot supportedIgnored; turboCache() sends no CORS preflight.
remoteCache.signaturenot supportedThe flag is ignored; signing is on whenever a signature key is set.
remoteCache.teamIdsupportedUsed when neither the option nor TURBO_TEAMID is set.
remoteCache.teamSlugsupportedUsed when neither the option nor TURBO_TEAM is set.
remoteCache.timeoutnot supportedNot read; set turboCache({ timeoutMs }) (default 30 s).
remoteCache.uploadTimeoutnot supportedNot read; set turboCache({ uploadTimeoutMs }) (default 60 s).
futureFlags.affectedUsingTaskInputsnot supportedIgnored; --affected selects projects from vx’s own git diff.
futureFlags.errorsOnlyShowHashnot supportedIgnored.
futureFlags.experimentalCargoWorkspacesnot supportedIgnored; vx discovers projects from package.json workspaces only.
futureFlags.experimentalGoWorkspacesnot supportedIgnored; vx discovers projects from package.json workspaces only.
futureFlags.experimentalObservabilitynot applicableTurbo telemetry export; vx’s is a telemetry plugin.
futureFlags.experimentalPythonWorkspacesnot supportedIgnored; vx discovers projects from package.json workspaces only.
futureFlags.filterUsingTasksnot supportedIgnored; --filter keeps vx’s semantics.
futureFlags.githubActionsRemoteBaseRefFallbacknot supportedIgnored; --affected defaults to origin/HEAD, else HEAD~1.
futureFlags.globalConfigurationsupportedThe global block is read whenever present, flag or not.
futureFlags.longerSignatureKeymapped, with a noteNot read; turboCache() always requires a signature key of at least 32 bytes.
futureFlags.pruneIncludesGlobalFilesnot applicableAffects only turbo prune; vx has none.
futureFlags.strictTaskEntrypointSelectionnot supportedIgnored.
futureFlags.watchUsingTaskInputsnot supportedIgnored; vx watch watches each task’s declared inputs.
boundaries.dependenciesnot applicableA Turbo boundaries import rule.
boundaries.dependentsnot applicableA Turbo boundaries import rule.
boundaries.implicitDependenciesnot applicableA Turbo boundaries import rule.
boundaries.tagsnot applicableA Turbo boundaries tag rule.
KeyvxNote
implicitDependenciesnot supportedThe top-level map is not read.
affectednot supportedIgnored; --affected defaults to origin/HEAD or takes a base.
extendssupportedThe chain is followed and merged as Nx does, before named inputs are read.
defaultBasenot supportedIgnored; --affected defaults to origin/HEAD or takes a base.
tasksRunnerOptionsmapped, with a noteOnly default.options.cacheableOperations is read, as the legacy cached-targets list.
namedInputsmapped, with a noteExpanded per project (project entries win) into each task’s cache.inputs; vx has no named inputs.
targetDefaultsmapped, with a noteApplied by Nx while it builds the graph vx reads; vx sees the merged targets.
workspaceLayoutnot applicableWhere generators create projects; vx has no generators.
clinot applicableNx CLI and generator defaults.
generatorsnot applicableGenerator defaults; vx has no generators.
pluginsmapped, with a noteTargets Nx plugins infer arrive in the graph; bunx @vzn/vx-migrate freezes them as written.
tuinot applicableNx terminal UI.
defaultProjectnot supportedIgnored; name tasks as pkg#task or select with --filter.
nxCloudAccessTokennot applicableNx Cloud credential; nxCache() talks to self-hosted /v1/cache servers.
nxCloudUrlnot applicableNx Cloud endpoint; nxCache() talks to self-hosted /v1/cache servers.
nxCloudEncryptionKeynot applicableNx Cloud artifact encryption.
neverConnectToCloudnot applicableNx Cloud opt-out; vx never connects to Nx Cloud.
parallelnot supportedIgnored; use --concurrency or the workspace’s concurrency.
cacheDirectorynot supportedIgnored; vx uses its own cacheDir.
useDaemonProcessnot applicablevx has no daemon; Nx’s setting still applies when vx asks Nx for the graph.
useInferencePluginsmapped, with a noteApplied by Nx when it builds the graph; vx sees the targets that result.
analyticsnot applicableNx usage analytics.
releasenot applicableNx versioning and publishing; nx-release-publish targets still run through nx-exec.
syncnot supportedGlobal sync generators never run; vx warns once per run to run nx sync.
migratenot applicableSettings for nx migrate.
conformancenot applicableNx Powerpack conformance rules.
ownersnot applicableNx Powerpack CODEOWNERS generation.
targetDefaults.*.filtermapped, with a noteApplied by Nx while it builds the graph vx reads.
targetDefaults.*.executormapped, with a noteMerged into targets by Nx, then mapped as targets.*.executor.
targetDefaults.*.commandmapped, with a noteMerged into targets by Nx, then run as targets.*.command.
targetDefaults.*.metadatamapped, with a noteMerged into targets by Nx, then read as targets.*.metadata.
targetDefaults.*.optionsmapped, with a noteMerged into targets by Nx, then passed on as targets.*.options.
targetDefaults.*.outputsmapped, with a noteMerged into targets by Nx, then mapped as targets.*.outputs.
targetDefaults.*.defaultConfigurationmapped, with a noteMerged into targets by Nx, then read as targets.*.defaultConfiguration.
targetDefaults.*.configurationsmapped, with a noteMerged into targets by Nx, then one task per configuration.
targetDefaults.*.continuousmapped, with a noteMerged into targets by Nx, then a persistent, uncached task.
targetDefaults.*.parallelismnot supportedparallelism: false gets a TODO to run with --concurrency 1.
targetDefaults.*.inputsmapped, with a noteMerged into targets by Nx, then expanded as targets.*.inputs.
targetDefaults.*.dependsOnmapped, with a noteMerged into targets by Nx, then mapped as targets.*.dependsOn.
targetDefaults.*.cachemapped, with a noteMerged into targets by Nx, then read as targets.*.cache.
targetDefaults.*.syncGeneratorsnot supportedGets a TODO to run nx sync; vx never runs sync generators.
KeyvxNote
namemapped, with a noteUsed in nx-exec lines and project:target edges; the vx project takes the package.json name.
rootsupportedGraph nodes are matched to workspace packages by root directory.
sourceRootmapped, with a noteNot read by the mapper; executors still see it through nx-exec.
projectTypenot applicableApp-or-library metadata for generators and tooling.
generatorsnot applicablePer-project generator defaults; vx has no generators.
namedInputsmapped, with a noteMerged over nx.json’s and expanded into each task’s cache inputs.
targetsmapped, with a noteEach target becomes a vx task, plus one per non-default configuration.
tagsmapped, with a noteUsed only to resolve tag: patterns in dependsOn; vx has no project tags.
implicitDependenciesmapped, with a noteGraph edges without a package.json link become explicit pkg#target edges for ^target.
metadatamapped, with a noteOnly targetGroups is read, to find non-atomized targets’ .env files.
releasenot applicableNx release settings.
targets.*.executormapped, with a noterun-commands and run-script become shell lines, noop a group task; others run through nx-exec.
targets.*.optionsmapped, with a notePassed as nx-exec’s --options or rendered into run-commands; {args.*} forwarding gets a TODO.
targets.*.outputsmapped, with a noteTokens and {options.x} resolved; paths outside the project become workspace files; negations kept.
targets.*.defaultConfigurationsupportedThe base task carries the default configuration’s options, as nx run does.
targets.*.configurationsmapped, with a noteOne task per configuration (build:ci); ^ edges run dependencies’ default configuration, with a TODO.
targets.*.inputsmapped, with a noteExpanded into cache.inputs; none means default and ^default; forms without an equivalent get TODOs.
targets.*.dependsOnmapped, with a noteproject:target becomes pkg#target; project patterns and tags resolved; params: forward gets a TODO.
targets.*.commandmapped, with a noteRun as the run-commands shorthand: one POSIX sh line.
targets.*.cachesupportedcache: true (or cacheableOperations) gives a cache block; persistent tasks stay uncached.
targets.*.continuousmapped, with a noteAn uncached exec.persistent task, with a readyWhen note when something depends on it.
targets.*.parallelismnot supportedparallelism: false gets a TODO to run with --concurrency 1; vx has no per-task exclusivity.
targets.*.metadatamapped, with a noteOnly nonAtomizedTarget is read, to find .env files.
targets.*.syncGeneratorsnot supportedGets a TODO to run nx sync; vx never runs sync generators.
KeyvxNote
a stringmapped, with a noteNamed inputs expanded, token paths made project or workspace globs, ^name folded over dependencies.
{fileset, dependencies}mapped, with a noteThe fileset becomes a glob; with dependencies: true it is folded through the dependencies.
{projects, dependencies, input}mapped, with a noteFolded through the named projects’ inputs (a superset); unknown project names get a TODO.
{runtime}supportedBecomes cache.inputs.workspaceRuntime, run at the workspace root as Nx does.
{env}supportedGoes to cache.inputs.env and exec.env.passThrough.
{externalDependencies}not supportedDropped with a TODO; vx keys every task on the lockfile already.
{dependentTasksOutputFiles, transitive}not supportedDropped with a TODO; vx folds each dependency’s cache key instead.
{json, fields, excludeFields}mapped, with a noteThe whole file is hashed, a superset of the selected fields.