· product · features

What ships in the box.

Vesk is not a UI kit. It's a compiler, a reactivity runtime, a router, a data layer, and a native emitter — integrated so you don't glue them together. Choose the primitives you need; the compiler tree-shakes the rest.

◈ — vs JSX sprawl in Next/Astro

.vsk components

Single-file component with markup, logic, <style> and islands. Statement or expression mode — same IR.

◎ — vs React hooks & Svelte $:

track() reactivity

&[count]=track(0) → auto get/set, derived, effect. No useState/useEffect ceremony.

⬡ — vs Next client:all

Islands

Zero-JS by default. Add client only where you need it — {.client} blocks are compile-time.

◇ — vs Next file-only

File + manual routing

app/ conventions plus createRouter(defineRoute) — groups, [slug], [...rest], hash, offline.

▞ — vs React hydrateRoot full-replay

SSR + hydration

Streaming SSR, claim walkers, 4 hydrate strategies (full/viewport/idle/interaction).

⟡ — vs fetch+useEffect

Data fetching

useFetch + Resource, staleTime, dedupe, into cells, HttpError. SSR handoff included.

⬢ — vs Next server actions alone

Forms & actions

Form, Field, defineAction with Zod, CSRF, optimistic mutate.

⬣ — vs Svelte/Astro extra config

TypeScript

.vsk superset — every TS feature survives codegen and vsk typecheck.

⬔ — vs per-framework tailwind hacks

Tailwind v4

@vesk/plugin-tailwind, same utilities on web and Kotlin.

⬕ — vs React Native bridge

Vesk Native

Same IR → Kotlin + Compose Material 3. No WebView.

✦ — vs full reloads

HMR

Sub-second, surgical. Only affected route islands re-execute.

⬒ — vs glue-your-own

SEO & build

create-vesk, vesk build, ISR, typed errors, diagnostics.

vs other frameworks — honest comparison
Pillar Vesk Next.js 15 SvelteKit / Astro
Runtime shipped ~2 kB router + per-cell updates; static = 0 B React + RSC runtime ~80-120 kB Svelte runtime ~8-15 kB; Astro partial 0 B but islands are React/Svelte
Reactivity Fine-grained cells — O(1) DOM write per change VDOM diff — O(n) re-render Svelte fine-grained; Astro none (static)
SSR model String push + claim markers; fully static = no hydrate renderToString + hydrateRoot full replay Svelte: similar; Qwik: resumable
Routing File + manual (defineRoute, hash, offline) File only, extra config for hash File only
Native Kotlin IR output — no bridge None (Expo separate) None
DX One model .vsk, HMR ~90 ms, vesk typecheck Next HMR, but client/server split Good DX, per-framework

Numbers are order-of-magnitude; measure your bundle. Vesk's win is architectural: less to ship because the compiler proves what can be static.

Next.js → Vesk in 1 day

npx create-vesk , move app/ , replace useState with &[x]=track , delete useEffect boilerplate. Most pages become static.

Start migration →

SvelteKit → Vesk

Familiar fine-grained feel, but stereo: web and Kotlin from one IR, file + manual routes, and useFetch with SSR handoff.

See comparison →

Astro → Vesk

Keep the islands idea, gain a real app framework: routing, data, forms, and native — not just content.

Routing docs →