or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

examples

edge-cases.mdreal-world-scenarios.md
index.md
tile.json

quick-start.mddocs/guides/

Quick Start Guide

Get started with SvelteKit in minutes.

Installation

npm create svelte@latest my-app
cd my-app
npm install
npm run dev

Project Structure

SvelteKit uses file-based routing:

src/
├── routes/
│   ├── +page.svelte          # Page component
│   ├── +page.ts              # Universal load function
│   ├── +page.server.ts       # Server load function
│   ├── +layout.svelte        # Layout component
│   ├── +layout.ts            # Layout load function
│   ├── +layout.server.ts     # Layout server load function
│   ├── +error.svelte         # Error page
│   ├── [slug]/
│   │   └── +page.svelte      # Dynamic route
│   └── api/
│       └── +server.ts        # API endpoint
├── lib/                       # Shared components and utilities
└── app.d.ts                  # Type definitions

Basic Setup

1. Create a Page

// src/routes/+page.svelte
<script>
  export let data;
</script>

<h1>{data.title}</h1>
<p>{data.message}</p>

2. Add Data Loading

// src/routes/+page.ts (universal - runs on server and client)
export async function load({ fetch }) {
  const response = await fetch('/api/data');
  const data = await response.json();
  return { data };
}
// src/routes/+page.server.ts (server-only - has access to cookies, locals)
export async function load({ cookies, locals }) {
  const user = locals.user;
  return { user };
}

3. Create an API Endpoint

// src/routes/api/data/+server.ts
import { json } from '@sveltejs/kit';

export async function GET() {
  return json({ message: 'Hello from API' });
}

export async function POST({ request }) {
  const data = await request.json();
  return json({ received: data });
}

4. Handle Forms

// src/routes/+page.server.ts
import { fail, redirect } from '@sveltejs/kit';

export const actions = {
  default: async ({ request }) => {
    const data = await request.formData();
    const email = data.get('email');
    
    if (!email) {
      return fail(400, { email, missing: true });
    }
    
    // Process form
    redirect(303, '/success');
  }
};
<!-- src/routes/+page.svelte -->
<script>
  import { enhance } from '$app/forms';
  export let form;
</script>

<form method="POST" use:enhance>
  <input name="email" type="email" />
  {#if form?.missing}
    <p>Email is required</p>
  {/if}
  <button>Submit</button>
</form>

Configuration

Create svelte.config.js:

import adapter from '@sveltejs/adapter-auto';

/** @type {import('@sveltejs/kit').Config} */
const config = {
  kit: {
    adapter: adapter()
  }
};

export default config;

Next Steps

  • Configuration Reference - Configure SvelteKit
  • Load Functions Reference - Learn about data loading
  • Forms Reference - Form handling patterns
  • Navigation Reference - Client-side navigation
  • Real-World Scenarios - Common patterns