· product · comparison
We sell Vesk, but we sell it honestly. Below is where compiler-first wins, where it ties, and where you should choose something else. Measure, don't believe.
| Pillar | Vesk | Next.js 15 | SvelteKit | Astro + islands | Qwik / Remix |
|---|---|---|---|---|---|
| Paradigm | Compiler-first, VDOM-free | React VDOM + RSC | Compiler-aided, fine-grained | Static-first, islands opt-in | Resumable (Qwik) / SSR (Remix) |
| JS shipped | Static 0 B; app ~22-48 kB | ~90-140 kB baseline | ~28-45 kB | 0 B → islands add React/Svelte | Qwik 0-20 kB; Remix ~40 kB |
| Hydration | Claim walk, static skipped; 4 strategies | Full hydrateRoot | Full + runtime | Islands only | Qwik resumable; Remix hydrate |
| Routing | File + manual, groups, hash, offline | File, no manual, no hash | File, good | File, simple | File |
| Data | useFetch Resource, SSR handoff, staleTime | fetch + RSC, implicit | load functions | fetch at build | loaders |
| Native | Kotlin/Compose from same IR | None (Expo separate) | None | None | None |
| Build error | Invalid semantics fail build | Runtime, sometimes silent | Some compile errors | Few | Mixed |
| Ecosystem | npm, Tailwind, lucide — small, growing | Massive | Solid | Huge (framework-agnostic) | Small (Qwik) / Remix: medium |
We benchmarked on showcase apps (same UI/data) on CI 4 vCPU Node 20 gzip. Re-run on your app — architecture matters more than micro-benchmarks.
component
+
&[track]
— small but real.
You use Next.js
Keep file routing, lose VDOM tax. Move state to
track
, keep data in
useFetch
— most pages become static and ship 0 B. Port in a day.
You use SvelteKit
Stay fine-grained, gain Kotlin target + manual routing + offline boundaries. Same feel, more reach.
Native →You use Astro/Qwik
Keep islands + 0 JS, gain a real framework — routing, data, forms, auth middleware — without gluing.
Features →