{"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":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/backend/mod.rs","lineNumber":584,"sourceCode":"\npub(crate) fn remove(short: &str) {\n    let mut tools = TOOLS.lock().unwrap();\n    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    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":566,"sourceCodeEnd":602,"githubUrl":"https://github.com/jdx/mise/blob/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/backend/mod.rs#L566-L602","documentation":"mise allows disabling whole backend families via the `disable_backends` setting (e.g. `[\"asdf\", \"vfox\"]`). ensure_backend_enabled() checks the backend's disable_key against that list; any install/resolve operation on a tool whose backend is listed fails immediately with this error.","triggerScenarios":"Settings (settings.toml, MISE_DISABLE_BACKENDS env, or config) contain a backend key in `disable_backends`, and a mise.toml / CLI request references a tool using that backend — e.g. `disable_backends = [\"asdf\"]` plus `mise use asdf:some-plugin`.","commonSituations":"Disabling asdf/vfox globally for security or speed, then cloning a project whose mise.toml still pins an asdf plugin; team config drift where one member disables a backend others rely on; CI images shipping restrictive settings.","solutions":["Remove the backend from `disable_backends` (mise settings set disable_backends '[...]')","Migrate the offending tool to an enabled backend (aqua:/github:/cargo: equivalents usually exist)","Delete the tool entry that needs the disabled backend if it is no longer required"],"exampleFix":"# before\n# ~/.config/mise/settings.toml: disable_backends = [\"asdf\"]\nmise install asdf:olang   # fails\n# after\ndisable_backends = []\nmise install asdf:olang","handlingStrategy":"validation","validationCode":"# before installing, confirm no requested tool needs a disabled backend\nmise settings get disable_backends","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Document disabled backends in the repo so configs never reference them","Migrate shared tools to always-enabled backends (aqua:/github:)","Check `mise doctor` in CI to surface backend/config mismatches early"],"tags":["backends","settings","configuration","disable-backends"],"backgroundTag":"feature-disabled-by-config","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}