Post

ogygia — SSR islands for SvelteKit. Plus lakes. No Kit patches. csr=false. Mark the interactive bits; the rest stays server HTML. Runtime ≈ 7.6 KB min+brotli (CE + optional SPA router). 🏝️ Client islands · 🛰️ Server islands · 🌊 Lakes · 🔌 Remotes & forms · 🧭 SPA router ogygia.puruvj.dev

1 repost21 likes

🏝️ Client islands Static hydrate / preset. JS when you say so: • load — on connect • idle — requestIdleCallback • visible — IntersectionObserver • media — e.g. mobile-only drawers Props via devalue. Nesting works.

🛰️ Server islands defer = fallback HTML, then a signed fetch for real markup. Component JS never ships. Same schedules: load (w/ preload), idle, visible, media. Cookie-aware — the hole sees a real request.

🌊 Lakes hydrate: 'none' freezes a subtree inside an island. Markup stays; that subtree’s JS never ships. Remount: cache, empty, or SWR. An island inside a lake wakes up again.

🔌 Data stays Kit • +page.server props → islands (devalue) • classic form actions — zero JS • remotes: query, command, query.live, query.batch, form() Real Kit wire codec — not a reimplementation.