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
- references/remote-functions.md - Complete guide with all patterns
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