{"record":{"id":"a0c229dfdb9a3238","repo":"jdx/mise","slug":"backend-backend-type-is-disabled-by-disable-back","errorCode":null,"errorMessage":"backend {backend_type} is disabled by disable_backends","messagePattern":"backend (.+?) is disabled by disable_backends","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/mod.rs","lineNumber":610,"sourceCode":"    if let Some(current) = tools.as_ref() {\n        let mut tools_ = current.deref().clone();\n        tools_.remove(short);\n        *tools = Some(Arc::new(tools_));\n    }\n}\n\npub(crate) fn is_disabled_backend_type(backend_type: &BackendType) -> bool {\n    if *backend_type == BackendType::Pipx {\n        return is_disabled_backend_name(\"pypi\") || is_disabled_backend_name(\"pipx\");\n    }\n    backend_type\n        .disable_key()\n        .is_some_and(is_disabled_backend_name)\n}\n\npub(crate) fn ensure_backend_enabled(backend_type: &BackendType) -> Result<()> {\n    if is_disabled_backend_type(backend_type) {\n        bail!(\"backend {backend_type} is disabled by disable_backends\");\n    }\n    Ok(())\n}\n\nfn is_disabled_backend_name(backend: &str) -> bool {\n    Settings::get()\n        .disable_backends\n        .iter()\n        .any(|disabled| disabled == backend)\n}\n\npub(crate) fn arg_to_backend(ba: BackendArg) -> Option<ABackend> {\n    match ba.backend_type() {\n        BackendType::Core => {\n            CORE_PLUGINS\n                .get(&ba.short)\n                .or_else(|| {\n                    // this can happen if something like \"corenode\" is aliased to \"core:node\"","sourceCodeStart":592,"sourceCodeEnd":628,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/mod.rs#L592-L628","documentation":"mise's `disable_backends` setting lets users opt out of entire backend types for security or policy reasons. ensure_backend_enabled checks this allowlist/denylist before any backend work and bails if the requested backend type is disabled, so disabled backends can never be reached even indirectly.","triggerScenarios":"Installing or executing a tool whose backend type (e.g. `npm`, `vfox`, `http`) appears in `disable_backends` in settings — via mise.toml [settings], ~/.config/mise/settings.toml, or MISE_DISABLE_BACKENDS.","commonSituations":"Corporate policy disabling vfox/asdf backends; user disabled `cargo` backends but a project mise.toml references a cargo tool; typo'd setting accidentally disabling a needed backend.","solutions":["Remove the backend from disable_backends in settings (mise.toml [settings] or settings.toml)","Use an alternative backend for the tool that is not disabled","Check MISE_DISABLE_BACKENDS environment variable for an override you forgot about"],"exampleFix":"// before (mise.toml)\n[settings]\ndisable_backends = [\"npm\"]\n// after\n[settings]\ndisable_backends = []","handlingStrategy":"validation","validationCode":"// bash: fail fast if a required backend is disabled\nfor b in $REQUIRED_BACKENDS; do\n  mise settings get disable_backends | grep -q \"\\\"$b\\\"\" && { echo \"backend $b disabled\"; exit 1; } || true\ndone","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Document required backends in project README/mise.toml comments","Check MISE_DISABLE_BACKENDS and settings.toml when onboarding to a machine","Keep policy-level disable_backends in a managed settings file and list exemptions explicitly"],"tags":["settings","backend","security","policy"],"backgroundTag":"feature-not-enabled","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}