{"record":{"id":"98e231e1ecf2f298","repo":"jdx/mise","slug":"daemon-port-must-be-an-integer-from-1-to-65535","errorCode":null,"errorMessage":"daemon port must be an integer from 1 to 65535","messagePattern":"daemon port must be an integer from 1 to 65535","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/daemons/mod.rs","lineNumber":105,"sourceCode":"                let preset = take_string(&mut table, \"preset\")?;\n                let version = take_string(&mut table, \"version\")?;\n                (preset, version, table)\n            }\n        };\n        let daemon = if let Some(preset) = preset {\n            let version = version\n                .ok_or_else(|| eyre::eyre!(\"[daemons.{name}] requires version with preset\"))?;\n            presets::expand(&name, &preset, &version, table, &source, &root)?\n        } else {\n            if version.is_some() || table.contains_key(\"options\") {\n                bail!(\"[daemons.{name}] requires preset when specifying version or options\");\n            }\n            if table.get(\"run\").and_then(toml::Value::as_str).is_none() {\n                bail!(\"[daemons.{name}] requires run or preset\");\n            }\n            if let Some(port) = table.get(\"port\").and_then(toml::Value::as_integer) {\n                if !(1..=65535).contains(&port) {\n                    bail!(\"daemon port must be an integer from 1 to 65535\");\n                }\n                table.insert(\n                    \"port\".into(),\n                    toml::Value::Table(toml::Table::from_iter([\n                        (\n                            \"expect\".into(),\n                            toml::Value::Array(vec![toml::Value::Integer(port)]),\n                        ),\n                        (\"bump\".into(), toml::Value::Boolean(false)),\n                    ])),\n                );\n            }\n            table\n                .entry(\"mise\".to_string())\n                .or_insert(toml::Value::Boolean(true));\n            Daemon {\n                name: name.clone(),\n                source,","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/daemons/mod.rs#L87-L123","documentation":"The optional `port` key of a `[daemons.<name>]` entry must be a TOML integer between 1 and 65535. If it parses as an integer but falls outside that range, mise bails during load. (A non-integer `port` value silently skips this check instead — only out-of-range integers trigger this error.)","triggerScenarios":"Setting `port = 0`, `port = -1`, `port = 70000`, or any integer outside 1..=65535 in a daemon declaration; port comes from an interpolated/templated number that overflowed.","commonSituations":"Using 0 to mean 'any port'; pasting a PID or container ID into port; template arithmetic producing a negative or >65535 value.","solutions":["Set `port` to an integer between 1 and 65535.","If you want an arbitrary port, remove the `port` key entirely.","Check templated values: compute and clamp the port number before it lands in mise.toml."],"exampleFix":"# before\n[daemons.api]\nrun = \"./serve\"\nport = 0\n\n# after\n[daemons.api]\nrun = \"./serve\"\nport = 8080","handlingStrategy":"validation","validationCode":"# shell: check ports are integers 1-65535\ngrep -E '^port\\s*=' mise.toml | awk -F= '{p=$2+0; if (p<1||p>65535) print \"bad port\", p}'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Omit `port` entirely when you don't need a fixed port.","Never use 0 or negative numbers; pick a specific port in 1..65535.","When templating ports, clamp computed values before writing them into mise.toml."],"tags":["config","daemons","validation","port"],"backgroundTag":"value-out-of-range","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"}