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.