jdx/mise · error
error running : exited with code
Error message
error running {}: exited with code {}
{} What it means
When fetching remote versions for an asdf plugin, mise runs the plugin's `list-all` script. This error is thrown when that script exits with a non-zero exit code, surfacing the plugin's stderr so the underlying failure (bad curl, missing dependency, plugin bug) is visible.
Solutions
- Read the stderr tail in the error to see the plugin's actual failure
- Fix network/proxy access (check curl works, set proxy or GITHUB_TOKEN to avoid rate limits)
- Update or reinstall the plugin (`mise plugin update <name>` / `mise plugin remove` + `mise plugin add`)
- Replace the asdf plugin with a core mise tool or aqua/github backend equivalent
Example fix
// before mise ls-remote nodejs # plugin script fails silently on rate limit // after export GITHUB_TOKEN=$(gh auth token) mise plugin update nodejs && mise ls-remote nodejs
Defensive patterns
Strategy: retry
Validate before calling
# before relying on the plugin, verify list-all works mise exec -- curl -sI https://github.com >/dev/null && mise plugin list --urls
Type guard
null
Try / catch
catch (e) {
if (/error running .*list-all|exited with code/.test(String(e))) {
// inspect stderr in e, fix network/creds, retry with token
}
} Prevention
- Set GITHUB_TOKEN/MISE_GITHUB_TOKEN to avoid API rate limits in plugin scripts
- Pin and periodically update plugins (`mise plugin update`)
- Prefer core/aqua/github backends over asdf plugins where available
- Ensure curl, git and other script dependencies exist in CI images
When it happens
Trigger: Running `mise ls-remote <plugin>` or installing/resolving `latest` for an asdf plugin whose `list-all` script fails with a numeric exit code.
Common situations: Plugin's list-all calls curl/wget and the network is down; GitHub rate limits or API failures inside the plugin script; a broken or abandoned plugin with outdated URLs; missing tools (git, curl) the plugin depends on.
Understand the failure class
Background: "git command failed": what it means when a tool shells out to git and git exits non-zero — this error's family across 21 libraries.
Related errors
- error running : terminated by signal
- asdf plugin ' ' exists but ' ' is not available or the…
- is not installed
- Paranoid mode is enabled, refusing to install…
- 's bin/install exited successfully but installed nothing…
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/8bf150bc2db710ab.
Report an issue: GitHub.
Appendix: source
Thrown at src/plugins/asdf_plugin.rs:132
},
Settings::get().fetch_remote_versions_timeout(),
)
.wrap_err_with(|| {
let script = script_man.get_script_path(&Script::ListAll);
eyre!("Failed to run {}", display_path(script))
})?;
let stdout = String::from_utf8(result.stdout).unwrap();
let stderr = String::from_utf8(result.stderr).unwrap().trim().to_string();
let display_stderr = || {
if !stderr.is_empty() {
eprintln!("{stderr}");
}
};
if !result.status.success() {
let s = Script::ListAll;
match result.status.code() {
Some(code) => bail!("error running {}: exited with code {}\n{}", s, code, stderr),
None => bail!("error running {}: terminated by signal\n{}", s, stderr),
};
} else if Settings::get().verbose {
display_stderr();
}
Ok(stdout
.split_whitespace()
.map(|v| regex!(r"^v(\d+)").replace(v, "$1").to_string())
.collect())
}
pub(crate) fn fetch_latest_stable(
&self,
script_man: &ScriptManager,
) -> eyre::Result<Option<String>> {
let latest_stable = script_man.read(&Script::LatestStable)?.trim().to_string();
Ok(if latest_stable.is_empty() {
NoneView on GitHub (pinned to 533346cc37)