{"record":{"id":"ec7eaec22d674e66","repo":"jdx/mise","slug":"unsupported-os-supported-linux-macos-wind","errorCode":null,"errorMessage":"Unsupported OS '{}'. Supported: linux, macos, windows, android","messagePattern":"Unsupported OS '(.+?)'\\. Supported: linux, macos, windows, android","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/platform.rs","lineNumber":79,"sourceCode":"    }\n\n    pub(crate) fn libc(&self) -> Option<&str> {\n        self.qualifier\n            .as_deref()?\n            .split('-')\n            .find_map(|part| match part {\n                \"gnu\" | \"glibc\" => Some(\"gnu\"),\n                \"musl\" => Some(\"musl\"),\n                _ => None,\n            })\n    }\n\n    /// Validate that this platform is supported\n    pub(crate) fn validate(&self) -> Result<()> {\n        // Validate OS\n        match self.os.as_str() {\n            \"linux\" | \"macos\" | \"windows\" | \"android\" => {}\n            _ => bail!(\n                \"Unsupported OS '{}'. Supported: linux, macos, windows, android\",\n                self.os\n            ),\n        }\n\n        // Validate architecture\n        match self.arch.as_str() {\n            \"x64\" | \"arm64\" | \"x86\" | \"loongarch64\" | \"riscv64\" => {}\n            _ => bail!(\n                \"Unsupported architecture '{}'. Supported: x64, arm64, x86, loongarch64, riscv64\",\n                self.arch\n            ),\n        }\n\n        // Validate qualifier if present\n        if let Some(qualifier) = &self.qualifier {\n            match qualifier.as_str() {\n                \"gnu\" | \"glibc\" | \"musl\" | \"msvc\" | \"baseline\" | \"musl-baseline\" => {}","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/jdx/mise/blob/6f52dcdf99e282ef7a7db68c81301fa4618d0f79/src/platform.rs#L61-L97","documentation":"After parsing, Platform::validate rejects OS values outside {linux, macos, windows, android}. The canonical trap is Apple platforms: mise says macos where Rust/Go toolchains and `uname` say darwin or osx, and win/win32 for Windows also fail. It fires while parsing `mise lock -p` values or the lockfile_platforms setting.","triggerScenarios":"`mise lock -p darwin-arm64`, `-p osx-x64`, `-p win-x64`, or `-p freebsd-x64` — the first hyphen-separated segment is not in the allowlist.","commonSituations":"Porting GOOS/Rust target names into lockfile config; CI matrices generating \"osx\" from GitHub Actions runner labels; assuming freebsd/ios are supported.","solutions":["Use macos for Apple platforms (darwin and osx both map to macos).","Use windows in full (not win or win32).","Drop OSes outside linux/macos/windows/android from the platform list — they are not lockfile dimensions mise supports."],"exampleFix":"# before\nmise lock -p darwin-arm64 -p win-x64\n\n# after\nmise lock -p macos-arm64 -p windows-x64","handlingStrategy":"validation","validationCode":"os=\"${PLATFORM%%-*}\"\ncase \"$os\" in\n  linux|macos|windows|android) ;;\n  *) echo \"unsupported OS: $os (mise uses macos, not darwin/osx)\"; exit 2;;\nesac","typeGuard":"fn supported_os(s: &str) -> bool {\n    matches!(s, \"linux\" | \"macos\" | \"windows\" | \"android\")\n}","tryCatchPattern":null,"preventionTips":["Remember mise's vocabulary: macos (never darwin/osx), windows (never win/win32).","Map CI runner labels (macos-*, osx, win32) to mise names in one helper function.","Validate the platform list before committing config changes."],"tags":["platform","validation","os","darwin","lockfile"],"backgroundTag":"unsupported-platform","analyzedSha":"6f52dcdf99e282ef7a7db68c81301fa4618d0f79","analyzedAt":"2026-08-22T10:14:23.840Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}