Real-time Chat
An example of building a simple in-memory chat using a hydrated island and the built-in WebSocket support in Bun. The server stores a bounded message history and replays it to new connections; ws.publish() broadcasts each message to all clients. Messages over 4 KB are rejected, frames over 8 KB are dropped by Bun before they are buffered, and a per-client window closes anyone sending more than 20 messages per 10 seconds. Open this page in two tabs to see them sync in real time.
Chat
<script>
import ChatWidget from './ChatWidget.svelte';
</script>
<ChatWidget mochi:hydrate />
More demos
Data Loading How server-side data loading works — fetch on the server, cache with MochiCache, and render at request time. Request ID How request IDs work — every request gets a UUID v7 on getRequestContext().requestId that rides every lifecycle event for correlation. Send Email How sending email works — dispatch through Mochi.email() and read it back in the /_mochi/email dev outbox.