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
hybridandstaticmodes, 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
onClickor 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
| Routing | src/routes/ file conventions |
| Rendering | Hybrid default: pre-render static paths, SSR for dynamic routes |
| State | Signals + targeted DOM updates |
| Tooling | emberkit dev, build, preview, serve |
What's new in 0.8.0
- Reactive effects —
createEffect/createMemore-run when dependencies change - View Transitions —
render(..., { viewTransitions: true })for SPA navigation - Dev API —
devApiPluginandsrc/routes/_api/*in development - sqlRawPlugin — import
*.sql?rawfor edge deployments - i18n — JSON translation files with
createI18nFromGlob(guide)
See the full Release 0.8.0 notes.
Next Steps
- Installation — Create a project
- Quick Start — First routes and signals
- Release 0.8.0 — Latest release
- SSR & SSG — How speed is delivered in each mode
- Hydration — Selective client interactivity
- Internationalization — JSON translations and locale routing