Skip to main content

versionx.toml

Generated from crates/versionx-config/src/schema.rs. Edit the schema there and re-run cargo xtask docs to update this page.

versionx.toml is the primary configuration file. One lives at the root of every repo that uses Versionx. Unknown top-level keys are rejected so typos get caught.

VersionxConfig

The root of versionx.toml.

Unknown top-level keys are not forwarded to extra — we fail loudly so typos get caught.

FieldTypeSerdeDefaultDescription
versionxVersionxMetaConfigoptionalTop-level metadata.
varsIndexMap < String , String >optionalEnvironment variables exported into every adapter/task invocation.
runtimesRuntimesConfigoptionalRuntime pins (node, python, rust, pnpm, etc.).
ecosystemsIndexMap < String , EcosystemConfig >optionalPer-ecosystem configuration.
tasksIndexMap < String , TaskConfig >optionalNative task definitions. v1.0 ships topo-exec without caching.
releaseOption < ReleaseConfig >optionalRelease orchestration settings.
linksIndexMap < String , LinkConfig >optionalExternal-repo links (submodule / subtree / virtual / ref).
policiesOption < PoliciesConfig >optionalPolicies referenced by this repo.
githubOption < GitHubConfig >optionalGitHub integration (non-App — used by reusable Actions).
inheritOption < InheritPolicy >optionalInheritance semantics for array-valued keys.
advancedAdvancedConfigoptionalAdvanced / rarely-touched knobs.
componentsVec < ComponentConfig >rename: components, optional[[components]] — hand-declared components that aren't covered by native manifests (protocol schemas, shared asset bundles, docs sites, etc.). Discovery merges these on top of auto-detected components.

VersionxMetaConfig

[versionx] block: project metadata.

FieldTypeSerdeDefaultDescription
schema_versionOption < String >optionalSchema version. Required at L3+. Defaults to [SUPPORTED_SCHEMA_VERSION] when absent.
nameOption < String >optionalHuman-readable project name. Defaults to the containing dir.
workspacebooloptionalWhen true, this file is a workspace root and vx walks up to it.

RuntimesConfig

[runtimes] block.

Cannot set deny_unknown_fields here because tools is flattened — every tool name (node, python, pnpm, ...) appears as a top-level key and serde would reject them all.

FieldTypeSerdeDefaultDescription
providersRuntimeProvidersoptionalProvider URLs / names per tool. Optional.
toolsIndexMap < String , RuntimeSpec >flattenTool -> version spec. Captures everything not matched above. Values may be a plain string ("22.12.0") or a table with distribution hints (\{ version = "21", distribution = "temurin" \}).

RuntimeProviders

[runtimes.providers] — where to fetch installers from.

Same flatten caveat as [RuntimesConfig]: no deny_unknown_fields.

FieldTypeSerdeDefaultDescription
providersBTreeMap < String , String >flattenTool -> provider string (URL or named provider like "python-build-standalone", "nodejs.org", "temurin").

RuntimeSpec (enum)

A runtime spec — either a plain version string or a structured table.

VariantDescription
Versionnode = "22.12.0" or node = "lts"
Detailedjvm = \{ version = "21", distribution = "temurin" \}

EcosystemConfig

[ecosystems.<id>] block.

FieldTypeSerdeDefaultDescription
package_managerOption &lt; String &gt;optional"pnpm", "uv", "cargo", etc. Auto-detected when absent.
rootOption &lt; Utf8PathBuf &gt;optionalPath (relative to this file) where the ecosystem's manifest lives. Defaults to the repo root.
workspacesVec &lt; String &gt;optionalWorkspace member globs (Node pnpm workspaces, Cargo workspaces, uv workspaces).
venv_managerOption &lt; String &gt;optionalPython-specific: which tool owns venv creation ("uv" / "poetry" / "versionx").

TaskConfig

[tasks.<name>] block. Full schema lands with the task runner (0.9).

FieldTypeSerdeDefaultDescription
runStringShell-free command (run via versionx::proc, never invoking a shell).
envIndexMap &lt; String , String &gt;optionalTask-level env overrides.
depends_onVec &lt; String &gt;optionalUpstream tasks that must succeed first.
inputsVec &lt; String &gt;optionalInput globs (feed into the v1.2 content-addressed cache).
outputsVec &lt; String &gt;optionalOutput globs (ditto).

ReleaseConfig

[release] block.

FieldTypeSerdeDefaultDescription
strategyStringdefault_strategy"pr-title" (default), "conventional", "changesets", "manual".
ai_assistStringdefault_ai_assist"mcp" (agent drives), "byo-api", or "off".
versioningStringdefault_versioning"semver" or "calver".
tag_templateStringdefault_tag_templateTemplate for the git tag name. \{version\} and \{package\} supported.
changelogStringdefault_changelogPath to the changelog file relative to the repo root.
plan_ttlStringdefault_plan_ttlPlan TTL (human duration: "1h", "24h", "7d").
push_modeStringdefault_push_mode"prompt" (default, TTY-only) or "explicit" (always require flag).
aiOption &lt; AiConfig &gt;optionalBYO-API-key LLM provider config, only consulted when ai_assist = "byo-api".
packagesIndexMap &lt; String , PackageReleaseConfig &gt;optionalPer-package overrides (paths and bump rules).
groupsVec &lt; ReleaseGroupConfig &gt;optional[[release.groups]] — named sets of components that should be versioned + tagged together (e.g. an SDK + its CLI that always ship at the same version). Groups are consulted by the bump planner when deciding what to include in a single plan.

ComponentConfig

[[components]] entry.

Hand-declared component for non-manifest artifacts (protocol files, shared asset bundles, docs sites, etc.). Works alongside auto-discovery via versionx-workspace — declared entries win when names collide.

FieldTypeSerdeDefaultDescription
nameStringStable identifier. Referenced by depends_on and [[release.groups]].
pathStringDirectory rooted at the workspace, e.g. "protocols/chat".
kindOption &lt; String &gt;optionalOptional kind label: "node" | "python" | "rust" | "go" | "ruby" | "jvm" | "oci" or a custom string (e.g. "proto").
versionOption &lt; String &gt;optionalOptional current version ("1.2.3"). Missing means "not versioned yet".
inputsVec &lt; String &gt;optionalFile globs that define the component's content-hash inputs. Defaults to ["**/*"] when empty.
depends_onVec &lt; String &gt;optionalIDs of other components this depends on. These are intra-workspace edges, not package-manager dependencies.

ReleaseGroupConfig

[[release.groups]] entry — a lockstep bundle.

When any member of a group gets bumped, every member is bumped to the same version. Useful for tightly-coupled SDK/CLI pairs.

FieldTypeSerdeDefaultDescription
nameStringHuman-readable group name — used in plan summaries + tag templates.
membersVec &lt; String &gt;Component IDs that share a version. Must all resolve.
modeStringdefault_group_mode"lockstep" (default, all members get the same version) or "independent" (members share a plan but keep independent versions).
tag_templateOption &lt; String &gt;optionalOptional tag template override. \{version\} supported.

AiConfig

[release.ai.byo] — headless LLM config.

FieldTypeSerdeDefaultDescription
providerString"anthropic", "openai", "gemini", "ollama".
modelStringModel name ("claude-sonnet-4-6", "gpt-4o", "llama3.2", etc.).
api_key_envOption &lt; String &gt;optionalEnv var to read the API key from.
endpoint_envOption &lt; String &gt;optionalOptional endpoint override for self-hosted / proxied servers.

PackageReleaseConfig

Per-package release knobs inside a monorepo.

FieldTypeSerdeDefaultDescription
publicbooloptional
registryOption &lt; String &gt;optional
pathsVec &lt; String &gt;optional

LinkConfig

[links.<name>] block.

FieldTypeSerdeDefaultDescription
kindStringrename: type"submodule" | "subtree" | "virtual" | "ref".
pathOption &lt; Utf8PathBuf &gt;optional
urlString
trackOption &lt; String &gt;optional
updateOption &lt; String &gt;optional
bidirectionalbooloptional
squashbooloptional

PoliciesConfig

[policies] block.

FieldTypeSerdeDefaultDescription
inheritVec &lt; String &gt;optional
filesVec &lt; String &gt;optional

GitHubConfig

[github] block.

FieldTypeSerdeDefaultDescription
ownerOption &lt; String &gt;optional
repoOption &lt; String &gt;optional
required_checksVec &lt; String &gt;optional

InheritPolicy

[inherit] block — controls array merge semantics.

FieldTypeSerdeDefaultDescription
appendVec &lt; String &gt;optionalKeys whose arrays are concatenated across levels instead of replaced.

AdvancedConfig

[advanced] block.

FieldTypeSerdeDefaultDescription
daemonOption &lt; String &gt;optional"auto" | "always" | "never". Default: "auto".
jobsOption &lt; usize &gt;optionalMax parallelism for adapter operations (0 = auto).
state_backendOption &lt; String &gt;optionalRemote state backend URL (post-v1.0).
state_backend_envOption &lt; String &gt;optionalEnv var that holds the remote-state URL (preferred over inline).
lockfileOption &lt; bool &gt;optionalDisable the lockfile entirely (not recommended).

OutputOverride (enum)

Hint type for the CLI --output flag when it's persisted into config.

VariantDescription
Human
Json
Ndjson

See also