d2lang/d2 · error
expected "border-radius" to be a number greater or equal to
Error message
expected "border-radius" to be a number greater or equal to 0
What it means
The 'border-radius' style key must parse as a non-negative integer. This error is returned when strconv.Atoi fails (non-numeric input) or the integer is negative. Unlike stroke-width/stroke-dash there is no upper bound.
Source
Thrown at d2graph/d2graph.go:374
return errors.New(`expected "stroke-width" to be a number between 0 and 15`)
}
s.StrokeWidth.Value = value
case "stroke-dash":
if s.StrokeDash == nil {
break
}
f, err := strconv.Atoi(value)
if err != nil || (f < 0 || f > 10) {
return errors.New(`expected "stroke-dash" to be a number between 0 and 10`)
}
s.StrokeDash.Value = value
case "border-radius":
if s.BorderRadius == nil {
break
}
f, err := strconv.Atoi(value)
if err != nil || (f < 0) {
return errors.New(`expected "border-radius" to be a number greater or equal to 0`)
}
s.BorderRadius.Value = value
case "shadow":
if s.Shadow == nil {
break
}
_, err := strconv.ParseBool(value)
if err != nil {
return errors.New(`expected "shadow" to be true or false`)
}
s.Shadow.Value = value
case "3d":
if s.ThreeDee == nil {
break
}
_, err := strconv.ParseBool(value)
if err != nil {
return errors.New(`expected "3d" to be true or false`)View on GitHub (pinned to 0d69dca6f5)
Solutions
- Set border-radius to an integer >= 0.
- Remove units/keywords and use a plain non-negative integer.
- Omit the key entirely instead of using negative values to reset.
Example fix
// before x.style.border-radius: -4 // after x.style.border-radius: 0
Defensive patterns
Strategy: validation
Validate before calling
n, err := strconv.Atoi(v)
if err != nil || n < 0 {
return fmt.Errorf("border-radius %q must be an integer >= 0", v)
} Type guard
func validBorderRadius(s string) bool { n, err := strconv.Atoi(s); return err == nil && n >= 0 } Try / catch
if err := applyStyle("border-radius", value); err != nil {
if strings.Contains(err.Error(), "border-radius") {
value = "0" // square corners default
}
} Prevention
- Reject negative radius values at input time.
- Strip units and keywords before applying.
- Remember there is no upper bound, but the value must be a plain integer.
When it happens
Trigger: Setting style 'border-radius' to a negative number (e.g. -4) or a non-integer string ("round", "5px", "2.5").
Common situations: D2 authors using CSS shorthand keywords or units, or negative values intended to 'inherit' defaults.
Related errors
- expected "stroke-width" to be a number between 0 and 15
- expected "stroke-dash" to be a number between 0 and 10
- expected "opacity" to be a number between 0.0 and 1.0
- expected "stroke" to be a valid named color ("orange"), a he
- expected "fill" to be a valid named color ("orange"), a hex
AI-assisted analysis of d2lang/d2@0d69dca6f5 (2026-08-31).
Data as JSON: /api/errors/eea157d3d88b66f3.
Report an issue: GitHub.