jdx/mise · error
Paranoid mode is enabled, refusing to install community-deve
Error message
Paranoid mode is enabled, refusing to install community-developed plugin
What it means
With `paranoid` settings enabled, mise refuses to install asdf plugins whose git URL is not on the official/trusted allowlist, because community plugins execute arbitrary code during install. The message is raised in ensure_installed before any code from the plugin runs.
Source
Thrown at src/plugins/asdf_plugin.rs:288
mpr: &MultiProgressReport,
force: bool,
dry_run: bool,
) -> Result<()> {
let settings = Settings::try_get()?;
if !force {
if self.is_installed() {
return Ok(());
}
if !settings.yes && self.repo_url.lock().unwrap().is_none() {
let url = self.get_repo_url(config).unwrap_or_default();
if !registry::is_trusted_plugin(self.name(), &url) {
warn!(
"⚠️ {} is a community-developed plugin – {}",
style(&self.name).blue(),
style(url.trim_end_matches(".git")).yellow()
);
if settings.paranoid {
bail!(
"Paranoid mode is enabled, refusing to install community-developed plugin"
);
}
if !prompt::confirm_with_all(format!(
"Would you like to install {}?",
self.name
))?
.is_yes()
{
Err(PluginNotInstalled(self.name.clone()))?
}
}
}
}
let prefix = format!("plugin:{}", style(&self.name).blue().for_stderr());
let pr = mpr.add_with_options(&prefix, dry_run);
if !dry_run {
let _lock = lock_file::get(&self.plugin_path, force)?;View on GitHub (pinned to afd2eddd3a)
Solutions
- Audit the plugin repository, then either disable paranoid mode (`MISE_PARANOID=0` or `mise settings paranoid=false`) or pre-approve the plugin per your org policy.
- Use an official/core backend for the tool instead of a community asdf plugin.
- If this is on a shared/CI machine, install the plugin once interactively outside paranoid mode and let mise reuse the installed plugin.
Example fix
// before (in config, with paranoid=true) mise plugin add nightly-crystal https://github.com/someone/asdf-crystal.git // after MISE_PARANOID=0 mise plugin add nightly-crystal https://github.com/someone/asdf-crystal.git # after auditing the repo
Defensive patterns
Strategy: validation
Validate before calling
// before installing in CI, fail fast if paranoid mode blocks community plugins
const paranoid = process.env.MISE_PARANOID === '1';
const isOfficial = trustedPluginUrls.includes(pluginUrl);
if (paranoid && !isOfficial) throw new Error('paranoid mode blocks community plugin ' + pluginUrl); Try / catch
try {
execSync(`mise plugin add ${name} ${url}`);
} catch (e) {
if (/Paranoid mode is enabled/.test(String(e.stderr))) {
// switch to an official backend or run an audited allowlisted install step
}
} Prevention
- Audit community plugin repos before adding them; document the audit for your org.
- Prefer mise core tools or aqua/github backends which don't execute arbitrary plugin code.
- Keep MISE_PARANOID=1 in CI and pre-install/allowlist plugins during image build.
When it happens
Trigger: Installing a third-party asdf plugin (e.g. `mise plugin add <name> <community-git-url>`) while `paranoid = true` (MISE_PARANOID=1) is set; also triggered for tools requested by a project config that reference community plugins.
Common situations: Security-conscious CI environments with paranoid mode on; new machines where a project .mise.toml references a community plugin; orgs with allowlists that haven't been extended.
Understand the failure class
Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.
Related errors
- {tool}'s bin/install exited successfully but installed nothi
- asdf plugin '{plugin_name}' exists but '{tool_name}' is not
- error running {}: exited with code {} {}
- error running {}: terminated by signal {}
- {ba} is not installed
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/7e2f70e6bb271b12.
Report an issue: GitHub.