Build-Modi & Adapter
Wie aus deinem Code eine lauffähige App wird — und welche Rendering-Strategie wann passt.
Adapter: das Ziel bestimmen
SvelteKit selbst ist plattformunabhängig. Ein Adapter übersetzt deinen Code beim Build in etwas Lauffähiges für eine konkrete Umgebung: einen Node-Server, ein serverloses Deployment (Vercel/Netlify) oder rein statische Dateien.
Für Self-Hosting (Docker, Coolify) ist @sveltejs/adapter-node die richtige Wahl —
er erzeugt einen eigenständigen Node-Server im Ordner build/:
// vite.config.ts (dieses Projekt nutzt adapter-node)
import adapter from '@sveltejs/adapter-node';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit({ adapter: adapter() })]
});npm run build # erzeugt build/ (adapter-node)
node build # startet den Produktionsserverℹ️ adapter-auto vs. fester Adapter
Neue Projekte starten oft mit adapter-auto (errät die Plattform). Für ein
vorhersehbares Docker-Deployment setzt man bewusst adapter-node — so baust du
lokal exakt das, was später im Container läuft.
SSR, CSR & Prerendering
- SSR (Standard): Server rendert HTML pro Request, Client übernimmt (Hydration).
- Prerendering: Seite wird zur Build-Zeit einmal zu statischem HTML gerendert — ideal für Inhalte, die sich nicht pro Nutzer ändern.
- CSR/SPA: kein Server-Rendering, alles im Browser.
Du steuerst das pro Route über Seitenoptionen:
// In einer +page.ts / +page.server.ts / +layout.ts:
export const prerender = true; // zur Build-Zeit zu statischem HTML rendern
export const ssr = false; // kein Server-Rendering → reine Client-Seite (SPA)
export const csr = false; // kein Client-JS → statisches HTML, keine Interaktivität🛤️ Rails-Vergleich: Rendering-Strategien
Server-gerendertes ERB entspricht dem SSR-Standard, assets:precompile/statische
Seiten dem Prerendering, und ein API-only-Rails mit separatem JS-Frontend dem SPA-Modus.
# Rails: unterschiedliche "Modi"
# - Server-gerendert (ERB) ≈ SSR (Standard)
# - assets:precompile / statisch ≈ prerender
# - API-only + JS-Frontend ≈ ssr:false (SPA)Wichtige Umgebungsvariablen (adapter-node)
💡 Zur Laufzeit gesetzt
PORT— Port des Servers (Standard 3000).HOST—0.0.0.0, damit der Container von außen erreichbar ist.ORIGIN— die öffentliche URL (z.B.https://svelte.apps.tomcodes.de); nötig, damit POST/Form-Actions den CSRF-Schutz bestehen.
Zusammenfassung
💡 Das Wichtigste
- Der Adapter bestimmt das Deploy-Ziel;
adapter-nodefür Docker/Coolify. - Rendering pro Route steuerbar:
prerender,ssr,csr. ORIGINin Produktion setzen, sonst schlagen Form Actions fehl.
🎯 Probier es selbst
Setze auf der Landingpage (src/routes/+page.svelte → lege ein +page.ts an) export const prerender = true; und baue neu. Sie wird
dann als statisches HTML erzeugt.