| 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
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 };
});
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