choo
nano
nano
nano
choo
nano
4kilobytes
choo
choo
4kilobytes
nano
nano
4kilobytes
smol
smol
choo
choo
choo
smol
smol
choo
smol
smol
nano
smol
4kilobytes
4kilobytes
smol
choo
4kilobytes
nano
4kilobytes
smol
nano
nano
nano
choo
choo
smol
choo
4kilobytes
choo
4kilobytes
choo
nano
4kilobytes
nano
4kilobytes
nano
choo
nano
choo
choo
smol
smol
smol
choo
choo
nano
choo
smol
smol
smol
choo
choo
choo
smol
smol
4kilobytes
nano
smol
smol
nano
choo
4kilobytes
choo
a 4kb framework for creating sturdy frontend applications
Super minimal

Choo's modular core was engineered from the ground up to be smaller and more efficient than every other alternative out there. This was made possible by building out the core components over the span of 3 years and combining them under a tiny API.

Easy to begin

We think learning frameworks is boring. So instead of inventing a new language, Choo relies on vanilla JS and HTML. Combined with its small API and clean architecture this means Choo is easy to get started with, and stays that way as projects grow in scope and humans.

var html = require('choo/html')
var choo = require('choo')

var app = choo()
app.use(titleStore)
app.route('/', mainView)
app.mount('body')

function mainView (state, emit) {
  return html`
    <body>
      <h1>Title: ${state.title}</h1>
      <input type="text" value="${state.title}" oninput=${update} />
    </body>
  `

  function update (e) {
    emit('update', e.target.value)
  }
}

function titleStore (state, emitter) {
  state.title = 'Not quite set yet'
  emitter.on('DOMContentLoaded', function () {
    emitter.on('update', function (newTitle) {
      state.title = newTitle
      emitter.emit('render')
    })
  })
}
Made with 🚂 in Saigon, Tokyo, Berlin
By Yosh & friends