The GUI Primitives 1. We build the interface with CLJS functions that produce standard HTML, SVG, and CSS. 2. Functions that build HTML components can be freely parameterized and composed. 3. HTML attribute values and children can be computed from CLJS functions, or "formulas". Different instances can have different formulas for the same property. 4. Formulas can "navigate" the app structure to read other nodes' properties reactively. Dependencies are tracked transparently. There is no separate store. 5. Selected properties can be "inputs" (into the reactive graph) to which event handlers and other "outside" code can write. 6. Properties can be given "watch" functions that run when a property changes value. Watches can execute side-effects outside the reactive graph, or they can enqueue changes to the graph for execution next. I need one more to get to seven. :)