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

Merge behaviour (measured)

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

The table layout targets clean results from plain line-based git merge (merge drivers only run where configured locally; GitHub/GitLab and CI ignore merge=kimo). Measured with git merge-file (git 2.50; myers, histogram and patience agree) on canonical files, in test/git-merge.test.ts:

Concurrent change (ours / theirs)Result
Insert nodes at different positionsclean
Edit adjacent nodesclean
Delete a node / edit the node before it, or two entries below itclean
Reparent a node / edit anotherclean
Edit a variable / add a nodeclean
Append after the last node / edit the firstclean
Remove the last node / edit anotherclean
Delete a node / edit the node right after itconflict (git removes the deleted line with the blank line after it, so the hunks touch)
Both append different nodes after the last nodeconflict (same insertion point)
Both edit the same nodeconflict (true conflict)
Insert nodes at different positions
Result clean
Edit adjacent nodes
Result clean
Delete a node / edit the node before it, or two entries below it
Result clean
Reparent a node / edit another
Result clean
Edit a variable / add a node
Result clean
Append after the last node / edit the first
Result clean
Remove the last node / edit another
Result clean
Delete a node / edit the node right after it
Result conflict (git removes the deleted line with the blank line after it, so the hunks touch)
Both append different nodes after the last node
Result conflict (same insertion point)
Both edit the same node
Result conflict (true conflict)

Live sync (CRDT). Record-valued instance fields (overrides, args, props) and imports merge per key, so concurrent changes of different override paths, args or library aliases all survive. Semantic conflicts are not repaired automatically: two concurrent aliases that are each acyclic can merge into an alias cycle (VARIABLE_CYCLE); the resolver guards it, the document stays editable, and the user breaks the cycle by giving one variable a literal value.

Independent edits: 8 of 10 scenarios merge cleanly, and every clean result is the canonical serialization of both changes applied. A .gitattributes template ships with *.kimo merge=kimo diff=kimo; kimo merge (semantic, three-way) can also run as a pre-merge step in CI.

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