Skip to main content

Desktop apps in TypeScript, HTML and CSS

Compiled ahead of time. Rendered by a native engine.
No browser, no DOM, no webview.

bun create dziry my-app
windows/main/pages/index.tsx
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>
);
}
1

Write

TSX components, Tailwind classes, plain CSS — the authoring model you already know.

2

Compile

Components run once; the cascade resolves to numbers; the result is typed arrays.

3

Render

A Rust engine — Skia, Taffy, SDL3 — draws the window from shared memory.

Compiled ahead of time

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 native engine

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.

Signals without ceremony

count * 2 just works. No .value, no dependency arrays — reads are rewritten at build time and typed so the same expression also satisfies tsc.

Real CSS, real Tailwind

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.

Typed routes and forms

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.

One executable

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.