Build explicitinterfaces withnuclo.
A small, type-safe DOM framework. State stays plain and mutable. You control every update. No proxies, no signals, no virtual DOM.
import 'nuclo' let count = 0 export function Counter() { return div( p(() => count), button("-", { onClick: () => { count--; update() } }), button("+", { onClick: () => { count++; update() } }), ) }
One explicit cycle.
State-dependent values, no dependency graph, no scheduler. You decide when they run - a single predictable path from your data to the screen.
- 01Mutate
Change your data
State is plain JavaScript: variables, arrays, objects. Mutate it however you like, as many times as you like.
todos.push(newTodo) user.name = 'Ada' - 02Commit
Call update()
One global function commits your changes. Batch a dozen mutations, then commit once. Nothing renders until you say so.
update() - 03Patch
Nuclo syncs the DOM
Every dynamic expression re-evaluates. Nuclo writes only the values that actually changed to the DOM. No diffing, no re-renders.
// 2 nodes patched, // everything else untouched
When you mutate state, nothing happens. Call update(), and Nuclo does exactly what you asked. No more, no less.Explicit is better than implicit
No proxies track your every move. You mutate state, then you call
update(). Cause and effect stay clear and predictable.Batch freely, update once
Make ten mutations, then call
update()once. The DOM sees only the final state. No renders are wasted.Functions, not components
Build with plain JavaScript functions. Nuclo needs no classes, no decorators, and no special syntax. Each function returns DOM nodes. Add
onMountandonDestroyas ordinary modifiers, only when you need them.
Built for clarity.
No magic. No surprises. Every update is intentional.
- 01Explicit
You own the update cycle
Mutate freely, then call
update()once. Nuclo needs no subscriptions and no schedulers, and it never surprises you with a diff. The DOM syncs when you decide. - 02Lightweight
Zero dependencies
About 15.2 KB gzipped for the entire runtime. Nuclo needs no compiler and no build plugins. Add one import and start building.
- 03Typed
TypeScript-first
175 fully-typed HTML and SVG builders give you autocomplete for every attribute, style property, and event.
- 04Precise
Fine-grained patching
Dynamic expressions re-evaluate on
update(). Only the values that actually changed touch the DOM.
Fast where it counts.
These are independent numbers from js-framework-benchmark, for creating, updating, swapping, and clearing thousands of rows.
- Nuclo0.2.241.12
- Solid1.9.31.13
- Svelte5.42.11.17
- Vue3.5.391.31
- Riot10.1.21.54
- React19.2.01.58
- Angular22.0.01.58
- Stencil4.23.01.81
- Ember7.3.0-alpha.52.06
- Knockout3.5.12.26
- Qwik1.11.03.29
Ready when you are.
Install Nuclo, import it once, and ship UIs that update exactly when you say. You can learn the whole API in an afternoon.