{"record":{"id":"253971146eadf04d","repo":"jdx/mise","slug":"bootstrap-users-and-groups-are-only-supported-on-l-253971","errorCode":null,"errorMessage":"bootstrap users and groups are only supported on Linux","messagePattern":"bootstrap users and groups are only supported on Linux","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/accounts_non_linux.rs","lineNumber":96,"sourceCode":"\nimpl UserRequest {\n    pub fn plan(&self) -> ResourcePlan {\n        ResourcePlan::new(\n            ResourceId::new(\"user\", &self.name),\n            \"unsupported\",\n            \"unsupported\",\n            ResourceAction::Unknown,\n        )\n    }\n\n    pub fn current_primary_group(&self) -> Option<&str> {\n        None\n    }\n}\n\npub fn requests_from_config(config: &Config) -> Result<AccountRequests> {\n    if accounts_configured(config) {\n        bail!(\"bootstrap users and groups are only supported on Linux\");\n    }\n    Ok(AccountRequests::default())\n}\n\npub fn prepare_requests_from_config(config: &Config) -> Result<AccountRequests> {\n    if accounts_configured(config) {\n        warn!(\"ignoring [bootstrap.users] and [bootstrap.groups] on non-Linux host\");\n    }\n    Ok(AccountRequests::default())\n}\n\npub fn plans(_requests: &AccountRequests) -> Vec<ResourcePlan> {\n    vec![]\n}\n\npub fn apply(requests: &AccountRequests, _dry_run: bool, _yes: bool) -> Result<bool> {\n    if !requests.groups.is_empty() || !requests.users.is_empty() {\n        bail!(\"bootstrap users and groups are only supported on Linux\");","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/system/accounts_non_linux.rs#L78-L114","documentation":"On non-Linux platforms `accounts_non_linux.rs` replaces the accounts module. `requests_from_config` is the strict reader used by commands that must reflect real account state; it bails whenever any config file defines `[bootstrap.users]` or `[bootstrap.groups]`, because account inspection is impossible there. The softer `prepare_requests_from_config` only warns and returns empty requests.","triggerScenarios":"Running a strict accounts command (e.g. `mise bootstrap accounts status`/plan-style reads) on macOS or Windows while any mise config file (project, local, global, system) contains non-empty `[bootstrap.users]` or `[bootstrap.groups]` tables.","commonSituations":"A mise.toml written for Linux servers committed to a repo that is also checked out on Mac workstations; dotfiles syncing a global config with account tables to every machine.","solutions":["Move account tables into a config only loaded on the Linux hosts (e.g. `/etc/mise/mise.toml` or a per-host `mise.local.toml` kept out of sync).","Or stop running the strict accounts commands on non-Linux machines by gating them on `uname`.","Verify with `mise bootstrap accounts status` on a Linux host that the config still parses there."],"exampleFix":"# before: mise.toml synced to every machine\n[bootstrap.users.deploy]\ngroup = \"deploy\"\n\n# after: keep that table only in the Linux host's /etc/mise/mise.toml\n# (and remove it from the synced project/global config)","handlingStrategy":"validation","validationCode":"// before calling the strict reader, check the platform yourself\nif !cfg!(target_os = \"linux\") {\n    assert!(config.config_files.values().all(|cf| {\n        cf.bootstrap_config().map_or(true, |b| b.users.is_empty() && b.groups.is_empty())\n    }), \"account tables present on a non-Linux host\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep [bootstrap.users]/[bootstrap.groups] only in host-local configs (/etc/mise/mise.toml), not synced ones.","In CI, assert configs parse on every OS you check out on (`mise bootstrap accounts status`)."],"tags":["mise","bootstrap","accounts","platform-support","config"],"backgroundTag":"unsupported-platform","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}