Dev, compile, HMR
A working loop is three commands, and they are three commands because they are three different cells of work. drop-ws materializes the engine. compile prints IR into it. svelte-kit-d dev is the bun DX: it will drop if needed, compile, start Vite inside the workspace (HMR on :3001), and start vibe.0 on :8180 when svelte-engine-server exists. --no-host skips the last of those. The watcher reprints dirty kit files with compile --only.
bunx svelte-d drop-ws --force
bunx svelte-d compile --project .
bunx svelte-kit-d devHMR does not invent a second websocket. Vite already has one. svelte-d writes public/__svelte-d/hmr-tick when a reprint should reload, and the workspace Vite config watches that file. Incremental compile of an unchanged dest does not write the file. That is reprint-skip: the dest bytes are compared, and a match leaves the mtime alone so the opposite cell does not rebuild. A host-only edit does not relink wasm (opposite-cell-skip). The default no-LTO wasm cell can go further and ldc2 -c only dirty src-d into .svelte-d/o/ (incremental compile).
If Vite is “file in use” on Windows after a crash, drop with --force rather than deleting the workspace by hand. --force overlays template files and never removes svelte-engine-ws. Deleting the workspace by hand throws away customisations and node_modules; the next drop will recreate the folder, not your edits.
svelte-kit-d dev and bun run dev stay on debug wasm/host. bun run build / svelte-d build is release + strip. Do not ship the debug module: it is ~8× larger on the admin tree (sizes).