With svelte
Claude Code skills for SvelteKit, canvas, drag-and-drop, and SVG animation
npx -y skills add robcsaszar/frontend-kit --skill with-svelteAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 26 days oldThe repository was created 26 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Modern Svelte 5 + SvelteKit guidance and routing. Use whenever creating, editing, reviewing, or debugging a Svelte component (.svelte) or module (.svelte.ts/.svelte.js), or any SvelteKit project. Covers runes ($state, $derived, $effect, $props, $bindable), template directives ({@attach}, {@render}, {@html}, snippets, keyed each), components (Bits UI, web components, forms), SvelteKit routing/layouts/error boundaries, data flow (load functions, form actions, +page.server.ts vs +page.ts, serialization, invalidateAll), remote functions (query/form/command/prerender in .remote.ts), deployment (adapters, Vite, pnpm, PWA, Cloudflare), and the @sveltejs/mcp CLI. Triggers are Svelte, SvelteKit, runes, .svelte, .remote.ts, +page, load function, form action.
SKILL.md
5.3 KB, as published. Nobody here has run it
with-svelte
Unified Svelte 5 + SvelteKit skill. This body is a router: apply the always-on core below, then READ the one reference file that matches the task before writing code. Load only the file(s) you need — not all of them.
Always-on core (every Svelte task)
Write runes-mode Svelte 5. Never reach for a legacy feature that has a modern replacement:
$stateinstead of implicitlet count = 0; count += 1$derived/$effectinstead of$:— and prefer$derivedover$effect(effects are an escape hatch; never set state inside one)$propsinstead ofexport let,$$props,$$restPropsonclick={...}instead ofon:click={...}{#snippet}/{@render}instead of<slot>,$$slots,<svelte:fragment>{@attach ...}instead ofuse:action<DynamicComponent>instead of<svelte:component this={...}>;import Selfinstead of<svelte:self>- classes with
$statefields instead of stores;createContextinstead ofsetContext/getContext - clsx-style class arrays/objects instead of the
class:directive - keyed
{#each}— never use the index as the key
When unsure of current syntax, do not guess — confirm via the @sveltejs/mcp CLI (see references/tooling.md) and run svelte-autofixer before finalizing any component.
Routing table — READ the matching reference before writing
| Task involves… | MANDATORY READ |
|---|---|
Reactive state, props, effects, $state/$derived/$effect/$props/$bindable, Svelte 4→5 migration, $inspect, await-in-component | references/runes-reactivity.md |
{@attach} / use: actions, {@html}, {@render}, {@const}, {@debug}, snippets, keyed each, bind:, <svelte:window> | references/template-directives.md |
| Component libraries (Bits/Ark/Melt UI), web components, forms, styling child components, CSS-from-JS, context | references/components.md |
Routing, file naming (+page/+layout/+error/+server), nested layouts, route groups, error boundaries, <svelte:boundary>, SSR/hydration | references/sveltekit-structure.md |
load functions, +page.server.ts vs +page.ts vs +server.ts, form actions, fail()/redirect()/error(), serialization, invalidateAll() | references/sveltekit-data-flow.md |
Remote functions: query()/form()/command()/prerender() in *.remote.ts, schema validation, .updates() | references/sveltekit-remote-functions.md |
| Adapters, Vite/pnpm setup, PWA, library authoring, Cloudflare/streaming, production build | references/deployment.md |
| Confirming syntax, looking up docs, validating/fixing code | references/tooling.md |
If a task spans areas (e.g. a form that uses runes + a server action), read each matching file. Do not load files outside the task's scope. If no reference covers the case, fetch authoritative docs via references/tooling.md rather than guessing.
NEVER
-
NEVER set
$stateinside an$effectto compute a value Instead: use$derived(or$derived.byfor complex expressions). Why: effect-driven assignment creates extra render passes and update loops;$derivedis glitch-free and runs lazily. -
NEVER guard effect/lifecycle code with
if (browser) {...}to make it server-safe Instead: effects already don't run on the server; for global listeners use<svelte:window>/<svelte:document>, and for browser-only setup use the right reference's SSR guidance. Why: the guard is dead code inside an effect and signals a misunderstanding that hides real hydration bugs. -
NEVER return non-serializable values (class instances, functions, symbols) from a SvelteKit
loador remote function Instead: return plain JSON-serializable data; seereferences/sveltekit-data-flow.md/references/sveltekit-remote-functions.md. Why: load uses JSON and remote functions usedevalue; non-serializable returns fail silently or at runtime across the server→client boundary. -
NEVER call
redirect()/error()in SvelteKit withoutthrow-ing them Instead:throw redirect(303, '/path')/throw error(404). Why: withoutthrowexecution continues and the navigation/error never happens. -
NEVER guess current Svelte/SvelteKit API surface from memory for unfamiliar features Instead: run
npx @sveltejs/mcp list-sections+get-documentation, thensvelte-autofixer(seereferences/tooling.md). Why: runes, remote functions, and async Svelte change fast and are version-gated; stale syntax compiles to subtly wrong behavior.