The frameworks above also work inside these. They render pages on the server first, so the end-to-end tests also check that the browser's page matches the server's (no hydration warnings).
Framework
Status
Where to add spotnote()
SvelteKit
Tested ✅ (SvelteKit 2, 3)
vite.config.js
Nuxt
Tested ✅ (Nuxt 3, 4)
vite.plugins in nuxt.config.ts
React Router, framework mode
Tested ✅ (React Router 7, 8)
vite.config.ts
SolidStart
Tested ✅ (SolidStart 1, 2)
vite.config.ts (SolidStart 1: vite.plugins in app.config.ts)
The same goes for these, each with the newest framework inside it. Where a meta-framework fixes its Vite, that's the one:
Only .jsx and .tsx files are stamped. JSX written in .js or .ts files isn't.
HTML and SVG tags (<div>, <svg>) and custom elements (<my-el>) are stamped. Capitalized ones (<Card>) are components and aren't, and neither are other lowercase tags, such as React Three Fiber's <mesh>: they aren't DOM elements. Those that share a DOM tag's name (its <line>) are stamped.
Member and namespaced tags (<motion.div>, <svg:rect>) aren't stamped.
Markup elements in .svelte files are stamped, with Svelte 4 and Svelte 5 alike, whatever the language of their <script> and <style> (TypeScript, SCSS).
Components and <slot> aren't. Markup you pass into a slot is stamped in the file where you wrote it.
<svelte:element this={…}> isn't, because its tag is decided at runtime.