Adapter for SvelteKit apps that generates a standalone Node server.
Install with npm i -D @sveltejs/adapter-node@next
, then add the adapter to your svelte.config.js
:
// svelte.config.js
import adapter from '@sveltejs/adapter-node';
export default {
kit: {
adapter: adapter({
// default options are shown
out: 'build',
precompress: false,
env: {
host: 'HOST',
port: 'PORT'
}
})
}
};
The directory to build the server to. It defaults to build
— i.e. node build
would start the server locally after it has been created.
Enables precompressing using gzip and brotli for assets and prerendered pages. It defaults to false
.
By default, the server will accept connections on 0.0.0.0
using port 3000. These can be customised with the PORT
and HOST
environment variables:
HOST=127.0.0.1 PORT=4000 node build
You can specify different environment variables if necessary using the env
option:
env: {
host: 'MY_HOST_VARIABLE',
port: 'MY_PORT_VARIABLE'
}
MY_HOST_VARIABLE=127.0.0.1 MY_PORT_VARIABLE=4000 node build
The adapter creates two files in your build directory — index.js
and handler.js
. Running index.js
— e.g. node build
, if you use the default build directory — will start a server on the configured port.
Alternatively, you can import the handler.js
file, which exports a handler suitable for use with Express, Connect or Polka (or even just the built-in http.createServer
) and set up your own server:
// my-server.js
import { handler } from './build/handler.js';
import express from 'express';
const app = express();
// add a route that lives separately from the SvelteKit app
app.get('/healthcheck', (req, res) => {
res.end('ok');
});
// let SvelteKit handle everything else, including serving prerendered pages and static assets
app.use(handler);
app.listen(3000, () => {
console.log('listening on port 3000');
});
You will need the output directory (build
by default), the project's package.json
, and the production dependencies in node_modules
to run the application. Production dependencies can be generated with npm ci --prod
, you can also skip this step if your app doesn't have any dependencies. You can then start your app with
node build