Using Remote Functions
Remote Functions are a SvelteKit feature for type-safe client-server communication. They run on the server but can be called from any component.
Key Concepts
- •Component-level: Unlike load functions, Remote Functions work in any component
- •Type-safe: Full TypeScript support between client and server
- •Progressive enhancement: Forms work without JavaScript
- •Experimental: Requires config flags (see below)
Configuration
Add to svelte.config.js:
js
const config = {
kit: {
experimental: {
remoteFunctions: true
}
},
compilerOptions: {
experimental: {
async: true // Optional: enables await in components
}
}
}
Remote-First Architecture
Put as little as possible in +page.svelte, as much as possible in data.remote.ts.
Build final data structures server-side. Pages should be pure renderers that map types to components.
See REMOTE-FIRST.md for patterns and examples.
Four Types of Remote Functions
| Type | Purpose | Reference |
|---|---|---|
query | Read dynamic data | QUERY.md |
form | Handle form submissions | FORM.md |
command | Programmatic mutations, avoid if possible. Always prefer form | COMMAND.md |
prerender | Static data at build time | (not covered) |
Combining Functions
For refreshing queries after mutations, see SINGLE-FLIGHT.md.
Code Templates
For starter code blocks, see TEMPLATES.md.
When to Use Remote Functions vs Load Functions
Use Remote Functions when:
- •Data is needed at the component level, not page level
- •You want colocated data fetching with the component
- •Building reusable components with their own data needs
Use Load Functions when:
- •Never