
sveltekit-builder
by bfmcneill
SKILL.md
name: sveltekit-builder description: Use when building SvelteKit apps with Svelte 5. Covers runes, SSR, forms, and stack patterns (Kysely, Better Auth, shadcn-svelte). license: MIT metadata: author: rosa version: "1.0"
SvelteKit Builder
Expert guidance for building production-ready SvelteKit applications with Svelte 5 runes, remote functions, and modern best practices.
When to Use This Skill
Use this skill when:
- Scaffolding new SvelteKit projects with Svelte 5
- Migrating from Svelte 4 to Svelte 5 (reactivity model changed fundamentally)
- Implementing remote functions (SvelteKit's type-safe server functions)
- Optimizing performance (bundle size, SSR, hydration, rendering)
- Applying security patterns (XSS prevention, input validation, secret management)
- Integrating recommended stack (Kysely, Better Auth, shadcn-svelte, Lucide, AI SDK)
- Code reviews where Svelte/SvelteKit patterns need validation
- Debugging reactivity issues or SSR hydration mismatches
Knowledge Base Structure
This skill contains 105+ best practice rules organized by impact and category:
Svelte 5 Specific (svelte5/) - 66 rules
CRITICAL Impact:
- Reactivity (
reactivity-*): $state, $derived, $effect - The foundation changed completely from Svelte 4 - Remote Functions (
remote-*): Type-safe server functions in .remote.ts files - Security (
template-html-*): XSS prevention with {@html} - Async & Data Fetching (
async-*): Waterfalls, {#await}, svelte:boundary
HIGH Impact:
- Component Patterns (
component-*): $props, callbacks, snippets (not slots anymore) - SSR & Hydration (
ssr-*): Server rendering, hydration mismatches - SvelteKit Patterns (
sveltekit-*): Load functions, form actions, error handling - Actions (
actions-*): Reusable DOM behavior - Accessibility (
a11y-*): Compiler warnings
MEDIUM Impact:
- State Management (
state-*): Shared state, context, stores vs runes - Rendering Optimization (
rendering-*): Keyed {#each}, unnecessary reactivity - CSS & Styling (
css-*): Scoped styles, theming - Forms (
forms-*): Form handling patterns - Transitions & Animation (
transitions-*): Smooth animations - Events (
events-*): onclick vs on:click - Special Elements (
elements-*): svelte:head, svelte:window, svelte:body - Template Patterns (
template-*): {@const}, {#key}, {#if}
LOWER Impact:
- TypeScript (
typescript-*): Props interfaces, generics with snippets
Framework-Agnostic (general/) - 15 rules
HIGH Impact:
- Bundle Optimization (
bundle-*): Dynamic imports, tree-shaking, lazy loading - Security (
security-*): Input sanitization - Rendering Performance (
rendering-*): content-visibility, layout thrashing
LOWER Impact:
- JavaScript Performance (
js-*): Promise.all, Set/Map, debouncing
Third-Party Stack (third-party/) - 24+ rules
Opinionated patterns for the recommended SvelteKit stack:
- Kysely (
kysely/*): Type-safe SQL, connection pooling, transactions - Better Auth (
better-auth/*): Session management, route protection, OAuth - shadcn-svelte (
shadcn-svelte/*): Accessible components, dark mode, Superforms - Lucide Svelte (
lucide-svelte/*): Tree-shakeable icons - AI SDK (
ai-sdk/*): Streaming, tool validation, API key management
How to Use This Skill
1. Start with Critical Rules
When working on SvelteKit projects, always check CRITICAL impact rules first:
references/svelte5/reactivity-use-state-explicit.md
references/svelte5/remote-separate-files.md
references/svelte5/remote-validate-inputs.md
references/svelte5/template-html-xss.md
references/svelte5/sveltekit-parallel-load.md
These prevent silent bugs, security vulnerabilities, and performance issues.
2. Reference Rules by Category
When implementing specific features, consult the relevant category:
- Building a form? → Check
forms-*andremote-*(form actions) - Data fetching? → Check
async-*andsveltekit-*(load functions) - Component communication? → Check
component-*($props, callbacks, snippets) - Performance issues? → Check
bundle-*,rendering-*, andasync-parallel-fetching - Hydration errors? → Check
ssr-*rules
3. Use the Sections Guide
Refer to references/_sections.md for:
- Complete category breakdown
- Impact levels for each prefix
- Rule counts per category
- Comparison with React patterns (for developers migrating)
4. Follow Rule Format
Each rule file contains:
- Impact level and description
- Explanation of why it matters
- Incorrect example showing the anti-pattern
- Correct example showing the best practice
- Reference links to official documentation
Key Principles
Svelte 5 Migration Critical Points
Reactivity is no longer automatic:
- Svelte 4:
let count = 0;was reactive - Svelte 5: Must use
let count = $state(0);explicitly
No more createEventDispatcher:
- Svelte 4:
dispatch('change', value) - Svelte 5: Pass callbacks as props
Slots are now snippets:
- Svelte 4:
<slot name="header" /> - Svelte 5:
{@render header()}
Effects need cleanup:
- Always return cleanup functions from
$effectto prevent memory leaks
Remote Functions (SvelteKit's Server Functions)
Remote functions are SvelteKit's type-safe server functions (similar to React Server Actions):
- Always use
.remote.tsfiles - Never colocate with client code - Validate inputs with Zod - Prevent injection attacks
- Use
query()for reads - Automatically cached - Use
form()for mutations - Progressive enhancement withuse:enhance - Batch queries - Avoid N+1 problems
Performance Priorities
- Bundle size - Dynamic imports, tree-shaking (HIGH impact on TTI)
- Parallel data fetching - Use Promise.all in load functions (CRITICAL)
- SSR optimization - Avoid hydration mismatches, use hydratable()
- Strategic boundaries - Place {#await} and svelte:boundary wisely
Common Patterns
Data Fetching Pattern
<script lang="ts">
import { getUsers, createUser } from './users.remote.ts';
// query() returns a promise - use with {#await}
const users = getUsers();
</script>
{#await users}
<p>Loading...</p>
{:then items}
{#each items as user (user.id)}
<p>{user.name}</p>
{/each}
{:catch error}
<p>Error: {error.message}</p>
{/await}
Form with Progressive Enhancement
<script lang="ts">
import { createUser } from './users.remote.ts';
</script>
<form {...createUser}>
<input name="name" required />
<input name="email" type="email" required />
<button>Create User</button>
</form>
Component with Props
<script lang="ts">
interface Props {
title: string;
count?: number;
onUpdate?: (value: number) => void;
}
let { title, count = 0, onUpdate }: Props = $props();
let localCount = $state(count);
function increment() {
localCount++;
onUpdate?.(localCount);
}
</script>
<h2>{title}</h2>
<button onclick={increment}>Count: {localCount}</button>
Reference Files
All rules are in the references/ directory:
references/_sections.md- Complete category breakdown and comparison tablesreferences/_template.md- Template for creating new rulesreferences/svelte5/*.md- 66 Svelte 5 and SvelteKit rulesreferences/general/*.md- 15 framework-agnostic rulesreferences/third-party/*/- 24+ rules for Kysely, Better Auth, shadcn-svelte, Lucide, AI SDK
When NOT to Use Stores
Svelte 5 runes ($state, $derived, $effect) should be preferred over stores for most use cases:
Use runes when:
- Component-local state
- Derived computations
- Simple shared state in
.svelte.jsfiles
Use stores when:
- Interoperating with Svelte 4 libraries
- Need subscribe/unsubscribe lifecycle
- Complex pub/sub patterns
See references/svelte5/state-stores-vs-runes.md for details.
Integration with Third-Party Libraries
This skill includes opinionated guidance for the recommended SvelteKit stack. When using these libraries, consult the relevant third-party rules:
- Database queries →
references/third-party/kysely/ - Authentication →
references/third-party/better-auth/ - UI components →
references/third-party/shadcn-svelte/ - Icons →
references/third-party/lucide-svelte/ - AI/LLM features →
references/third-party/ai-sdk/
Progressive Disclosure
This SKILL.md provides high-level guidance. Reference individual rule files for:
- Detailed explanations
- Code examples (Incorrect vs Correct)
- Impact descriptions
- Official documentation links
Agents should load reference files on-demand based on the specific task at hand, keeping context efficient.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon