lima-vm/lima · error
invalid network name %#q: %w
Error message
invalid network name %#q: %w
What it means
Each network name in networks.yaml becomes a key used to build file paths and sudoers directives, so it must pass identifiers.Validate. An invalid name aborts config validation with the offending name quoted.
Source
Thrown at pkg/networks/validate.go:36
)
func (c *Config) Validate() error {
// The group name and the per-network name/mode/interface are interpolated
// verbatim into the sudoers file (sudoers.go) and into the socket_vmnet
// command that reconcile.go runs via sudo after splitting it on spaces
// (commands.go). A value with whitespace injects an extra argument, and a
// newline in a network name adds an arbitrary directive to the generated
// sudoers file, so require them to be valid identifiers. Interface is empty
// for non-bridged networks, and group defaults to "admin" when unset, so
// only validate those when a value is actually present.
if c.Group != "" {
if err := identifiers.Validate(c.Group); err != nil {
return fmt.Errorf("invalid group %#q: %w", c.Group, err)
}
}
for name, nw := range c.Networks {
if err := identifiers.Validate(name); err != nil {
return fmt.Errorf("invalid network name %#q: %w", name, err)
}
if nw.Mode != "" {
if err := identifiers.Validate(nw.Mode); err != nil {
return fmt.Errorf("invalid mode %#q for network %#q: %w", nw.Mode, name, err)
}
}
if nw.Interface != "" {
if err := identifiers.Validate(nw.Interface); err != nil {
return fmt.Errorf("invalid interface %#q for network %#q: %w", nw.Interface, name, err)
}
}
}
// validate all paths.* values
paths := reflect.ValueOf(&c.Paths).Elem()
pathsMap := make(map[string]string, paths.NumField())
var socketVMNetNotFound bool
for i := range paths.NumField() {View on GitHub (pinned to dd909d0973)
Solutions
- Rename the network key in networks.yaml to a valid identifier (letters, digits, underscore, hyphen where allowed) and update all instance YAML `networks` references to the new name.
- Re-run validation to confirm no other entries fail.
- Check for invisible characters (tabs, non-breaking spaces) with cat -A networks.yaml.
- Regenerate the config from the stock template if multiple entries are broken.
Example fix
# before (networks.yaml)
networks:
"lima user v2":
mode: user-v2
# after
networks:
lima-user-v2:
mode: user-v2 Defensive patterns
Strategy: validation
Validate before calling
function validateNetworkName(name) {
if (!/^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(name)) {
return `invalid network name: ${JSON.stringify(name)}`;
}
return null;
}
Object.keys(config.networks).forEach(validateNetworkName); Type guard
function isValidNetworkName(name) {
return typeof name === 'string' && /^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(name);
} Prevention
- Use kebab-case names without spaces for network entries.
- Check for invisible characters with `cat -A networks.yaml`.
- Keep network names in sync with `networks:` references in instance YAML.
- Lint networks.yaml with yamllint.
When it happens
Trigger: Defining a network entry in <LIMA_HOME>/_config/networks.yaml whose key (e.g. under `networks:`) contains whitespace, slashes, newlines, or other non-identifier characters, then running validation via networks.Validate().
Common situations: Hand-edited networks.yaml with a typo like 'lima user-v2' or a name with a trailing colon/space; programmatically generated configs injecting bad keys; YAML merging producing unexpected key names.
Related errors
- invalid group %#q: %w
- invalid mode %#q for network %#q: %w
- invalid interface %#q for network %#q: %w
- path %#q is not an absolute path
- path %#q contains whitespace
AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01).
Data as JSON: /api/errors/863c84e43b506b78.
Report an issue: GitHub.