🍡 mochi

SSR framework for Svelte 5 + Bun with islands-based selective hydration

Defining routes

Routes map URL paths to page entries, API handlers, WebSocket endpoints, or SSE streams:

import { Mochi } from './mochi-framework/Mochi';

const routes = {
  '/': Mochi.page('./src/Home.svelte'),
  '/about': Mochi.page('./src/About.svelte', { serverProps: { title: 'About' } }),
  '/health': Mochi.api(({ method }) => Response.json({ status: 'ok' })),
  '/ws/chat': Mochi.ws({
    message(ws, msg) {
      ws.send(msg);
    },
  }),
  '/sse/time': Mochi.sse((stream) => {
    stream.send('hello');
  }),
};

await Mochi.serve({
  port: 3333,
  development: process.env.MODE === 'development',
  routes,
});