Skip to content

Kumiki Specification

This is the normative specification of the Kumiki language and runtime. When the implementation in packages/ and this text disagree, this text wins, and the PR records which side gets fixed.

You do not have to read it end to end. Language Core is the one document to read before writing Kumiki; the rest answer a question you already have. Tutorials and how-tos are not specification and live in the guide, and every feature has a runnable file in examples.

Documents

DocumentContents
Language Corethe 7 layers (type / slot / effect / reducer / tile / fn / app) and expressions, statements, patterns
Standard LibraryList / Map / Set / Option / Result / Time / domain types
Routingpatterns, parameters, route.enter / route.leave, redirects
StyleStyle, layout, and themes
FormsForms, bind, validation
HTTP / StorageHTTP / Storage effects and policies (latest / debounce / once …)
LifecycleLifecycle, capabilities, error boundaries, suspense
RuntimeRuntime implementation guide (signal graph, mount, dispatch, dispose)
AI EditingAI editing API, CRDT ops, referential integrity
TestingTesting strategy
Error CodesError code catalog (E0000..E08xx)

Indexes

Three cross-references into the documents above, each generated from the compiler and the examples rather than written by hand.

Layer × feature matrix — where each feature touches the 7 layers

A cell links to the section that specifies that intersection; means the dimension has no layer-specific rules there.

Featuretypesloteffectreducertilefnapp
Language Core§1.3§1.4§1.5§1.6§1.7§1.8§1.12
Standard Library§2.1§2.6§2.3§2.2 §2.4§2.5
Routing§3.2§3.3.2§3.4 §3.5§3.3.1 §3.6§3.3.3§3.1
Style§4.3 §4.4 §4.9§4.2.2 §4.6
Forms§5.1.2§5.1§5.4§5.2 §5.3§5.6
HTTP / Storage§6.1.3 §6.1.4§6.8§6.1 §6.7§6.2§6.1.1
Lifecycle§7.9§7.6 §7.7§7.1§7.3 §7.4§7.2 §7.5
Testing§8.2.2§8.5§8.2§8.4§8.3§8.6
AI Editing§9.9§9.2 §9.4
Runtime§10.3§10.4§10.5§10.3.4§10.6 §10.9
ErrorsE02xxE01xxE03xxE06xxE04xx E07xxE03xx E08xxE00xx

AI-editing CRDT ops (add / replace / remove / rename, §9.3.1) apply uniformly to definitions of every layer; the matrix row lists only the layer-specific sections.

Diagnostic codes — every code in Error Codes, by layer and feature
CodeKindLayerFeature
E0000parse-errorallcore
E0001missing-404approuting
E0002duplicate-timer-nameapplifecycle
E0003missing-appappcore
E0004duplicate-appappcore
E0005tile-cycletilecore
E0006fn-cyclefncore
E0007duplicate-definitionallcore
E0008duplicate-clause / duplicate-key / duplicate-field / duplicate-param / duplicate-variantallcore
E0102undef-reducerreducercore
E0103undef-ref / undef-slotslotcore
E0104undef-effect / init-not-effect-calleffectcore
E0106undef-timerreducerlifecycle
E0105undef-tiletilecore
E0107undef-motiontilestyle
E0108undef-memberfnstdlib
E0110unknown-token-grouptilestyle
E0109test-wildcard-misusereducertesting
E0111orphan-sub-routestilerouting
E0112duplicate-sub-routetilerouting
E0113sub-routes-without-outlettilerouting
E0114sub-routes-without-wildcard-parenttilerouting
E0115reserved-slot-nameslotcore
E0116undef-callfncore
E0117undef-typetypecore
E0118undef-themeappstyle
E0119route-bind-out-of-scopereducerrouting
E0120route-in-app-initapprouting
E0201type-mismatchtypecore
E0202emit-arg-type-mismatchreducercore
E0204effect-id-misuseeffecthttp
E0205bind-on-file-inputtileforms
E0206file-only-proptileforms
E0207pat-arity-mismatchtypecore
E0208pat-type-mismatchtypecore
E0209pat-unknown-varianttypecore
E0210type-arity-mismatchtypecore
E0211undef-tile-in-selectorreducercore
E0212selector-id-mismatchreducercore
W0212ui-event-tile-mismatchreducercore
E0213call-arity-mismatchfncore
E0214missing-record-fieldtypecore
E0215unknown-record-fieldtypecore
E0216unknown-varianttypecore
E0217int-literal-precisiontypecore
E0218for-over-non-listtypecore
W0213handler-on-inert-tiletilecore
E0301missing-capabilityeffectstdlib
E0302unknown-capabilityappstdlib
E0303invalid-cancel-targeteffecthttp
E0304derived-slotslotcore
E0305fn-impurityfncore
E0401motion-unknown-propertytilestyle
E0402motion-invalid-timingtilestyle
E0403motion-malformedtilestyle
E0601duplicate-writereducercore
E0701a11y-buttontilelifecycle
E0702a11y-imagetilelifecycle
E0703a11y-linktilelifecycle
E0704unknown-icontilestyle
E0705a11y-label-fortilelifecycle
E0712episode-mock-invalideffecttesting
E0713test-shape-invalideffecttesting
E0801unimplemented-methodfnstdlib
E0802unimplemented-functionfnstdlib
Feature examples — one runnable file per matrix cell

Layers name the definitions the example centers on; Spec links the section it demonstrates.

ExampleLayersFeatureSpec
01-slot-and-reducer.kumikislot, reducercore§1.4 §1.6
02-nominal-type.kumikitypecore§1.3
03-union-and-match.kumikitypecore§1.3
04-record-and-copy.kumikitypecore§1.3
05-pure-fn.kumikifncore§1.8
06-if-expression.kumikifncore§1.9
07-list.kumikifnstdlib§2.2.3
08-map.kumikifnstdlib§2.2.1
09-set.kumikifnstdlib§2.2.2
10-option.kumikifnstdlib§2.2.4
11-time-and-duration.kumikifnstdlib§2.2.8
12-layout.kumikitilestyle§4.4
13-text-input-bind.kumikislot, tileforms§5.1
14-select.kumikitileforms§5.5.1
15-checkbox.kumikitileforms§5.3.1
16-conditional-ui.kumikitilecore§1.7
17-theme.kumikiappstyle§4.2
18-routing.kumikiapp, tilerouting§3.1
19-effect-http.kumikieffecthttp§6.2
20-effect-storage.kumikieffecthttp§6.7
21-timer.kumikireducerlifecycle§7.1.5
22-result.kumikitypestdlib§2.2.5
23-lifecycle-route-enter.kumikireducerrouting§3.4
24-fold.kumikifnstdlib§2.2.3
25-stop-timer.kumikieffect, reducerlifecycle§7.1.5
26-overlay.kumikitilestdlib§2.3.7
27-custom-capability.kumikiapp, effectstdlib§2.5
28-tests.kumikireducertesting§8.1
30-motion.kumikitilestyle§4.9
31-argless-methods.kumikifnstdlib§2.2
32-panic-boundary.kumikitile, applifecycle§7.3
33-field-vs-method.kumikifn, typestdlib§2.2
34-builtin-tiles.kumikitilestdlib§2.3
35-match-and-args.kumikitile, typecore§1.9
36-effect-indexed-db.kumikieffecthttp§6.7.4
37-lifecycle-events.kumikireducerlifecycle§7.1
38-confirm-leave-guard.kumikireducerrouting§3.5.2
39-effect-session.kumikieffecthttp§6.7.4
40-nested-routes.kumikiapp, tilerouting§3.6
40-token-refs.kumikitilestyle§4.3
41-link-prefetch.kumikitilerouting§3.8
42-scroll-restoration.kumikiapprouting§3.9
43-file-upload-preview.kumikitileforms§5.10
44-episode-test.kumikieffecttesting§8.6
45-ui-key-hover-tuple.kumikireducer, tilecore§1.6
46-stdlib-paren-methods.kumikifnstdlib§2.2
47-icon-set.kumikitilestyle§4.8
48-effect-cancel.kumikieffecthttp§6.4
49-ui-focus-blur.kumikireducer, tilecore§1.6
50-match-pattern-integrity.kumikitypecore§1.9
51-selector-id.kumikireducercore§1.6.2
52-selector-id-arg.kumikireducercore§1.6.2
53-keyed-list-identity.kumikitilecore§10.3.10
54-select-preserves-state.kumikitilecore§10.3.11
55-video-preserves-currenttime.kumikitilecore§10.3.11
56-details-preserves-open.kumikitilecore§10.3.11
57-editable-preserves-focus.kumikitilecore§10.3.11
58-unkeyed-conditional-rebuild.kumikitilecore§10.3.12
59-overlay-keyed-layers.kumikitilecore§10.3.10
60-empty-state-keyed-list.kumikitilecore§10.3.10
61-reserved-identifier-names.kumikifn, reducercore§1.2
62-conditional-inline-tile-handlers.kumikitile, reducercore§10.3.13
63-reducer-batch-atomicity.kumikislot, reducercore§10.3.3
64-init-slot-argument.kumikiapp, effectcore§1.12
65-prefers-dark.kumikiapp, reducerstyle§4.6.1
66-value-types.kumikitype, slot, fncore§1.9.4
67-self-reference.kumikitile, slot, fncore§1.7.2
68-name-uniqueness.kumikitype, slot, fncore§1.3.1
69-builtin-effect-capabilities.kumikireducer, effectstdlib§2.6
70-spec-grammar.kumikitype, slot, fn, reducercore§1.2
71-button-type.kumikislot, reducer, tileforms§5.2.2
72-time-format.kumikislot, fn, tilestdlib§2.2.8
73-effect-policy-queue.kumikislot, effect, reducerlifecycle§10.4.3
74-common-tile-props.kumikislot, reducer, tilestyle§2.3.10
75-paren-less-stdlib-constants.kumikislot, effect, reducerhttp§6.1.4
76-conditional-adds-a-universal-handler.kumikislot, reducer, tilecore§10.3.11
77-int-float-math.kumikislot, reducer, tilestdlib§2.2.7