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.
| Scope | Field | Default | .pen default, if different |
|---|---|---|---|
| every node but instance | visible, opacity, rotation, flipX / flipY, blend | true, 1, 0, false, "normal" | |
| every node | position, locked, component | "auto", false, false | |
| frame | layout | absent = no flex layout | layout: horizontal (importer writes dir: "row") |
| frame | w / h | { "mode": "fit" } | fit_content |
| frame | clip, radius | false, 0 | |
| rect, polygon, browser | radius | 0 | |
polygon star | ratio | 0.38 | |
| ellipse | innerRadius, startAngle, sweepAngle | 0, 0, 360 | |
| path | fillRule | "nonzero" | |
| text | grow | "auto" | |
| text | style.lineHeight | absent = the font's default | same |
| script | clip | false | |
| browser | zoom, scrollX, scrollY | 1, 0, 0 | |
| layout | gap, crossGap, pad | 0 | gap 0; padding undocumented |
| layout | justify, align | "start" | |
| layout | wrap, includeStroke | false | |
Size fill | fallback / weight | none / 1 | |
| stroke | width, align, cap, join, miterLimit | 1, "inside", "butt", "miter", 4 | (to be checked by the importer) |
| solid paint | blend, visible | "normal", true | |
| gradient | center, size, rotation, interpolation, opacity, blend, visible | [0.5,0.5], [1,1], 0, "srgb", 1, "normal", true | |
| image paint | fit, opacity, blend, visible | "cover", 1, "normal", true | cover |
| shadow | inner, spread, blend, visible | false, 0, "normal", true | |
| blur, backdrop-blur | visible | true | |
| OKLCH / P3 color | alpha | 1 |
every node but instance
Field
visible, opacity, rotation, flipX / flipY, blendDefault
true, 1, 0, false, "normal".pen default, if different
every node
Field
position, locked, componentDefault
"auto", false, false.pen default, if different
frame
Field
layoutDefault absent = no flex layout
.pen default, if different
layout: horizontal (importer writes dir: "row")frame
Field
w / hDefault
{ "mode": "fit" }.pen default, if different
fit_contentframe
Field
clip, radiusDefault
false, 0.pen default, if different
rect, polygon, browser
Field
radiusDefault
0.pen default, if different
polygon
starField
ratioDefault
0.38.pen default, if different
ellipse
Field
innerRadius, startAngle, sweepAngleDefault
0, 0, 360.pen default, if different
path
Field
fillRuleDefault
"nonzero".pen default, if different
text
Field
growDefault
"auto".pen default, if different
text
Field
style.lineHeightDefault absent = the font's default
.pen default, if different same
script
Field
clipDefault
false.pen default, if different
browser
Field
zoom, scrollX, scrollYDefault
1, 0, 0.pen default, if different
layout
Field
gap, crossGap, padDefault
0.pen default, if different gap 0; padding undocumented
layout
Field
justify, alignDefault
"start".pen default, if different
layout
Field
wrap, includeStrokeDefault
false.pen default, if different
Size
fillField
fallback / weightDefault none /
1.pen default, if different
stroke
Field
width, align, cap, join, miterLimitDefault
1, "inside", "butt", "miter", 4.pen default, if different (to be checked by the importer)
solid paint
Field
blend, visibleDefault
"normal", true.pen default, if different
gradient
Field
center, size, rotation, interpolation, opacity, blend, visibleDefault
[0.5,0.5], [1,1], 0, "srgb", 1, "normal", true.pen default, if different
image paint
Field
fit, opacity, blend, visibleDefault
"cover", 1, "normal", true.pen default, if different
covershadow
Field
inner, spread, blend, visibleDefault
false, 0, "normal", true.pen default, if different
blur, backdrop-blur
Field
visibleDefault
true.pen default, if different
OKLCH / P3 color
Field
alphaDefault
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