Welcome to a demo of the new Remote Functions in SvelteKit! This feature is currently experimental π§ͺ and provides a powerful way to colocate server logic directly with components using .remote.ts
files.
[!WARNING] Remote Functions are currently in experimental and not yet officially released in a stable version.
pnpm dlx gitpick https://github.com/devgauravjatt/svelte-remote-functions-example
cd svelte-remote-functions-example
pnpm i && pnpm dev
Remote Functions let you write server-only logic in .remote.ts
files and call them from your Svelte components as if they were regular functions. Depending on whether you're on the client or server, they either execute directly or automatically wrap a fetch()
request behind the scenes.
β¨ Highlights:
devalue
query
, form
, command
, and prerender
Explore the source code examples:
To enable Remote Functions in your project:
// svelte.config.js
const config = {
kit: {
experimental: {
remoteFunctions: true
}
},
compilerOptions: {
experimental: {
async: true
}
}
};
Then create a .remote.ts
file and use query
, form
, or command
from $app/server
.
Example:
// data.remote.ts
import { query, form } from '$app/server';
import * as db from '$lib/server/db';
export const getLikes = query(async (id: string) => {
const [row] = await db.sql`SELECT likes FROM item WHERE id = ${id}`;
return row.likes;
});
export const addLike = form(async (data: FormData) => {
const id = data.get('id');
await db.sql`UPDATE item SET likes = likes + 1 WHERE id = ${id}`;
return { success: true };
});
Got ideas, examples, or improvements? Open a PR or issue β letβs build this together! π
MIT Β© devgauravjatt and Joy of Code