DEV Community

ANKUSH CHOUDHARY JOHAL
ANKUSH CHOUDHARY JOHAL

Posted on • Originally published at johal.in

How to Use Svelte 5.0 and SvelteKit 2.0 to Build Fast Web Apps

How to Use Svelte 5.0 and SvelteKit 2.0 to Build Fast Web Apps

Introduction: Svelte 5.0 and SvelteKit 2.0 are major releases that bring significant performance improvements, new syntax with runes, and enhanced tooling for building modern web applications. This guide walks you through setting up a project, using key new features, and optimizing for speed.

Prerequisites

  • Node.js 18.0 or later installed
  • Basic knowledge of JavaScript/TypeScript
  • Familiarity with component-based frameworks is helpful but not required

Setting Up Your Project

First, create a new SvelteKit project using the official scaffold. Run the following command in your terminal:

npm create svelte@latest my-fast-app
Enter fullscreen mode Exit fullscreen mode

Follow the prompts: select "SvelteKit" as the project type, choose your preferred language (TypeScript is recommended), and pick additional tools like ESLint or Prettier if needed. Once set up, navigate to the project directory and install dependencies:

cd my-fast-app && npm install
Enter fullscreen mode Exit fullscreen mode

Start the development server with npm run dev to verify the setup works.

Key Svelte 5.0 Features: Runes

Svelte 5.0 introduces runes, a new way to handle reactivity that replaces the old $: reactive declarations and stores for most use cases. Runes are compiler primitives that make reactivity explicit and more performant.

Core Runes

  • $state: Declares reactive state, replacing let with reactive assignments.
  • $derived: Creates derived state that updates automatically when dependencies change, replacing reactive declarations.
  • $effect: Runs side effects when reactive dependencies change, replacing onMount and reactive statements for effects.
  • $props: Defines component props explicitly, replacing export let.

Example of a simple counter component using runes:

<script>
  let count = $state(0);
  const doubled = $derived(count * 2);
  const increment = () => count++;
</script>

<button onclick={increment}>
  Clicked {count} times (doubled: {doubled})
</button>
Enter fullscreen mode Exit fullscreen mode

SvelteKit 2.0 Enhancements

SvelteKit 2.0 builds on Svelte 5.0's reactivity, adding faster rendering, improved static site generation (SSG), and better API routes. Key updates include:

  • Native support for Svelte 5.0 runes across all SvelteKit features
  • Streamlined data loading with enhanced load functions
  • Improved image optimization via the @sveltejs/kit image plugin
  • Faster build times with updated Vite integration

Building a Fast Sample App

Let's build a simple blog listing app to demonstrate performance features. First, create a src/routes/blog/+page.svelte file for the blog list. Use SvelteKit's data loading to fetch posts from an API:

<!-- src/routes/blog/+page.svelte -->
<script>
  let { data } = $props();
</script>

<h1>Blog Posts</h1>
<ul>
  {#each data.posts as post}
    <li>
      <a href={`/blog/${post.id}`}>{post.title}</a>
      <p>{post.excerpt}</p>
    </li>
  {/each}
</ul>
Enter fullscreen mode Exit fullscreen mode

Add the data loader in src/routes/blog/+page.js:

export async function load({ fetch }) {
  const res = await fetch('https://jsonplaceholder.typicode.com/posts?_limit=10');
  const posts = await res.json();
  return { posts };
}
Enter fullscreen mode Exit fullscreen mode

Optimizing for Performance

Svelte 5.0 and SvelteKit 2.0 have performance built in, but you can further optimize:

  • Use $derived for computed values to avoid unnecessary recalculations
  • Leverage SvelteKit's static site generation for content-heavy pages with export const prerender = true
  • Minimize client-side JavaScript by using server-side rendering (SSR) for initial page loads
  • Use the @sveltejs/kit image plugin to auto-optimize images

Deployment

Build your app for production with npm run build. SvelteKit supports deployment to any Node.js server, Vercel, Netlify, Cloudflare Pages, and more. For static sites, set adapter: adapterStatic in svelte.config.js before building.

Conclusion

Svelte 5.0 and SvelteKit 2.0 combine to offer a powerful, lightweight framework for building fast web apps with minimal boilerplate. The new runes syntax simplifies reactivity, while SvelteKit's enhanced tooling streamlines development and deployment. Try migrating an existing project or starting a new one to experience the performance gains firsthand.

Top comments (0)