choo

๐Ÿš‚๐Ÿš‹๐Ÿš‹๐Ÿš‹๐Ÿš‹๐Ÿš‹
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 `