· product · comparison

Honest 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.

head-to-head — where framework choice matters most
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.

When to choose Vesk — we win

  • Content + forms + lists: docs, dashboards, admin, field tools — where per-cell updates and zero-JS chrome matter.
  • Web + native with shared design: one token set → Tailwind + Compose, not two apps.
  • You want guarantees: compile-time proof beats runtime hope.

When not to — be honest

  • Huge React ecosystem need: Next's npm reach is unmatched — if you need 10 niche React libs day one, choose Next.
  • Heavy canvas/WebGL: Vesk is DOM-first; for games, Flutter/Canvas is better.
  • Team is React-only: Vesk asks you to learn component + &[track] — small but real.

The 90-second sell — tailors to your current stack

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.

Migration →

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 →