🍡 mochi
SSR framework for Svelte 5 + Bun with islands-based selective hydration
Middleware (hooks)
Middleware uses SvelteKit-style Handle functions. Compose multiple handlers with sequence():
import { sequence } from './mochi-framework/hooks';
import type { Handle } from './mochi-framework/hooks';
const auth: Handle = async ({ event, resolve }) => {
if (!event.request.headers.get('Authorization')) {
return new Response('Unauthorized', { status: 401 });
}
return resolve(event);
};
const logging: Handle = async ({ event, resolve }) => {
console.log('→', event.url.pathname);
const response = await resolve(event);
console.log('←', response.status);
return response;
};
await Mochi.serve({
handle: sequence(auth, logging),
routes,
});event.locals is a per-request object for passing data between middleware layers.
resolve() accepts options for post-processing:
transformPageChunk({ html })— transform the HTML response before sendingfilterResponseHeaders(name, value)— filter which headers are included