netbirdio/netbird · error
service name exceeds maximum length of 255 characters
Error message
service name exceeds maximum length of 255 characters
What it means
Returned by Service.Validate (management/internals/modules/reverseproxy/service/service.go:860) when Name exceeds 255 characters. The name is stored and referenced by management state and DNS/label derivation, so it is capped at 255 characters; longer names are rejected right after the empty-name check.
Source
Thrown at management/internals/modules/reverseproxy/service/service.go:860
len(r.AllowedCountries) == 0 && len(r.BlockedCountries) == 0 &&
r.CrowdSecMode == "" {
return nil
}
return &proto.AccessRestrictions{
AllowedCidrs: r.AllowedCIDRs,
BlockedCidrs: r.BlockedCIDRs,
AllowedCountries: r.AllowedCountries,
BlockedCountries: r.BlockedCountries,
CrowdsecMode: r.CrowdSecMode,
}
}
func (s *Service) Validate() error {
if s.Name == "" {
return errors.New("service name is required")
}
if len(s.Name) > 255 {
return errors.New("service name exceeds maximum length of 255 characters")
}
if len(s.Targets) == 0 {
return errors.New("at least one target is required")
}
if s.Mode == "" {
s.Mode = ModeHTTP
}
if err := validateHeaderAuths(s.Auth.HeaderAuths); err != nil {
return err
}
if err := validateAccessRestrictions(&s.Restrictions); err != nil {
return err
}
if err := s.validatePrivateRequirements(); err != nil {
return errView on GitHub (pinned to 93e97f4bf1)
Solutions
- Shorten the name to at most 255 characters.
- When generating names programmatically, truncate with a deterministic cap before submitting.
- Prefer short slug-style names; put long descriptions in a description field if available.
Example fix
// before
name := fmt.Sprintf("%s-%s-%s", fqdn, cluster, notes) // unbounded
// after
if len(name) > 255 {
name = name[:255]
}
service.Name = name Defensive patterns
Strategy: validation
Validate before calling
if len(svc.Name) > 255 {
return fmt.Errorf("service name too long: %d bytes (max 255)", len(svc.Name))
} Prevention
- Cap generated names deterministically before submission.
- Keep names slug-like; store long text elsewhere.
When it happens
Trigger: Creating/updating a reverse-proxy service with a name longer than 255 bytes, e.g. a generated name (FQDN, description blob, concatenation) pasted or programmatically built without truncation.
Common situations: Automation that derives the service name from a hostname plus suffixes; copy-paste of a long sentence; template variables that expand unexpectedly.
Related errors
- service name is required
- at least one target is required
- private services require at least one access group
- private services cannot enable bearer auth (SSO): NetBird-on
- service domain is required
AI-assisted analysis of netbirdio/netbird@93e97f4bf1 (2026-08-16).
Data as JSON: /api/errors/fbd3d95b002fc851.
Report an issue: GitHub.