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

  1. Set border-radius to an integer >= 0.
  2. Remove units/keywords and use a plain non-negative integer.
  3. 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

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


AI-assisted analysis of d2lang/d2@0d69dca6f5 (2026-08-31). Data as JSON: /api/errors/eea157d3d88b66f3. Report an issue: GitHub.