The Svelte meta-framework. Its signature power: form actions — forms that work without client JS, progressively enhanced into smooth single-page submits.
In SvelteKit, a <form> posts to a named action on the server. The action runs, returns data, and the page updates. It works even with JS off — and use:enhance upgrades it to a no-reload submit. Submit the form to watch the flow light up.
// +page.server.js export const actions = { subscribe: async ({ request }) => { const data = await request.formData() return { success: true, email: data.get('email') } } }
Svelte compiles reactivity away — no virtual DOM. With $state and $derived, a value and everything computed from it update together. Change the quantity and watch the total derive itself.
auto-recomputed
let qty = $state(1) let total = $derived(qty * 12) // recomputes when qty changes
Each checkbox is a tiny form action. With use:enhance the toggle posts to the server and patches the list in place — no full reload. Toggle items and add one.
SvelteKit routes by folder. A +page.svelte is the UI, +page.server.js loads its data, [param] is dynamic. Click a route file.
A +page.svelte file is a route's UI.