Small by design
Every line of code must justify its existence — for what it says and for what it costs to run. Size is never the goal: it is the evidence left behind when nothing unjustified survives.
Overview
One standard, two layers: micro behavior, micro semantics. The core is the grammar; the modules are vocabulary you install by importing. Everything is dependency-free, useful on its own, and speaks the same two-method protocol.
Foundations
Every line of code must justify its existence — for what it says and for what it costs to run. Size is never the goal: it is the evidence left behind when nothing unjustified survives.
HTML, CSS and JavaScript should be understandable directly — no transpilers, no generated artifacts between you and the page. What you write is what the browser runs, and what a colleague reads six months later.
Projects should work with plain files, CDN imports and simple hosting. The distance between editing a file and seeing it live is a browser refresh — for you today, and for whoever inherits the project.
Developers should only include the pieces they actually need. Every module stands alone and installs by importing; nothing arrives that you didn't ask for, and nothing breaks when you leave a piece out.
The browser already provides the primitives; microDOM embraces web standards instead of abstracting them away.
Web apps, widgets, docs, embedded interfaces, blockchain interfaces and constrained environments.
One npm package, five entry points. The whole family — grammar, state, lists, live data and motion — weighs 17.6 KB minified. Adopt it one import at a time.
The reactive DOM engine of the Microdom standard. One function reads, writes and
binds the DOM; any object with get/sub keeps it live.
7.4 KB, zero dependencies, no build step.
The design baseline for the content web. Classless, cascade-first: semantic HTML
styled out of the box, an exact set of µ-* attributes for layout, and
classes reserved for state. 11.6 KB minified, 3.1 KB gzip.
One package, one language. The core is the grammar — select, read, write,
traverse, bind — and every module adds vocabulary through the same
µ(...) call: state, keyed lists, live data, motion. Each piece is
independent, installs by importing, and speaks the atom protocol; together they
weigh 17.6 KB.
Where did Mode Bind go? It graduated. Reactive data binding is no
longer a separate library on a roadmap — it shipped inside the 2.0 core as the atom
protocol: pass any object with get/sub to any µ command and
the DOM stays in sync. The promise became grammar.
@microdom/mode | The grammar — select, read, write, traverse, bind | 7.4 KB |
@microdom/mode/atom | Mode Atom — atom, computed, effect | 1.1 KB |
@microdom/mode/list | Mode List — keyed rendering with lifecycle | 1.4 KB |
@microdom/mode/data | Mode Data — columnar store for live feeds | 2.4 KB |
@microdom/mode/move | Mode Move — animation through the same call | 5.3 KB |
An SPA router. Map URLs to views with the smallest possible surface area — no opinions you didn't ask for.
In developmentPersistence for the data that stays: a compact JSON store over
localStorage whose keys speak the atom protocol — carts, sessions and
preferences that survive reload and sync across tabs.
The third rung of the ladder. Ideas enter as research, harden on the workbench, and ship as standard — data binding walked this path, from a card on a roadmap to the grammar of the 2.0 core.
The bar here is the same one the code answers to: we publish measurements, not intentions. A research line is listed when it carries a question, a constraint and a finding — the way the live-table threshold (500 instruments, ~1 ms per tick) was measured before it shipped as Mode Data. Lines currently in the lab appear here when their numbers are ready.