Skip to content
>_devvkit
$devvkit learn --librarie sveltekit-guide

SvelteKit Guide

[svelte][ssr][full-stack][compiler]
JavaScript / TypeScript
Install
npx sv create my-app
cd my-app
npm install
npm run dev

SvelteKit is the official application framework for Svelte. Svelte shifts work from browser to compiler — your components compile to highly optimized vanilla JS at build time.

Svelte 5 introduces runes (, , ) which bring fine-grained reactivity without the old let magic. The mental model is simpler than React's hooks or Vue's ref.

SvelteKit provides file-based routing, server load functions, form actions, streaming, and adapter-based deployment to serverless, Node, or static hosts.

Setup

Create projectScaffold SvelteKit app.
npx sv create my-app --template demo
cd my-app
npm run dev

Routing

Page routeRoute with data loading.
// src/routes/+page.ts
export async function load({ fetch }) {
  const users = await fetch('/api/users').then(r => r.json())
  return { users }
}

// src/routes/+page.svelte
<script lang="ts">
  let { data } = ()
</script>
{#each data.users as user}
  <p>{user.name}</p>
{/each}
Dynamic routeRoute param.
// src/routes/users/[id]/+page.ts
export async function load({ params, fetch }) {
  const user = await fetch(/api/users/).then(r => r.json())
  return { user }
}

Data Loading

Server-only loadLoad runs on server only.
// src/routes/+page.server.ts
export async function load({ locals }) {
  // Direct DB access — never exposed to client
  const users = await db.findMany()
  return { users }
}

Form Actions

Form actionServer-side form handler.
// src/routes/login/+page.server.ts
export const actions = {
  default: async ({ request, cookies }) => {
    const form = await request.formData()
    const email = form.get('email')
    // validate, set cookie, redirect
    throw redirect(303, '/dashboard')
  }
}

Runes

Runes — Fine-grained reactive state.
<script lang="ts">
let count = (0)
let doubled = (count * 2)
(() => { console.log('count:', count) })
</script>

<button onclick={() => count++}>{count}</button>
Runes — class syntaxReactive class.
class Counter {
  count = (0)
  doubled = (this.count * 2)
  increment() { this.count++ }
}

Deployment

Deploy to VercelAdapter-based deploy.
npm install --save-dev @sveltejs/adapter-vercel
// svelte.config.js:
import adapter from '@sveltejs/adapter-vercel'
export default { kit: { adapter: adapter() } }