The sturdy little frontend framework โ a friendly fork of choo,
rebuilt for the modern platform.
> **buuh is a fork of [choo](https://github.com/choojs/choo)** โ same
> API, same philosophy, modern engine. It exists because we love choo
> and wanted it alive on today's platform; all credit for the design
> belongs upstream (see [Credits](#credits)). Everything is MIT, and if
> upstream ever wants this work home, the door is open
> ([`docs/upstream-rfc-draft.md`](docs/upstream-rfc-draft.md)).
## What is this
buuh 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 '@uhhm/buuh'
import html from '@uhhm/buuh-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')
```
## Getting it
From the uhhm registry (one `.npmrc` line routes the scope; everything
else still resolves from npmjs):
```console
$ echo "@uhhm:registry=https://project.uhhm.no/api/packages/uhhm/npm/" >> .npmrc
$ npm i @uhhm/buuh @uhhm/buuh-html
$ npm i -D @uhhm/bankai
```
Or with no package manager at all โ one file, one import map:
```html
```
See [`docs/publishing.md`](docs/publishing.md) for how the registry and
the CDN bundle fit together.
## Why this fork
- **No build step, anywhere.** Templates parse at runtime (cached per
call site in a WeakMap, clone-based instantiation โ as fast as choo's
old compile-time transform, without the toolchain). An import map and
a `