BoundaryML/baml · error

failed to determine active BAML toolchain root

Error message

failed to determine active BAML toolchain root

What it means

`active_toolchain_vsix` locates the VSIX by taking the running executable's parent's parent as the toolchain root. If the baml executable sits less than two directories deep in the filesystem, that root cannot be determined and this error is raised.

Source

Thrown at baml_language/crates/baml_cli/src/ide_command.rs:208

  1. Save baml-vscode.vsix somewhere easy to find:

         baml ide install --output-dir {dir}

  2. In {ide}, press {chord} and run "Extensions: Install from VSIX...".

  3. Select the saved baml-vscode.vsix."#,
        dir = os.example_dir(),
        chord = os.palette_chord(),
    )
}

fn active_toolchain_vsix() -> Result<PathBuf> {
    let exe = env::current_exe().context("failed to locate baml-cli executable")?;
    let toolchain_root = exe
        .parent()
        .and_then(Path::parent)
        .ok_or_else(|| anyhow!("failed to determine active BAML toolchain root"))?;
    let vsix = toolchain_root.join("assets").join("baml-vscode.vsix");
    if !vsix.exists() {
        // A local build has no assets/ next to it, so say that plainly rather
        // than reporting a missing file the developer never expected to exist.
        if let Some(local) = env::var_os("BAML_WRAPPER_LOCAL_TOOLCHAIN") {
            anyhow::bail!(
                "baml ide install needs a managed BAML toolchain, but the active one is a local binary at {}.\nThe VS Code extension ships with released toolchains only.\nRun: baml toolchain use canary",
                Path::new(&local).display()
            );
        }
        anyhow::bail!(
            "active BAML toolchain does not include assets/baml-vscode.vsix at {}",
            vsix.display()
        );
    }
    Ok(vsix)
}

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Run baml via the managed toolchain layout (<toolchain-root>/bin/baml)
  2. Use `baml toolchain use canary` (or similar) to activate a properly installed toolchain
  3. Avoid running the binary from a top-level directory with no grandparent
Defensive patterns

Strategy: fallback

Validate before calling

# ensure baml is invoked from the managed layout <root>/bin/baml
exe="$(command -v baml)"
test "$(dirname "$(dirname "$exe")")" != "/" || echo "non-standard install location"

Try / catch

match result {
    Err(e) if e.to_string().contains("toolchain root") => {
        eprintln!("Run baml through the managed toolchain (baml toolchain use canary).");
    }
    other => other?,
}

Prevention

When it happens

Trigger: Running `baml ide install` when env::current_exe() returns a path whose grandparent does not exist — e.g. the binary placed directly in a root-level or single-level directory like /bin/baml or a bare temp dir.

Common situations: Running a baml binary copied to an unusual location (filesystem root, /usr/bin-style single-level path) instead of the standard managed toolchain layout <root>/bin/baml.

Related errors


AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12). Data as JSON: /api/errors/d6370243277a0089. Report an issue: GitHub.