jdx/mise · error
install_mise must name an executable file: {path:?}
Error message
install_mise must name an executable file: {path:?} What it means
Beyond prefix checks, mise requires the install_mise path to name an actual file: the final path component (after the last '/') must not be empty, '.', or '~'. This catches values that designate a directory or home alias rather than the mise executable.
Source
Thrown at src/system/remote.rs:2226
Ok(path.to_string())
}
fn validate_install_mise_path(path: &str) -> Result<()> {
validate_value("mise install path", path)?;
if path.contains(['\n', '\r']) {
bail!("install_mise must not contain a newline: {path:?}");
}
if !path.starts_with('/') && !path.starts_with("~/") {
bail!("install_mise must be an absolute path or start with ~/: {path:?}");
}
if path.split('/').any(|component| component == "..") {
bail!("install_mise must not contain '..': {path:?}");
}
if matches!(
path.rsplit('/').next(),
None | Some("") | Some(".") | Some("~")
) {
bail!("install_mise must name an executable file: {path:?}");
}
Ok(())
}
fn validate_remote_executable(command: &str) -> Result<()> {
validate_value("mise command", command)?;
let is_path = command.contains('/');
if command.starts_with('-')
|| command.contains(['\n', '\r'])
|| (!is_path && command.chars().any(char::is_whitespace))
{
bail!("remote mise command must be an executable name or path: {command:?}");
}
Ok(())
}
fn shell_quote(value: &str) -> String {
shell_words::join([value])View on GitHub (pinned to afd2eddd3a)
Solutions
- Point the value at the mise binary file itself, e.g. /usr/local/bin/mise
- Remove trailing slashes or '.' components from the configured path
- Verify with `ls -l <path>` on the remote host that it is an executable file
Example fix
// before install_mise = "/usr/local/bin/" // after install_mise = "/usr/local/bin/mise"
Defensive patterns
Strategy: validation
Validate before calling
const namesFile = (p) => { const last = p.split('/').pop(); return last !== '' && last !== '.' && last !== '~'; }; Type guard
const lastComponentIsFile = (s) => { if (typeof s !== 'string') return false; const last = s.split('/').pop(); return last !== '' && last !== '.' && last !== '~'; }; Try / catch
try { setInstallMisePath(p); } catch (e) { console.error('install_mise must point to the mise binary file'); } Prevention
- Configure the full path to the mise executable, not its directory
- Strip trailing slashes when accepting path input
- Verify with `test -x <path>` on the remote host
When it happens
Trigger: Configuring install_mise as "/usr/local/bin/" (trailing slash), "~/", "/opt/.", or just "~" — i.e. any value whose last component is empty, '.', or '~'.
Common situations: Copy-paste of a directory path instead of the binary path; editing configs and leaving a trailing slash; assuming mise resolves directories automatically.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- dotfile target must be absolute or start with ~/: {target}
- install_mise must not contain a newline: {path:?}
- install_mise must be an absolute path or start with ~/: {pat
- install_mise must not contain '..': {path:?}
- repo path `{path_raw}` cannot start with `~`; use `~/` for a
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/6a8ee6590c74469e.
Report an issue: GitHub.