A SvelteKit adapter that outputs a Web-standard handler(req, info) function
compatible with @marianmeres/demino and
any Deno.ServeHandler-based server.
Install the adapter as an npm dev dependency in your SvelteKit project:
npm install -D @marianmeres/sveltekit-adapter-demino
The adapter runs at build time inside Vite/Node.js. It is not installed via
deno add— Deno only runs the generatedhandler.jsat serve time.
// svelte.config.js
import adapter from '@marianmeres/sveltekit-adapter-demino';
export default {
kit: {
adapter: adapter({
out: 'build', // default
}),
},
};
vite build
Output structure:
build/
├── handler.js <- import this in your Deno server
├── client/ <- static assets + prerendered HTML (served automatically)
└── server/ <- SvelteKit SSR runtime (used internally by handler.js)
import { demino, deminoCompose } from 'jsr:@marianmeres/demino';
import { handler as skHandler } from './build/handler.js';
const api = demino('/api');
api.get('/hello', () => ({ hello: 'world' }));
// SvelteKit handles everything that the API doesn't
const sk = demino();
sk.all('/*', skHandler);
Deno.serve(deminoCompose([api, sk]));
Or if SvelteKit is your only app:
import { handler } from './build/handler.js';
Deno.serve(handler);
The generated handler.js:
Prerendered redirects -- handles trailing-slash normalization (308 redirects)
for prerendered pages, based on your SvelteKit trailingSlash config.
Static files & prerendered HTML -- served from build/client/ using
@std/http/file-server's serveDir. This covers everything in your
static/ folder, compiled JS/CSS (/_app/...), and prerendered pages.
Immutable assets (/_app/immutable/*) are served with
Cache-Control: public, immutable, max-age=31536000.
Everything else -- forwarded to SvelteKit's SSR engine via
server.respond(). This handles server routes, SSR pages, and API
endpoints defined inside your SvelteKit app.
Asset reading -- the handler provides a read() function to
SvelteKit's server, enabling import { read } from '$app/server'
for runtime asset access.
--allow-net, --allow-read, --allow-envplatform object available in SvelteKit hooks/endpoints will contain
{ info: Deno.ServeHandlerInfo }, giving you access to remoteAddr etc.handler.js runs in Deno at serve time.deno.json needs to map @sveltejs/kit as an npm import
(the SvelteKit server bundle references it at runtime):{
"imports": {
"@sveltejs/kit": "npm:@sveltejs/kit@^2.0.0",
"@sveltejs/kit/internal": "npm:@sveltejs/kit/internal",
"@sveltejs/kit/internal/server": "npm:@sveltejs/kit/internal/server"
}
}