Open Design Tokens
Reference

Issue codes

Every code the validator can report, its default severity, and its message.

Generated from the message catalog of the installed package. Codes are public API; message wording is not.

document

CodeSeverityMessage
document.not-objecterrorThe document root must be a JSON object, received "<actualType>".
document.invalid-jsonerrorThe input is not valid JSON: "<reason>".
document.too-deeperrorThe document nests groups deeper than the supported limit of 256 levels.
document.circularerrorThe input object contains a circular reference and cannot be validated.
document.unreadable-nodeerrorA property could not be read while validating: "<reason>".

value

CodeSeverityMessage
value.unknown-propertywarningProperty "<property>" is not defined for this value type. Known properties: "…".

name

CodeSeverityMessage
name.forbidden-charactererrorName "<name>" contains "<character>", which is not allowed in token or group names (reserved for alias syntax).
name.emptywarningToken and group names should not be empty.

token

CodeSeverityMessage
token.type.missingerrorThe token has no $type and none can be inherited from a parent group, so its type cannot be determined.
token.type.invaliderrorUnknown $type "<actual>". Allowed: "…". Did you mean "<suggestion>"? Values are case-sensitive.
token.type.not-stringerror$type must be a string, received "<actualType>".
token.description.not-stringerror$description must be a plain string, received "<actualType>".
token.deprecated.invaliderror$deprecated must be true, false, or a string explanation, received "<actualType>".
token.extensions.not-objecterror$extensions must be an object, received "<actualType>".
token.extensions.key-not-namespacedwarning$extensions key "<key>" should use reverse domain name notation (for example "com.example.tool") to avoid clashes.
token.property.unknownwarningProperty "<property>" is not defined for tokens by this specification version and will be ignored.
token.property.not-allowederrorProperty "<property>" is not allowed on a token: an object with $value cannot also contain child tokens or groups.

group

CodeSeverityMessage
group.description.not-stringerror$description must be a plain string, received "<actualType>".
group.type.invaliderrorUnknown group $type "<actual>". Allowed: "…". Did you mean "<suggestion>"? Values are case-sensitive.
group.type.not-stringerror$type must be a string, received "<actualType>".
group.deprecated.invaliderror$deprecated must be true, false, or a string explanation, received "<actualType>".
group.extensions.not-objecterror$extensions must be an object, received "<actualType>".
group.extensions.key-not-namespacedwarning$extensions key "<key>" should use reverse domain name notation (for example "com.example.tool") to avoid clashes.
group.extends.invaliderror$extends must be a group reference such as "{group.name}", received "<actual>".
group.ref.invaliderror$ref on a group must be a local JSON pointer such as "#/group/name", received "<actual>".
group.property.unknownwarningProperty "<property>" is not defined for groups by this specification version. Names must not start with "$".
group.member.invaliderrorMember "<name>" must be a token or a group (an object), received "<actualType>".
group.root.not-tokenerrorThe reserved "$root" member must be a token (an object with $value).
group.name.case-collisionwarningNames "…" differ only by case; tools that transform names may produce duplicates.

alias

CodeSeverityMessage
alias.syntax.invaliderrorAlias "<actual>" is malformed. Use "{group.token}" with non-empty, dot-separated names.
alias.target.missingerrorAlias "<alias>" does not resolve: no token at "<path>".
alias.target.not-tokenerrorAlias "<alias>" points at a group, not a token. Curly-brace aliases can only target tokens (use "{<path>.$root}" for a group's root token).
alias.cycleerrorCircular alias chain: "…". The value of every token in the chain is unknown.
alias.type.mismatcherrorAlias "<alias>" resolves to a "<actual>" token but this token is declared as "<expected>".

ref

CodeSeverityMessage
ref.not-localerror$ref "<actual>" must point inside this document and start with "#/". External and remote references are not supported.
ref.syntax.invaliderror$ref "<actual>" is not a valid JSON pointer (RFC 6901).
ref.target.missingerror$ref "<actual>" does not resolve: nothing exists at that location.
ref.cycleerrorCircular reference chain: "…".
ref.type.mismatcherror$ref "<actual>" resolves to a "<actualType>" token but this token is declared as "<expected>".

extends

CodeSeverityMessage
extends.target.missingerror$extends "<actual>" does not resolve: no group at "<path>".
extends.target.not-grouperror$extends "<actual>" must reference a group, but "<path>" is a token.
extends.cycleerrorCircular group extension: "…". A group cannot extend itself, an ancestor, or a group that extends it.
extends.inherited-token.invaliderrorToken "<token>" inherited from "<inheritedFrom>" is invalid in this group: "<reason>".

composite

CodeSeverityMessage
composite.property.missingerrorA "<type>" value must have a "<property>" property ("<expectedType>" value or reference).
composite.value.not-objecterrorA "<type>" value must be an object with "<properties>", received "<actualType>".

stroke-style

CodeSeverityMessage
stroke-style.value.invaliderrorA strokeStyle value must be a keyword string or an object with "dashArray" and "lineCap", received "<actualType>".
stroke-style.keyword.invaliderrorUnknown stroke style "<actual>". Allowed: "…". Did you mean "<suggestion>"? Values are case-sensitive.
stroke-style.dash-array.not-arrayerror"dashArray" must be an array of dimension values or references, received "<actualType>".
stroke-style.line-cap.invaliderror"lineCap" must be one of "…", received "<actual>". Did you mean "<suggestion>"? Values are case-sensitive.

shadow

CodeSeverityMessage
shadow.value.invaliderrorA shadow value must be a shadow object or an array of shadow objects and references, received "<actualType>".
shadow.item.invaliderrorShadow entry "<index>" must be a shadow object or a reference to a shadow token, received "<actualType>".
shadow.inset.not-booleanerror"inset" must be true or false, received "<actualType>".

gradient

CodeSeverityMessage
gradient.value.not-arrayerrorA gradient value must be an array of gradient stops and references, received "<actualType>".
gradient.stop.invaliderrorGradient entry "<index>" must be a stop object with "color" and "position" or a reference to a gradient token, received "<actualType>".
gradient.position.out-of-rangewarningGradient stop position "<actual>" is outside [0, 1] and will be clamped by consumers.

color

CodeSeverityMessage
color.value.not-objecterrorA color value must be an object with "colorSpace" and "components", received "<actualType>".
color.color-space.missingerrorA color value must have a "colorSpace" property.
color.color-space.invaliderrorUnsupported color space "<actual>". Supported: "…". Did you mean "<suggestion>"? Values are case-sensitive.
color.components.missingerrorA color value must have a "components" array.
color.components.not-arrayerror"components" must be an array, received "<actualType>".
color.components.wrong-lengtherror"components" must have exactly "<expected>" entries for "<colorSpace>", received "<actual>".
color.component.invaliderrorColor component "<index>" must be a number or "none", received "<actual>".
color.component.out-of-rangeerrorColor component "<index>" ("<name>") of "<colorSpace>" must be in [<min>, <max>), received "<actual>".
color.alpha.not-numbererror"alpha" must be a number, received "<actualType>".
color.alpha.out-of-rangeerror"alpha" must be in [0, 1], received "<actual>".
color.hex.invaliderror"hex" must be a 6-digit CSS hex color such as "#ff00ff", received "<actual>".
color.hex.mismatchwarning"hex" "<hex>" does not match the sRGB components (expected "<expected>").

dimension

CodeSeverityMessage
dimension.value.not-objecterrorA dimension value must be an object with "value" and "unit", received "<actualType>".
dimension.value.missingerrorA dimension value must have a "value" property.
dimension.value.not-numbererrorDimension "value" must be a number, received "<actualType>".
dimension.unit.missingerrorA dimension value must have a "unit" property, even when "value" is 0.
dimension.unit.invaliderrorDimension "unit" must be one of "…", received "<actual>". Did you mean "<suggestion>"? Values are case-sensitive.

font-family

CodeSeverityMessage
font-family.value.invaliderrorA font family value must be a string or an array of strings, received "<actualType>".
font-family.name.not-stringerrorFont family entry "<index>" must be a string, received "<actualType>".

font-weight

CodeSeverityMessage
font-weight.value.invaliderrorA font weight value must be a number in [1, 1000] or a keyword, received "<actualType>".
font-weight.number.out-of-rangeerrorFont weight must be in [1, 1000], received "<actual>".
font-weight.keyword.invaliderrorUnknown font weight keyword "<actual>". Allowed: "…". Did you mean "<suggestion>"? Values are case-sensitive.

duration

CodeSeverityMessage
duration.value.not-objecterrorA duration value must be an object with "value" and "unit", received "<actualType>".
duration.value.missingerrorA duration value must have a "value" property.
duration.value.not-numbererrorDuration "value" must be a number, received "<actualType>".
duration.unit.missingerrorA duration value must have a "unit" property.
duration.unit.invaliderrorDuration "unit" must be one of "…", received "<actual>". Did you mean "<suggestion>"? Values are case-sensitive.

cubic-bezier

CodeSeverityMessage
cubic-bezier.value.not-arrayerrorA cubic Bézier value must be an array of four numbers, received "<actualType>".
cubic-bezier.value.wrong-lengtherrorA cubic Bézier value must have exactly 4 numbers [P1x, P1y, P2x, P2y], received "<actual>".
cubic-bezier.point.not-numbererrorCubic Bézier coordinate "<index>" must be a number, received "<actualType>".
cubic-bezier.x.out-of-rangeerrorCubic Bézier x coordinate "<index>" must be in [0, 1], received "<actual>".

number

CodeSeverityMessage
number.value.not-numbererrorA number value must be a JSON number, received "<actualType>".

On this page