BoundaryML/baml · error
active toolchain is a local path and has no version
Error message
active toolchain is a local path and has no version: {} What it means
Fires when the code needs a concrete version string for the active selector (e.g. `baml --version`, status, or pinning state) but the selector is a local path. Path-based toolchains are unpacked directories built locally, not versioned downloads, so there is no version number to report. This is a sentinel error from the version-resolution guard, not a corrupted install.
Solutions
- If a version number is required, switch to a versioned toolchain: `baml toolchain use canary` (or nightly / a specific version)
- If reporting status of a local build is intended, use `baml toolchain status` which handles path selectors without needing a version
- To pin a version for the project, write it in baml.toml [toolchain] instead of using a path selector
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at baml_language/crates/baml/src/main.rs:600 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/169c04bd71bb6239.
Report an issue: GitHub.
Appendix: source
Thrown at baml_language/crates/baml/src/main.rs:600
return Some(candidate);
}
if home.as_ref().is_some_and(|home| dir == *home) || !dir.pop() {
break;
}
}
None
}
fn concrete_version_for_selector(selector: &ResolvedSelector) -> Result<String> {
concrete_version_for_selector_with_base(selector, &baml_release::manifest_base_url())
}
fn concrete_version_for_selector_with_base(
selector: &ResolvedSelector,
current_base: &str,
) -> Result<String> {
if is_path_selector(&selector.selector) {
return Err(anyhow!(
"active toolchain is a local path and has no version: {}",
selector.selector
));
}
if is_channel(&selector.selector) {
let state = read_state();
if let Some(channel) = state.channels.get(&selector.selector) {
if channel
.manifest_base_url
.as_deref()
.is_some_and(|base| base.trim_end_matches('/') != current_base)
{
return Err(anyhow!(
"channel {} was selected from a different manifest source.\nRun: baml toolchain use {} under the current manifest source.",
selector.selector,
selector.selector
));
}View on GitHub (pinned to bd85ce9dee)