Agent Skills: SvelteKit Remote Functions

SvelteKit remote functions guidance. Use for command(), query(), form() patterns in .remote.ts files.

UncategorizedID: spences10/svelte-skills-kit/sveltekit-remote-functions

Install this agent skill to your local

pnpm dlx add-skill https://github.com/spences10/svelte-skills-kit/tree/HEAD/plugins/svelte-skills/skills/sveltekit-remote-functions

Skill Files

Browse the full folder contents for sveltekit-remote-functions.

Download Skill

Loading file tree…

plugins/svelte-skills/skills/sveltekit-remote-functions/SKILL.md

Skill Metadata

Name
sveltekit-remote-functions
Description
SvelteKit remote functions guidance. Use for command(), query(), form() patterns in .remote.ts files.

SvelteKit Remote Functions

Quick Start

File naming: *.remote.ts for remote function files

Which function? One-time action → command() | Repeated reads → query() | Forms → form()

Example

// actions.remote.ts
import { command } from "$app/server";
import * as v from "valibot";

export const delete_user = command(
  v.object({ id: v.string() }),
  async ({ id }) => {
    await db.users.delete(id);
    return { success: true };
  },
);

// Call from client: await delete_user({ id: '123' });

Reference Files

Notes

  • Remote functions execute on server when called from browser
  • Args/returns must be JSON-serializable
  • Schema validation via StandardSchemaV1 (Valibot/Zod)
  • getRequestEvent() available for cookies/headers access
  • In components: No-param query() works with {#await}. Parameterized queries with $derived return Query objects — use .ready/.current or $derived(await ...) with experimental async
  • Warning: <svelte:boundary> + {@const await} causes infinite navigation loops with shared queries (sveltejs/svelte#17717)
  • Refresh queries: Call query().refresh() - updates without flicker
  • Polling safety: Always .catch() on query().refresh() in intervals — errors reject the Promise and evict the query from cache
  • Last verified: 2026-02-21
<!-- PROGRESSIVE DISCLOSURE GUIDELINES: - Keep this file ~50 lines total (max ~150 lines) - Use 1-2 code blocks only (recommend 1) - Keep description <200 chars for Level 1 efficiency - Move detailed docs to references/ for Level 3 loading - This is Level 2 - quick reference ONLY, not a manual LLM WORKFLOW (when editing this file): 1. Write/edit SKILL.md 2. Format (if formatter available) 3. Run: claude-skills-cli validate <path> 4. If multi-line description warning: run claude-skills-cli doctor <path> 5. Validate again to confirm -->