docs / Language

Not in the Grammar

Explicit non-features. Vesk is a TypeScript superset — everything listed here is intentionally absent today, and the absence is a contract.

Explicit non-features. Vesk is a TypeScript superset — everything listed here is intentionally absent today, and the absence is a contract: code relying on any of these will not compile.

Language

  • No `defer` / streaming boundaries — SSR output is a static template per component.
  • No `class` declarations in component bodies — raises a compiler error.
  • No adjacent top-level JSX — siblings must be wrapped in `<>...</>` or a parent element.
  • `component` is reserved and cannot be used as an identifier.
  • No `suspense` implementation — use the `if (loading)` + `createResource` pattern instead.

Reactivity

  • No `batch`. Synchronous multi-write flushes use `flushSync(fn)`; the default scheduler is microtask-batched.
  • No React hooks. The equivalents are `track()`, `effect()`, `derived()`.
  • No virtual DOM — updates compile to per-cell DOM mutations; there is no reconciliation tree at runtime.

Tooling

  • No `vite-plugin-vesk` — `vesk dev` / `vesk build` are the build entry points; Tailwind ships as `@vesk/plugin-tailwind`.
  • The deprecated `packages/runtime/src/track.ts` module is dead code — never import it; the active API lives in ripple-runtime.ts.
  • Server vs client exports are split: server-only APIs (cookies, headers, isr) are not in the client bundle; client-only APIs (hydrate, bindings, reconcile) are not in the server bundle.