jdx/mise · error
daemon port must be an integer from 1 to 65535
Error message
daemon port must be an integer from 1 to 65535
What it means
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.)
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.
Example fix
# before [daemons.api] run = "./serve" port = 0 # after [daemons.api] run = "./serve" port = 8080
Defensive patterns
Strategy: validation
Validate before calling
# shell: check ports are integers 1-65535
grep -E '^port\s*=' mise.toml | awk -F= '{p=$2+0; if (p<1||p>65535) print "bad port", p}' Prevention
- 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.
When it happens
Trigger: 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.
Common situations: Using 0 to mean 'any port'; pasting a PID or container ID into port; template arithmetic producing a negative or >65535 value.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- [daemons. ] requires preset when specifying version or…
- [daemons. ] requires run or preset
- agent ' ' `start_calendar_interval. ` must be between and
- agent ' ' `start_calendar_interval` must set at least one…
- agent ' ' `start_calendar_interval` must not be empty
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/98e231e1ecf2f298.
Report an issue: GitHub.
Appendix: source
Thrown at src/daemons/mod.rs:105
let preset = take_string(&mut table, "preset")?;
let version = take_string(&mut table, "version")?;
(preset, version, table)
}
};
let daemon = if let Some(preset) = preset {
let version = version
.ok_or_else(|| eyre::eyre!("[daemons.{name}] requires version with preset"))?;
presets::expand(&name, &preset, &version, table, &source, &root)?
} else {
if version.is_some() || table.contains_key("options") {
bail!("[daemons.{name}] requires preset when specifying version or options");
}
if table.get("run").and_then(toml::Value::as_str).is_none() {
bail!("[daemons.{name}] requires run or preset");
}
if let Some(port) = table.get("port").and_then(toml::Value::as_integer) {
if !(1..=65535).contains(&port) {
bail!("daemon port must be an integer from 1 to 65535");
}
table.insert(
"port".into(),
toml::Value::Table(toml::Table::from_iter([
(
"expect".into(),
toml::Value::Array(vec![toml::Value::Integer(port)]),
),
("bump".into(), toml::Value::Boolean(false)),
])),
);
}
table
.entry("mise".to_string())
.or_insert(toml::Value::Boolean(true));
Daemon {
name: name.clone(),
source,View on GitHub (pinned to 533346cc37)