Kimo
Docs
v1.0
Changeloggetkimo.design
Docs
v1.0
File format spec
§14

Defaults

Status
Stable (format version 1.0.0, frozen 2026-10). Backward compatible within 1.x (§16.4). Supersedes the draft v0.1, kept as a historical record; 0.1 files open through the 0.1 → 1.0 migration (§16.2).
Schema
https://getkimo.design/schema/kimo-1.0.json (JSON Schema draft 2020-12), generated into packages/core-schema/schema/kimo-1.0.schema.json. The 0.1 schema stays published at …/kimo-0.1.json (schema/kimo-0.1.schema.json, frozen).
Reference
@kimo/core-schema (packages/core-schema). Where this document and the implementation disagree, that is a bug in one of them; file an issue.
Plan of record
docs/teardown.md §10. Every place where this spec resolves an ambiguity in, or deviates from, that section is listed in §20.
License
MIT

A property equal to its default means exactly the same as the absent property. Canonical writers omit it (§15). The table is data in @kimo/core-schema (DEFAULTS); the JSON Schema default keywords and the writer's omit logic are generated from it.

ScopeFieldDefault.pen default, if different
every node but instancevisible, opacity, rotation, flipX / flipY, blendtrue, 1, 0, false, "normal"
every nodeposition, locked, component"auto", false, false
framelayoutabsent = no flex layoutlayout: horizontal (importer writes dir: "row")
framew / h{ "mode": "fit" }fit_content
frameclip, radiusfalse, 0
rect, polygon, browserradius0
polygon starratio0.38
ellipseinnerRadius, startAngle, sweepAngle0, 0, 360
pathfillRule"nonzero"
textgrow"auto"
textstyle.lineHeightabsent = the font's defaultsame
scriptclipfalse
browserzoom, scrollX, scrollY1, 0, 0
layoutgap, crossGap, pad0gap 0; padding undocumented
layoutjustify, align"start"
layoutwrap, includeStrokefalse
Size fillfallback / weightnone / 1
strokewidth, align, cap, join, miterLimit1, "inside", "butt", "miter", 4(to be checked by the importer)
solid paintblend, visible"normal", true
gradientcenter, size, rotation, interpolation, opacity, blend, visible[0.5,0.5], [1,1], 0, "srgb", 1, "normal", true
image paintfit, opacity, blend, visible"cover", 1, "normal", truecover
shadowinner, spread, blend, visiblefalse, 0, "normal", true
blur, backdrop-blurvisibletrue
OKLCH / P3 coloralpha1
every node but instance
Field visible, opacity, rotation, flipX / flipY, blend
Default true, 1, 0, false, "normal"
.pen default, if different
every node
Field position, locked, component
Default "auto", false, false
.pen default, if different
frame
Field layout
Default absent = no flex layout
.pen default, if different layout: horizontal (importer writes dir: "row")
frame
Field w / h
Default { "mode": "fit" }
.pen default, if different fit_content
frame
Field clip, radius
Default false, 0
.pen default, if different
rect, polygon, browser
Field radius
Default 0
.pen default, if different
polygon star
Field ratio
Default 0.38
.pen default, if different
ellipse
Field innerRadius, startAngle, sweepAngle
Default 0, 0, 360
.pen default, if different
path
Field fillRule
Default "nonzero"
.pen default, if different
text
Field grow
Default "auto"
.pen default, if different
text
Field style.lineHeight
Default absent = the font's default
.pen default, if different same
script
Field clip
Default false
.pen default, if different
browser
Field zoom, scrollX, scrollY
Default 1, 0, 0
.pen default, if different
layout
Field gap, crossGap, pad
Default 0
.pen default, if different gap 0; padding undocumented
layout
Field justify, align
Default "start"
.pen default, if different
layout
Field wrap, includeStroke
Default false
.pen default, if different
Size fill
Field fallback / weight
Default none / 1
.pen default, if different
stroke
Field width, align, cap, join, miterLimit
Default 1, "inside", "butt", "miter", 4
.pen default, if different (to be checked by the importer)
solid paint
Field blend, visible
Default "normal", true
.pen default, if different
gradient
Field center, size, rotation, interpolation, opacity, blend, visible
Default [0.5,0.5], [1,1], 0, "srgb", 1, "normal", true
.pen default, if different
image paint
Field fit, opacity, blend, visible
Default "cover", 1, "normal", true
.pen default, if different cover
shadow
Field inner, spread, blend, visible
Default false, 0, "normal", true
.pen default, if different
blur, backdrop-blur
Field visible
Default true
.pen default, if different
OKLCH / P3 color
Field alpha
Default 1
.pen default, if different

Not defaulted: x and y (absent means 0, but an explicit 0 is kept so positions stay visible in diffs), and every field without a row above.

Where defaults do not apply. The top-level keys of an instance's props and of a set override are never omitted or filled in, because there they override a component value (opacity: 1 restores full opacity over a component's 0.5). Values nested below those keys are normalized, because each such value replaces the target's value wholesale.

Keywords:
MUST
MUST NOT
SHOULD
MAY
set in small mono caps wherever they are normative