In the browser
Svelte and SvelteKit
Draw the answer in onMount, with the core imported as a URL, in SvelteKit 3 or any Svelte 5 app.
npm install @morphscreen/webpnpm add @morphscreen/webyarn add @morphscreen/webbun add @morphscreen/webonMount runs in the browser only, so the core never loads on the server. Vite's ?url turns the package's morphscreen.wasm into an address it serves.
<script lang="ts">
import { onMount } from "svelte";
import { createAnswer, loadCore } from "@morphscreen/web";
import "@morphscreen/web/morphscreen.css";
import wasm from "@morphscreen/web/morphscreen.wasm?url";
import { SAMPLE } from "../lib/sample";
let el: HTMLElement;
// onMount runs in the browser only, so the core never loads on the server.
onMount(async () => {
const core = await loadCore(wasm);
const answer = createAnswer(el, { core });
// Your server's stream goes here; this feeds a saved answer in pieces.
for (let i = 0; i < SAMPLE.length; i += 24) {
answer.push(SAMPLE.slice(i, i + 24));
await new Promise((r) => setTimeout(r, 10));
}
answer.end();
document.body.dataset.done = "yes";
});
</script>
<div bind:this={el}></div>import adapter from "@sveltejs/adapter-static";
import { sveltekit } from "@sveltejs/kit/vite";
import { defineConfig } from "vite";
export default defineConfig({ plugins: [sveltekit({ adapter: adapter() })] });