К основному содержанию
скилл CX Codex

bun-sveltekit — скилл для Claude Code: SvelteKit на Bun

Подсказывает агенту, как собирать и запускать SvelteKit на Bun: SSR, адаптер, bun:sqlite и работа с файлами.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add secondsky/claude-skills --skill bun-sveltekit -a claude-code
Открыть на GitHub

Что делает bun-sveltekit

Скилл включается, когда вы пишете SvelteKit-приложение и хотите вести его на Bun. Внутри — готовые шаблоны: +page.server.ts с bun:sqlite, form actions, API-роуты на Bun.file и Bun.write, серверные хуки с инициализацией базы при старте.

Отдельный блок про адаптер svelte-adapter-bun и его опции: out, precompress, envPrefix, dynamic_origin, xff_depth. Есть раздел про переменные окружения через $env/static/private и $env/dynamic/private, а также Docker-сборка на образе oven/bun:1.

Скилл советует ставить minimumReleaseAge в bunfig.toml и проверять пакеты через Socket CLI перед установкой. Причина простая: bunx sv create тянет и выполняет удалённый код, а Bun по умолчанию блокирует post-install скрипты — разрешать их нужно вручную через trustedDependencies.

Какие задачи решает

  • поднять SvelteKit-проект на Bun с нуля
  • подключить bun:sqlite в серверных load-функциях
  • настроить svelte-adapter-bun вместо adapter-auto
  • отдавать и сохранять файлы через Bun.file и Bun.write
  • собрать Docker-образ для Bun-приложения

Примеры запросов агенту

  • Создай SvelteKit-проект на Bun и подключи svelte-adapter-bun
  • Перепиши этот API-роут на bun:sqlite вместо внешней базы
  • Настрой серверный хук с инициализацией таблицы users

Как установить bun-sveltekit

1Через Skills CLI (Vercel)

npx skills add secondsky/claude-skills --skill bun-sveltekit -a claude-code

2Вручную: положить файлы

~/.claude/skills/bun-sveltekit/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/bun-sveltekit/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о bun-sveltekit

Как установить bun-sveltekit в Claude?

Выполните npx skills add secondsky/claude-skills --skill bun-sveltekit -a claude-code. Скилл окажется в ~/.claude/skills/bun-sveltekit/SKILL.md.

Что делает bun-sveltekit?

Даёт агенту шаблоны для SvelteKit на Bun: SSR, form actions, API-роуты, серверные хуки, адаптер и деплой. Агент опирается на них, когда вы просите написать или поправить код.

Что нужно учесть перед установкой зависимостей?

Скилл советует настроить minimumReleaseAge в bunfig.toml и проверять пакеты через Socket CLI. bunx sv create скачивает и запускает удалённый код, поэтому лишние post-install скрипты лучше не разрешать.

Исходный текст

SKILL.md · MIT
---
name: bun-sveltekit
description: Use when building or running SvelteKit apps on Bun, including SSR, adapters, and Bun-specific APIs
metadata:
  keywords: "SvelteKit, Svelte 5, Bun, SSR, adapters, Vite, database, file operations"
license: MIT
---

# Bun SvelteKit

Run SvelteKit applications with Bun for faster development and builds.

## Quick Start

```bash
# Create new SvelteKit project
bunx sv create my-app
cd my-app

# Install dependencies
bun install

# Development
bun run dev

# Build
bun run build

# Preview
bun run preview
```

## Secure Installation

Scaffolding tools like `bunx sv create` download and execute remote code. Before running, follow supply chain security best practices:

- **Block post-install scripts** — Bun disables them by default; allow specific packages via `trustedDependencies` in `package.json`
- **Cooldown period** — Configure `minimumReleaseAge` in `bunfig.toml` to wait 7 days for new versions
- **Audit before installing** — Run `socket package score npm <pkg>` or use `socket npm install <pkg>` to check packages

Load the `dependency-upgrade` skill for full security configuration including Socket CLI integration, cooldown setup, lockfile validation, and CI enforcement.

## Project Setup

### package.json

```json
{
  "scripts": {
    "dev": "vite dev",
    "build": "vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "@sveltejs/adapter-auto": "^7.0.0",
    "@sveltejs/kit": "^2.0.0",
    "svelte": "^5.0.0",
    "vite": "^7.3.0"
  }
}
```

### Use Bun Adapter

```bash
bun add -D svelte-adapter-bun
```

```javascript
// svelte.config.js
import adapter from "svelte-adapter-bun";
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";

/** @type {import('@sveltejs/kit').Config} */
export default {
  preprocess: vitePreprocess(),
  kit: {
    adapter: adapter(),
  },
};
```

## Using Bun APIs

### Server Load Functions

```typescript
// src/routes/users/+page.server.ts
import { Database } from "bun:sqlite";
import type { PageServerLoad } from "./$types";

export const load: PageServerLoad = async () => {
  const db = new Database("data.sqlite");
  const users = db.query("SELECT * FROM users").all();
  db.close();

  return { users };
};
```

### Form Actions

```typescript
// src/routes/users/+page.server.ts
import { Database } from "bun:sqlite";
import type { Actions } from "./$types";
import { fail } from "@sveltejs/kit";

export const actions: Actions = {
  create: async ({ request }) => {
    const data = await request.formData();
    const name = data.get("name") as string;

    if (!name) {
      return fail(400, { error: "Name required" });
    }

    const db = new Database("data.sqlite");
    db.run("INSERT INTO users (name) VALUES (?)", [name]);
    db.close();

    return { success: true };
  },

  delete: async ({ request }) => {
    const data = await request.formData();
    const id = data.get("id") as string;

    const db = new Database("data.sqlite");
    db.run("DELETE FROM users WHERE id = ?", [id]);
    db.close();

    return { success: true };
  },
};
```

### API Routes

```typescript
// src/routes/api/users/+server.ts
import { Database } from "bun:sqlite";
import { json } from "@sveltejs/kit";
import type { RequestHandler } from "./$types";

export const GET: RequestHandler = async () => {
  const db = new Database("data.sqlite");
  const users = db.query("SELECT * FROM users").all();
  db.close();

  return json(users);
};

export const POST: RequestHandler = async ({ request }) => {
  const { name } = await request.json();

  const db = new Database("data.sqlite");
  const result = db.run("INSERT INTO users (name) VALUES (?)", [name]);
  db.close();

  return json({ id: result.lastInsertRowid });
};
```

### File Operations

```typescript
// src/routes/api/files/[name]/+server.ts
import type { RequestHandler } from "./$types";

export const GET: RequestHandler = async ({ params }) => {
  const file = Bun.file(`./data/${params.name}`);

  if (!(await file.exists())) {
    return new Response("Not found", { status: 404 });
  }

  return new Response(file);
};

export const PUT: RequestHandler = async ({ params, request }) => {
  const content = await request.text();
  await Bun.write(`./data/${params.name}`, content);

  return new Response("Saved");
};
```

## Server Hooks

```typescript
// src/hooks.server.ts
import type { Handle } from "@sveltejs/kit";
import { Database } from "bun:sqlite";

// Initialize database on startup
const db = new Database("data.sqlite");
db.run(`
  CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL
  )
`);

export const handle: Handle = async ({ event, resolve }) => {
  // Add database to locals
  event.locals.db = db;

  // Auth check
  const session = event.cookies.get("session");
  if (session) {
    event.locals.user = await getUser(session);
  }

  return resolve(event);
};
```

```typescript
// src/app.d.ts
import type { Database } from "bun:sqlite";

declare global {
  namespace App {
    interface Locals {
      db: Database;
      user?: { id: number; name: string };
    }
  }
}
```

## Svelte 5 Components

```svelte
<!-- src/routes/users/+page.svelte -->
<script lang="ts">
  import type { PageData } from "./$types";

  let { data }: { data: PageData } = $props();
  let { users } = $derived(data);

  let name = $state("");
</script>

<h1>Users</h1>

<form method="POST" action="?/create">
  <input type="text" name="name" bind:value={name} />
  <button type="submit">Add User</button>
</form>

<ul>
  {#each users as user}
    <li>
      {user.name}
      <form method="POST" action="?/delete" style="display: inline">
        <input type="hidden" name="id" value={user.id} />
        <button type="submit">Delete</button>
      </form>
    </li>
  {/each}
</ul>
```

## Deployment

### Build for Bun

```bash
bun run build
bun ./build/index.js
```

### Docker

```dockerfile
FROM oven/bun:1 AS builder

WORKDIR /app
COPY package.json bun.lockb ./
RUN bun install --frozen-lockfile

COPY . .
RUN bun run build

FROM oven/bun:1

WORKDIR /app
COPY --from=builder /app/build ./build
COPY --from=builder /app/package.json ./

EXPOSE 3000

CMD ["bun", "./build/index.js"]
```

### Adapter Options

```javascript
// svelte.config.js
import adapter from "svelte-adapter-bun";

export default {
  kit: {
    adapter: adapter({
      out: "build",
      precompress: true, // Generate .gz and .br files
      envPrefix: "",     // Environment variable prefix
      development: false,
      dynamic_origin: true,
      xff_depth: 1,
    }),
  },
};
```

## Environment Variables

```bash
# .env
DATABASE_URL=./data.sqlite
PUBLIC_API_URL=https://api.example.com
```

```typescript
// Access in server code
import { DATABASE_URL } from "$env/static/private";
import { PUBLIC_API_URL } from "$env/static/public";

// Or dynamic
import { env } from "$env/dynamic/private";
const dbUrl = env.DATABASE_URL;
```

## Common Errors

| Error | Cause | Fix |
|-------|-------|-----|
| `Cannot find bun:sqlite` | Wrong adapter | Use svelte-adapter-bun |
| `Vite error` | Build issue | Clear `.svelte-kit` |
| `Hydration failed` | Server/client diff | Check load functions |
| `404 on refresh` | SPA fallback | Configure adapter |

## When to Load References

Load `references/adapter-config.md` when:
- Advanced adapter options
- Static prerendering
- Edge deployment

Load `references/performance.md` when:
- Caching strategies
- Lazy loading
- Streaming SSR

© secondsky · MIT · secondsky/claude-skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
sveltekit Claude MPM Team Скилл подсказывает агенту, как устроен SvelteKit: файловый роутинг, load-функции, form actions и адаптеры для деплоя. CX Codex +1 441установок sveltekit-structure spences10 Подсказывает агенту, как раскладывать маршруты, вложенные лейауты и границы ошибок в SvelteKit. Пригодится, когда проект растёт и файлы начинают путаться. CX Codex +1 1 000установок sveltekit-typescript-guide-cursorrules-prompt-file PatrickJS Правило для Cursor, которое настраивает агента на Svelte 5, SvelteKit и TypeScript: структура проекта, руны, состояние. ★ 41 011звёзд репо bun brianlovin Переключает агента на среду Bun вместо привычных Node.js и npm. Настраивает команды запуска, встроенные базы данных и сервер без внешних пакетов. CX Codex +1 2 800установок svelte5-best-practices ejirocodes Скилл для ИИ-агента, который подсказывает руны Svelte 5, сниппеты и паттерны SvelteKit при написании и рефакторинге компонентов. CX Codex +1 16 600установок svelte Claude MPM Team Скилл помогает писать интерфейсы на Svelte 5 и приложения на SvelteKit. Пригодится для реактивного состояния, компонентов и серверного или статического рендеринга. CX Codex +1 343установок

Из того же набора89

web-performance-optimization Скилл для оптимизации загрузки веб-приложений: разбивка бандла, ленивая загрузка, кэширование и мониторинг Core Web Vitals. CX Codex +1 557установок api-authentication Скилл для ИИ-агента, который помогает писать аутентификацию в API: JWT, OAuth 2.0, API-ключи, сессии и защитные заголовки. CX Codex +1 533установок web-performance-audit Скилл для аудита скорости страниц: снимает метрики Core Web Vitals, ищет узкие места и подсказывает, что чинить. Пригодится, когда LCP или CLS вылезают за норму. CX Codex +1 526установок kpi-dashboard-design Скилл помогает выбрать метрики и собрать дашборд: подсказывает вёрстку, типы графиков и цвета статусов. Пригодится, когда делаешь аналитику для руководства. CX Codex +1 507установок progressive-web-app Скилл для сборки устанавливаемых веб-приложений: манифест, service worker, офлайн-режим и запрос на установку. CX Codex +1 500установок bun-sqlite Скилл подсказывает агенту, как писать код для встроенного драйвера bun:sqlite: запросы, подготовленные выражения, транзакции. CX Codex +1 495установок architecture-patterns Скилл для проектирования бэкенда: раскладывает код по слоям Clean Architecture, портам и адаптерам, подсказывает тактические приёмы DDD. CX Codex +1 493установок api-rate-limiting Скилл помогает добавить ограничение частоты запросов к API: алгоритмы token bucket, sliding window и вариант на Redis. Пригодится, когда открываешь публичный API или делишь доступ по тарифам. CX Codex +1 491установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой