Skip to content

SvelteKit

SvelteKit is the primary framework for aibind and has the most complete integration.

Install

bash
pnpm add @aibind/sveltekit ai @openrouter/ai-sdk-provider

Setup

1. Define Models

ts
// src/models.server.ts
import { createOpenRouter } from "@openrouter/ai-sdk-provider";
import { defineModels } from "@aibind/sveltekit";

const openrouter = createOpenRouter({
  apiKey: process.env.OPENROUTER_API_KEY!,
});

export const models = defineModels({
  fast: openrouter("google/gemini-3.1-flash-lite-preview"),
  smart: openrouter("openai/gpt-5-mini"),
});

export type Models = typeof models.$infer;

2. Server Handler

ts
// src/hooks.server.ts
import { createStreamHandler } from "@aibind/sveltekit/server";
import { models } from "./models.server";

export const handle = createStreamHandler({
  models,
  resumable: true, // Enable durable streams
});

3. Streaming

svelte
<script lang="ts">
  import { Stream } from '@aibind/sveltekit';

  const stream = new Stream({
    model: 'fast',
    system: 'You are helpful.',
  });

  let prompt = $state('');
</script>

<form onsubmit={(e) => { e.preventDefault(); stream.send(prompt); prompt = ''; }}>
  <input bind:value={prompt} />
  <button disabled={stream.loading}>Send</button>
</form>

<p>{stream.text}</p>

4. Structured Output

svelte
<script lang="ts">
  import { StructuredStream } from '@aibind/sveltekit';
  import { z } from 'zod/v4';

  const schema = z.object({
    sentiment: z.enum(['positive', 'negative', 'neutral']),
    score: z.number(),
  });

  const analysis = new StructuredStream({ schema });
</script>

<button onclick={() => analysis.send('Analyze: Great product!')}>Analyze</button>

{#if analysis.partial}
  <p>Sentiment: {analysis.partial.sentiment}</p>
  <p>Score: {analysis.partial.score}</p>
{/if}

Reactivity Model

SvelteKit uses Svelte 5 runes ($state, $derived). All aibind classes expose reactive properties directly:

svelte
<!-- Direct property access — no .value or () needed -->
<p>{stream.text}</p>
<p>{stream.loading}</p>
<p>{chat.messages.length}</p>

Available Exports

Import PathWhat You Get
@aibind/sveltekitStream, StructuredStream, defineModels
@aibind/sveltekit/servercreateStreamHandler, ServerAgent
@aibind/sveltekit/agentuseAgent
@aibind/sveltekit/historyChatHistory, MessageTree
@aibind/sveltekit/markdownStreamMarkdown
@aibind/sveltekit/projectProject

Released under the MIT License.