Fluixi compiles your JSX to fine-grained DOM updates on a TC39-Signals core — then gives you SSR, streaming, SSG, server functions, routing, DI and i18n in one coherent stack.
npm create fluixi@latestfunction Counter() {
const [count, setCount] = createSignal(0);
const doubled = createMemo(() => count() * 2);
return (
<button onClick={() => setCount(c => c + 1)}>
{count()} · {doubled()}
</button>
);
}One framework, from the signal graph to the edge.
A TC39-Signals graph updates exactly the DOM that changed — no virtual DOM, no diffing, no re-renders.
JSX compiles straight to imperative DOM calls. You ship the work, not a runtime that re-discovers it.
Request-scoped server rendering with web-stream output and seamless hydration — isolated per request.
Set `prerender` and `fluixi build` crawls your routes to static HTML — this very page is SSG.
Routes from the filesystem, nested layouts, lazy loading, data loaders — with a framework-agnostic core.
`"use server"` turns a function into a typed RPC; forms get progressive-enhancement actions.
Drop a handler in `src/api/**` for `/api/*`; a middleware chain runs before every render.
Angular-style dependency injection, built-in typed i18n, and an HTTP interceptor pipeline.
Partial hydration for mostly-static pages, and an edge-safe server that runs on Workers, Deno and Bun.
Mark a function "use server" and the compiler strips its body from the browser, leaving a typed RPC stub. Secrets, database calls and your API keys never ship to the client.
/api/*// runs only on the server — the body is stripped from the client bundle
async function getUser(id: string) {
"use server";
return db.users.find(id); // secrets stay server-side
}
// call it from anywhere like a normal async function:
const user = await getUser("42");The Fluixi Playground compiles JSX in your browser and renders the live dependency graph — watch state, memos, stores and effects light up as they propagate.
Try the Playground →