The sturdy frontend framework โ now with a modern engine under the same hood.
> **This is the v8 branch.** choo v7 is on `master` and stays untouched
> until 8.0.0 ships. Everything below describes v8: same API, same
> philosophy, rebuilt for the platform of 2026. See
> [`docs/v8.md`](docs/v8.md) for status and the full plan.
## What is this
Choo is a small framework for building frontend applications with plain
JavaScript and HTML. State lives in stores, changes flow through an event
emitter, views are tagged template literals, and re-renders morph the real
DOM. The whole framework โ core, html engine, morphing, hydration, router,
event bus โ is **7.97 kB min+gzip** (7.15 kB brotli), enforced by CI.
```js
import choo from '@choojs/core'
import html from '@choojs/html'
const app = choo()
app.use((state, emitter) => {
state.count = 0
emitter.on('increment', (n) => {
state.count += n
emitter.emit('render')
})
})
app.route('/', (state, emit) => html`
count is ${state.count}
`)
app.mount('body')
```
## Why v8
- **No build step, anywhere.** Templates parse at runtime (cached per
call site in a WeakMap, clone-based instantiation โ as fast as the old
compile-time transform, without the toolchain). An import map and a
`