ai-infrastructure-hugg…
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming,…
Svelte 5 runes — $state, $derived, $effect, $props, $bindable, snippets, callback props, context. Load when writing Svelte 5 components or reactive modules.
Claude Code
$ npx -y skills add agents-inc/skills --skill web-framework-svelte --agent claude-code
Codex
$ npx skills add agents-inc/skills --skill web-framework-svelte -a codex -y
Cursor
$ npx skills add agents-inc/skills --skill web-framework-svelte -a cursor -y
Gemini CLI
$ npx skills add agents-inc/skills --skill web-framework-svelte -a gemini-cli -y
GitHub Copilot
$ npx skills add agents-inc/skills --skill web-framework-svelte -a github-copilot -y
OpenCode
$ npx skills add agents-inc/skills --skill web-framework-svelte -a opencode -y
Windsurf
$ npx skills add agents-inc/skills --skill web-framework-svelte -a windsurf -y
name: web-framework-svelte description: Svelte 5 runes — $state, $derived, $effect, $props, $bindable, snippets, callback props, context. Load when writing Svelte 5 components or reactive modules.
> **Quick Guide:** Runes make reactivity explicit and portable out of `.svelte` files. `$state` for values that change, `$derived` for everything computed from them, `$effect` only for reaching outside the component. Snippets replace slots, callback props replace `createEventDispatcher`, and `onclick` replaces `on:click`. The Svelte 4 forms still compile, so nothing flags them.
**Detailed Resources:**
---
---
<critical_requirements>
**Declare changing values with `$state` and compute from them with `$derived`.** A `$derived` recomputes lazily and cannot fall out of step; the same value maintained by an `$effect` updates after the DOM has already painted the old one.
**Pass composable markup as snippets — `{#snippet}` declares it, `{@render}` renders it.** Snippets are typed, take parameters, and can be passed as props; `<slot>` did none of that.
**Let a child notify its parent through a callback prop — `onsave`, `onselect`.** The signature is checked at the call site, where a dispatched event's payload was not.
**Reach for `$state.raw()` when a value is replaced wholesale rather than mutated.** It skips the deep proxy, which is the whole cost on a large array that only ever gets reassigned.
**Reach for `createContext<T>()` over `setContext`/`getContext`.** It hands back a typed `[get, set]` pair with the key minted for you, so no consumer casts and no two libraries collide on a string key — [examples/advanced.md](examples/advanced.md) has it.
</critical_requirements>
---
**Auto-detection:** Svelte 5, runes, $state, $derived, $effect, $props, $bindable, $inspect, .svelte, .svelte.ts, {#snippet}, {@render}, Snippet, createContext, setContext, getContext, $state.raw, $state.snapshot, $state.eager, $derived.by, $effect.pre, ClassValue
**Applies to:**
**Handled elsewhere:**
---
<philosophy>
Svelte 4 inferred reactivity from position: a `let` at the top level of a component was reactive, `$:` re-ran on assignment, and neither meant anything in a `.ts` file. Runes replace that with a marker on the value itself, so the same declaration behaves identically in a component, a module and a class field.
The ordering that follows is: `$derived` for anything computable, an event handler for anything a user triggers, and `$effect` only for what is genuinely outside the component — a canvas, a third-party widget, a subscription. An `$effect` that assigns to `$state` is a `$derived` written the long way round, and it runs after the DOM update rather than before it.
</philosophy>
---
<patterns>
`$state` makes a value reactive and, for objects and arrays, deeply so — `push` and property assignment are both tracked, with no immutable update dance.
<script lang="ts">
let count = $state(0);
let todos = $state<Todo[]>([]);
function addTodo(text: string) {
todos.push({ done: false, text });
}
</script>Full code: [examples/core.md](examples/core.md)
---
`$derived` takes an expression, `$derived.by` a function for anything longer. Both recompute only when a dependency actually changed.
<script lang="ts">
let doubled = $derived(count * 2);
let stats = $derived.by(() => ({
isEven: count % 2 === 0,
isPositive: count > 0,
}));
</script>Full code: [examples/core.md](examples/core.md)
---
Props are destructured out of `$props()` with defaults and rest, and typed by an interface.
<script lang="ts">
interface Props {
name: string;
role?: string;
class?: string;
}
let { name, role = 'member', ...rest }: Props = $props();
let initials = $derived(name.split(' ').map((n) => n[0]).join(''));
</script>Destructuring `$props()` is the one place it is safe — the compiler keeps the bindings live. Destructuring a `$state` object does not.
Full code: [examples/core.md](examples/core.md)
---
`$bindable` marks a prop the child may write back through `bind:`. Worth it
The official skills marketplace for Agents Inc. 230+ skills covering everything from React and Prisma to Redis, ElevenLabs, and infrastructure tooling. Pick the skills that match your stack and install them via Claude Code. Need more control?
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming,…
LiteLLM proxy server setup, TypeScript client patterns via OpenAI SDK, model routing, fallbacks, load balancing, spend tracking,…
Serverless GPU compute platform for AI model deployment — web endpoints, GPU functions, model serving, and TypeScript client…
Local LLM inference with the Ollama JavaScript client -- chat, streaming, tool calling, vision, embeddings, structured output,…
Replicate SDK patterns for TypeScript/Node.js -- client setup, predictions, streaming, webhooks, file handling, model versioning,…
Together AI SDK patterns for TypeScript — client setup, chat completions, streaming, structured output, function calling,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.