Compiled ahead of time. Rendered by a native engine.
No browser, no DOM, no webview.
bun create dziry my-app
import { computed, signal } from "dziry";
export const count = signal(0);
export const label = computed(() => `clicked ${count} times`);
export default function Counter() {
return (
<button
className="rounded-lg bg-sky-600 px-4 py-2 text-white"
onClick={() => count.set(count + 1)}
>
{label}
</button>
);
}
TSX components, Tailwind classes, plain CSS — the authoring model you already know.
Components run once; the cascade resolves to numbers; the result is typed arrays.
A Rust engine — Skia, Taffy, SDL3 — draws the window from shared memory.
Your components run once, at build time. Selectors, specificity and inheritance are resolved into a table of integers — the app ships no CSS parser and no virtual DOM, and an idle frame costs nothing.
A Rust engine draws the window with Skia and lays it out with Taffy. The two sides share memory: a style change or a route switch is a handful of byte writes, not a render.
count * 2 just works. No .value, no dependency arrays — reads are rewritten at build time and typed so the same expression also satisfies tsc.
Your project's own Tailwind runs during the compile. A utility outside the supported subset is a build warning naming the property — never a silent no-op.
File-based routes with hrefs checked against the route table at build time. Form payloads are typed from the markup itself — a checkbox arrives as boolean.
dziry build bundles your app and the engine into a single binary — the same code path dziry dev runs, with nothing to install on the user's machine.
Dziry is in beta on Windows, macOS and Linux. Every API is tracked done, partial or planned in the reference, and the status badges are generated from the project's tracking table at build time.