Why Zoijs

Zoijs is a tiny frontend framework for building fast web apps with plain HTML, CSS, and JavaScript. The whole idea is to stay close to the web platform you already know, and to keep the framework small enough to understand in one sitting.

A small, focused philosophy#

Zoijs is built around a few deliberate choices:

  • Real HTML. You write markup in tagged template literals — ordinary HTML you can read at a glance. There's no JSX and nothing bespoke to compile.
  • Runs in the browser as-is. A <script type="module"> and an import map are the whole toolchain. Open an HTML file and it runs, so there's no build step between you and the page.
  • Fine-grained updates. When state changes, Zoijs updates the exact text node or attribute that depends on it — no Virtual DOM, no diffing, no re-rendering a whole component.
  • A small API. The core is seven functions: html, mount, createState, computed, each, configure, and onCleanup. You can learn it in about thirty minutes.

The one rule#

Setup runs once — there is no re-render. Inside a template, wrap a value in an arrow function when it should update:

${() => count.get()}   // live: updates when count changes
${count.get()}         // static: rendered once

That single rule is the heart of Zoijs. Once it clicks, the rest of the framework follows naturally. See Core Concepts.

Optional packages, added only when you need them#

The core stays small. Everything else is an optional package you opt into:

Each is a single small file built entirely on the core's public API, so adding one never grows the core or changes what you already know.

Where it fits#

Zoijs is a great fit for single-page apps, dashboards, internal tools, admin panels, prototypes, and anywhere you want to ship plain static files. It is client-side today; for SEO-critical content sites you'll want server rendering, which isn't part of Zoijs yet.

Long-term vision#

Zoijs grows by adding small, optional packages — not by making the core bigger. The seven-function core is stable and intended to stay that way; new capabilities arrive as opt-in modules that never compromise the no-build, plain-web identity. See the Roadmap for what's shipped and what's being considered.

Ready to try it? Start with the Quick Start.