{"record":{"id":"1f90f74cc1edb92e","repo":"rust-lang/cargo","slug":"invalid-package-name-it-is-a-reserved-window","errorCode":null,"errorMessage":"invalid package name `{}`: it is a reserved Windows filename{}","messagePattern":"invalid package name `(.+?)`: it is a reserved Windows filename(.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/ops/cargo_new.rs","lineNumber":199,"sourceCode":"    }\n    if name == \"test\" {\n        anyhow::bail!(\n            \"invalid package name `test`: \\\n            it conflicts with Rust's built-in test library{}\",\n            bin_help()\n        );\n    }\n    if [\"core\", \"std\", \"alloc\", \"proc_macro\", \"proc-macro\"].contains(&name) {\n        shell.warn(format!(\n            \"package name `{}` may be confused with the package with that name in Rust's standard library\\n\\\n            It is recommended to use a different name to avoid problems.{}\",\n            name,\n            bin_help()\n        ))?;\n    }\n    if restricted_names::is_windows_reserved(name) {\n        if cfg!(windows) {\n            anyhow::bail!(\n                \"invalid package name `{}`: it is a reserved Windows filename{}\",\n                name,\n                name_help\n            );\n        } else {\n            shell.warn(format!(\n                \"package name `{}` is a reserved Windows filename\\n\\\n                This package will not work on Windows platforms.\",\n                name\n            ))?;\n        }\n    }\n    if restricted_names::is_non_ascii_name(name) {\n        shell.warn(format!(\n            \"invalid package name `{}`: contains non-ASCII characters\\n\\\n            Non-ASCII crate names are not supported by Rust.\",\n            name\n        ))?;","sourceCodeStart":181,"sourceCodeEnd":217,"githubUrl":"https://github.com/rust-lang/cargo/blob/98a09e7e7d62850f14e5b6132101fc1edd19a16f/src/ops/cargo_new.rs#L181-L217","documentation":"`is_windows_reserved` flags DOS-device names (`con`, `prn`, `aux`, `nul`, `com1`–`com9`, `lpt1`–`lpt9`). On Windows these cannot be filenames at all, so `cargo new`/`cargo init` on a Windows host (`cfg!(windows)`) hard-errors. On non-Windows hosts the same name is only a warning (the package would break if built on Windows). The check lowercases before matching, so case variants are caught too.","triggerScenarios":"On Windows: `cargo new aux`, `cargo new --name COM1 x`, `cargo new Nul`. On Linux/macOS the same names produce a warning instead, but the resulting package is non-portable.","commonSituations":"Naming a serial-port tool (`com1`), a console utility (`con`), or a printer tool (`prn`). Cross-platform projects created on Linux with such a name that then fail on Windows teammates' machines.","solutions":["Rename to a non-reserved name: `aux-tool`, `com1-reader`, `prn-util`.","If creating on non-Windows, heed the warning and rename before any Windows contributor clones.","Avoid the reserved stems entirely as package or binary names."],"exampleFix":"# before (on Windows)\n$ cargo new con   # error: reserved Windows filename\n\n# after\n$ cargo new con-util","handlingStrategy":"validation","validationCode":"const RESERVED: &[&str] = &[\"con\",\"prn\",\"aux\",\"nul\",\"com1\",\"com2\",\"com3\",\"com4\",\"com5\",\"com6\",\"com7\",\"com8\",\"com9\",\"lpt1\",\"lpt2\",\"lpt3\",\"lpt4\",\"lpt5\",\"lpt6\",\"lpt7\",\"lpt8\",\"lpt9\"];\nfn is_windows_reserved(name: &str) -> bool { RESERVED.contains(&name.to_ascii_lowercase().as_str()) }","typeGuard":"fn is_windows_safe_name(name: &str) -> bool { !is_windows_reserved(name) }","tryCatchPattern":null,"preventionTips":["Avoid DOS-device names for any package intended to build on Windows.","Lowercase-compare names against the reserved set when generating.","Even on Linux/macOS, treat the warning as an error for cross-platform projects.","Suffix reserved stems (`aux-tool`, `com1-reader`) when the concept fits."],"tags":["package-name","windows","reserved-names","cargo-new","portability"],"backgroundTag":null,"analyzedSha":"98a09e7e7d62850f14e5b6132101fc1edd19a16f","analyzedAt":"2026-08-11T17:42:36.556Z","contentChangedAt":"2026-08-11T17:42:36.556Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}