Svelte Kit Adapter
Svelte Kit is a framework for rapidly developing robust, performant web applications using Svelte. For additional context, refer to the HTTP Adapter guide.
Server
ts
import { error } from '@sveltejs/kit'
import { RPCHandler } from '@orpc/server/fetch'
const handler = new RPCHandler(router)
const handle: RequestHandler = async ({ request }) => {
const { response } = await handler.handle(request, {
prefix: '/rpc',
context: {} // Provide initial context if needed
})
return response ?? new Response('Not Found', { status: 404 })
}
export const GET = handle
export const POST = handle
export const PUT = handle
export const PATCH = handle
export const DELETE = handle
INFO
The handler
can be any supported oRPC handler, such as RPCHandler, OpenAPIHandler, or another custom handler.
Optimize SSR
To reduce HTTP requests and improve latency during SSR, you can utilize Svelte's special fetch
during SSR. Below is a quick setup, see Optimize SSR for more details.
ts
import type { RouterClient } from '@orpc/server'
import { RPCLink } from '@orpc/client/fetch'
import { createORPCClient } from '@orpc/client'
declare global {
var $client: RouterClient<typeof router> | undefined
}
const link = new RPCLink({
url: () => {
if (typeof window === 'undefined') {
throw new Error('This link is not allowed on the server side.')
}
return `${window.location.origin}/rpc`
},
})
export const client: RouterClient<typeof router> = globalThis.$client ?? createORPCClient(link)
ts
import type { RouterClient } from '@orpc/server'
import { createORPCClient } from '@orpc/client'
import { RPCLink } from '@orpc/client/fetch'
import { getRequestEvent } from '$app/server'
if (typeof window !== 'undefined') {
throw new Error('This file should only be imported on the server')
}
const link = new RPCLink({
url: async () => {
return `${getRequestEvent().url.origin}/rpc`
},
async fetch(request, init) {
return getRequestEvent().fetch(request, init)
},
})
const serverClient: RouterClient<typeof router> = createORPCClient(link)
globalThis.$client = serverClient
ts
import './lib/orpc.server'
// ...