Introduction

EmberKit is a minimalist, TypeScript-first JSX framework built around three principles — speed first, then minimal weight, then zero JavaScript by default.

Speed

Performance is the top priority. EmberKit optimizes the full path from server to screen:

  • Server-rendered HTML — Pages ship as markup in dev and production (hybrid, ssr, static). Users see content before JavaScript runs.
  • Pre-rendered static routes — In hybrid and static modes, fixed paths become HTML at build time for CDN-fast TTFB and First Contentful Paint.
  • Selective hydration — No virtual DOM reconciliation on the client. Signals update bound nodes via data-ek-bind; only interactive regions load JS.
  • Targeted updates — When state changes, the runtime touches specific DOM nodes instead of re-rendering component trees.

See SSR & SSG for modes and the build pipeline.

Weight

A tree-shakeable runtime focused on routing, signals, and DOM binding — not a large reconciler. You pay for what you use. Static pages can ship no framework JS at all when they have no handlers or bindings.

Zero JS by Default

Static markup stays HTML. Interactivity is opt-in:

  • data-ek-bind — connect signals to DOM nodes (Hydration)
  • Event handlers — wired after load via data-ekclick
  • Components with onClick or bindings — only those regions hydrate
function Hero() {
  return <h1>Hello</h1>; // fast paint, no client JS
}

function Counter() {
  const [count, setCount] = createSignal(0);
  return (
    <>
      <span data-ek-bind={count}>{count()}</span>
      <button type="button" onClick={() => setCount((n) => n + 1)}>+</button>
    </>
  );
}

At a glance

Routingsrc/routes/ file conventions
RenderingHybrid default: pre-render static paths, SSR for dynamic routes
StateSignals + targeted DOM updates
Toolingemberkit dev, build, preview, serve

What's new in 0.8.0

  • Reactive effects — createEffect / createMemo re-run when dependencies change
  • View Transitions — render(..., { viewTransitions: true }) for SPA navigation
  • Dev API — devApiPlugin and src/routes/_api/* in development
  • sqlRawPlugin — import *.sql?raw for edge deployments
  • i18n — JSON translation files with createI18nFromGlob (guide)

See the full Release 0.8.0 notes.

Next Steps