Adapters change everything about hosting SvelteKit
The single most important concept for hosting SvelteKit is the adapter. SvelteKit doesn't assume a deployment target — you pick an adapter that compiles your app for a specific environment:
adapter-static— prerender everything to plain HTML/CSS/JS. No server. Deploy to any static host or CDN.adapter-node— output a standalone Node server. Run it like any container app.adapter-auto/ platform adapters — target serverless/edge runtimes on specific hosts.
Your hosting decision and your adapter choice are the *same decision*. Get this right and everything else is easy.
// svelte.config.js — Node target
import adapter from '@sveltejs/adapter-node';
export default { kit: { adapter: adapter() } };Static vs. server: which do you need?
| You need... | Adapter | Hosting style |
|---|---|---|
| Marketing site, blog, docs (no per-user server logic) | adapter-static | Static/CDN |
| Server-side rendering, form actions, API routes, auth | adapter-node | Container / Node host |
| Edge-rendered, globally distributed | platform/edge adapter | Edge runtime |
A lot of SvelteKit apps that *could* be static end up needing adapter-node the moment they add form actions, server-only data loading, or session auth. Don't fight it — if you have server logic, run a server.
The platforms
Vercel and Netlify
The most frictionless for SvelteKit — first-class adapters, preview deploys on every PR, and excellent CDN. If your app fits their serverless/edge model, they're hard to beat for DX. The trade-off is you're targeting their runtime, and complex server needs (long-running connections, background work) push against the serverless model.
Cloudflare Pages
Great for edge-first SvelteKit with the Cloudflare adapter. Fast globally, generous limits, and tight integration with Workers/KV/D1 if you go all-in on Cloudflare's stack.
Node container hosts (Fly, Render, Railway, PandaStack)
If you use adapter-node, SvelteKit becomes "a Node server in a container," and any container host runs it. This is the most portable path — no vendor-specific adapter, no serverless constraints.
PandaStack
Disclosure: my platform. PandaStack handles *both* SvelteKit modes cleanly, which is the nice part:
- Static SvelteKit (
adapter-static): deployed as a static site. PandaStack builds static sites in microVMs and serves them via CDN with automatic SSL. - Node SvelteKit (
adapter-node): deployed as a container web service.
# adapter-node output
FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
CMD ["node", "build"]Framework auto-detection picks up Vite/SvelteKit; the install command is overridable (npm/yarn/pnpm/bun). Need a backend database for your form actions? Add managed Postgres/MySQL/Mongo/Redis and DATABASE_URL is injected. Static sites are unlimited on Pro/Premium tiers.
Honest limits: PandaStack doesn't ship a SvelteKit-specific serverless/edge adapter — for the Node path you deploy the Node output as a container, and for static you deploy the prerendered output. If you specifically want per-route edge functions everywhere, Cloudflare's adapter is more specialized today. Free-tier container apps cold-start on preemptible nodes.
Build configuration gotchas
- Set the right adapter before you choose a host, or you'll get a build that doesn't match the runtime.
adapter-staticrequires every route to be prerenderable — a single dynamic server route breaks the build. Addexport const prerender = truethoughtfully.- For
adapter-node, the output is inbuild/and you start it withnode build— setPORTvia env. - Use environment variables via
$env/static/privateand$env/dynamic/privatecorrectly; static ones are baked at build time.
References
- [SvelteKit adapters](https://svelte.dev/docs/kit/adapters)
- [adapter-node docs](https://svelte.dev/docs/kit/adapter-node)
- [adapter-static docs](https://svelte.dev/docs/kit/adapter-static)
- [Cloudflare Pages SvelteKit](https://developers.cloudflare.com/pages/framework-guides/deploy-a-svelte-kit-site/)
- [Vite production build](https://vitejs.dev/guide/build.html)
---
Whether your SvelteKit app is static or a Node server, PandaStack's free tier handles both — plus an auto-wired database for your server routes. Deploy at [dashboard.pandastack.io](https://dashboard.pandastack.io).