К основному содержанию
правило

tanstack-start — правило для Cursor: что делает и как установить

Инструктирует Cursor по архитектуре TanStack Start: серверным функциям createServerFn, стримингу через defer() и конфигурации Vinxi. Помогает писать типизированный фулстек-код без лишних REST API.

Установить в Cursor · Вручную: положить файлы Все способы и платформы ↓
.cursor/rules/tanstack-start.mdc
Открыть на GitHub

Что делает tanstack-start

Правило задаёт для Cursor стандарты работы с TanStack Start — связкой TanStack Router и Vinxi (Vite плюс Nitro). Оно применяется к файлам src/routes/**/*, src/server/**/* и app.config.ts, поэтому агент не станет придумывать стандартные REST-эндпоинты там, где уместнее createServerFn с валидацией через Zod.

Внутри собраны готовые шаблоны для корневого макета __root.tsx, серверных мутаций, сырых HTTP-обработчиков createAPIFileRoute для вебхуков и стриминга данных. Неприоритетные данные выносятся в defer() с обёрткой в <Await> и Suspense. Для деплоя задаются пресеты сервера: node-server, vercel, netlify, bun или cloudflare-pages.

В коде действует строгое разделение переменных окружения. Любое прямое обращение к process.env в клиентском компоненте сломает сборку, так как эти переменные разрешены только внутри серверных функций.

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

  • настроить серверные функции createServerFn со сквозной типизацией
  • организовать отложенную загрузку данных через defer() и Suspense
  • сконфигурировать серверный пресет в app.config.ts под платформу деплоя
  • объявить маршрут для вебхука через createAPIFileRoute

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

  • Напиши серверную функцию для создания статьи с валидацией входных данных через Zod
  • Добавь маршрут /posts/$postId со стримингом комментариев через defer()
  • Настрой app.config.ts с пресетом для деплоя на cloudflare-pages

Как установить tanstack-start

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

.cursor/rules/tanstack-start.mdc

Во frontmatter: description, globs, alwaysApply

По шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules

Вопросы о tanstack-start

Как установить tanstack-start в Cursor?

Создайте файл .cursor/rules/tanstack-start.mdc в корне проекта и вставьте в него текст правила. После этого Cursor будет применять правила к файлам маршрутов, сервера и конфигурации.

Зачем нужно это правило?

Оно обучает модель особенностям TanStack Start: замене REST API на createServerFn, правильной работе с app.config.ts и организации файлового роутинга TanStack Router.

Как по правилу передавать переменные окружения?

Серверные переменные доступны через process.env исключительно внутри серверных функций. Для клиентского кода используются только переменные с префиксом import.meta.env.VITE_*.

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

tanstack-start.mdc · CC0-1.0
---
description: "TanStack Start full-stack React framework using server functions, API routes, SSR, streaming with defer(), and multi-platform deployment via Vinxi/Nitro"
globs: ["src/routes/**/*", "src/server/**/*", "app.config.ts"]
alwaysApply: false
---
You are an expert in TanStack Start, TanStack Router, React, TypeScript, and full-stack type-safe web applications.

## Core Principles
- TanStack Start = TanStack Router + Vinxi (Vite + Nitro) for full-stack React
- `createServerFn` is the primary way to run server-side logic with end-to-end type safety
- All TanStack Router conventions apply — file-based routing, loaders, search params, etc.
- Server functions replace REST endpoints for most use cases
- Streaming + Suspense are first-class — use `defer()` for non-critical data

## app.config.ts
```ts
import { defineConfig } from '@tanstack/start/config'
import tsConfigPaths from 'vite-tsconfig-paths'

export default defineConfig({
  vite: { plugins: [tsConfigPaths()] },
  server: {
    preset: 'node-server', // or: 'vercel', 'netlify', 'bun', 'cloudflare-pages'
  },
})
```

## Root Route HTML Shell
```tsx
// src/routes/__root.tsx
export const Route = createRootRoute({
  component: () => (
    <html lang="en">
      <head />
      <body>
        <Outlet />
        <ScrollRestoration />
        <Scripts />
      </body>
    </html>
  ),
})
```

## Server Functions
```ts
// src/server/functions/posts.ts
export const getPost = createServerFn()
  .validator(z.object({ id: z.string() }))
  .handler(async ({ data }) => {
    const post = await db.post.findUnique({ where: { id: data.id } })
    if (!post) throw new Error('Post not found')
    return post
  })

export const createPost = createServerFn()
  .validator(z.object({ title: z.string().min(1), body: z.string() }))
  .handler(async ({ data }) => db.post.create({ data }))
```

## Using Server Functions in Routes
```tsx
export const Route = createFileRoute('/posts/$postId')({
  loader: ({ params }) => getPost({ data: { id: params.postId } }),
  component: PostDetail,
})
```

## Mutations with Server Functions
```tsx
const mutation = useMutation({
  mutationFn: (input: { title: string; body: string }) => createPost({ data: input }),
  onSuccess: () => queryClient.invalidateQueries({ queryKey: ['posts'] }),
})
```

## API Routes (for webhooks / raw HTTP)
```ts
// src/routes/api/webhook.ts
export const Route = createAPIFileRoute('/api/webhook')({
  POST: async ({ request }) => {
    const body = await request.json()
    return Response.json({ received: true })
  },
})
```

## Streaming with defer()
```tsx
export const Route = createFileRoute('/posts/$postId')({
  loader: async ({ params }) => {
    const post = await getPost({ data: { id: params.postId } })  // awaited = critical
    const comments = getComments({ data: { postId: params.postId } })  // not awaited
    return { post, comments: defer(comments) }
  },
  component: PostDetail,
})

function PostDetail() {
  const { post, comments } = Route.useLoaderData()
  return (
    <div>
      <h1>{post.title}</h1>
      <Suspense fallback={<CommentsSkeleton />}>
        <Await promise={comments}>{(c) => <CommentsList comments={c} />}</Await>
      </Suspense>
    </div>
  )
}
```

## Environment Variables
- Access server-only vars via `process.env` inside server functions only
- Use `import.meta.env.VITE_*` for client-exposed variables
- Never access `process.env` in client components

## Deployment Targets
Configure `server.preset` in `app.config.ts`:
- `node-server` — default Node.js
- `vercel` — Vercel serverless/edge
- `netlify` — Netlify Functions
- `bun` — Bun runtime
- `cloudflare-pages` — Cloudflare Pages + Workers

© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules

Похожие правила IDE

Все правила IDE по теме «Фронтенд и UI» →
winui3 официальный github Правило задаёт рекомендации для WinUI 3 и Windows App SDK: от XAML и потоков до окон и MVVM. Пригодится, чтобы Copilot учитывал особенности настольных приложений Windows. ★ 40 451звёзд репо vue официальный github Правило задаёт Copilot стандарты Vue 3: Composition API, <script setup>, реактивность, Pinia и Vue Router. Пригодится, когда агент пишет компоненты в вашем стиле. ★ 40 451звёзд репо tanstack-start-shadcn-tailwind официальный github Правило задаёт Copilot стек TanStack Start, Shadcn/ui и Tailwind CSS и требует валидировать внешние данные через Zod. ★ 40 451звёзд репо tailwind-v4-vite официальный github Правило помогает подключить Tailwind CSS v4 к проекту на Vite через официальный плагин. Пригодится и для новой установки, и при переходе с v3. ★ 40 451звёзд репо svelte официальный github Направляет GitHub Copilot на стандарты Svelte 5 и SvelteKit 2: руны вместо старых сторов, типизация компонентов и безопасная работа с SSR. ★ 40 451звёзд репо power-bi-custom-visuals-development официальный github Правило для GitHub Copilot, которое подсказывает агенту, как писать кастомные визуалы Power BI на React, D3.js и TypeScript. ★ 40 451звёзд репо

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

Весь набор →
tokrepo-agent-discovery-cursorrules-prompt-file Правило заставляет Cursor искать готовые скиллы, промпты и MCP-конфиги в TokRepo до того, как писать их с нуля, и проверять каждый кандидат перед установкой. ★ 41 024звёзд репо testrail-test-case-cursorrules-prompt-file Задаёт роль QA-инженера для составления тест-кейсов TestRail по шагам или из автотестов. Помогает форматировать сценарии в таблицы и CSV для импорта. ★ 41 024звёзд репо tensorflow-deep-learning Правило задаёт рекомендации для работы с TensorFlow: от подготовки данных и обучения до оценки и экспорта модели. Пригодится, если хотите, чтобы Cursor учитывал эти практики в Python-файлах и ноутбуках. ★ 41 024звёзд репо tauri-svelte-typescript-guide-cursorrules-prompt-f Правило для Cursor, которое задаёт агенту стиль работы с десктопными приложениями на Tauri: Svelte во фронтенде, TypeScript для типов. ★ 41 024звёзд репо tanstack-start-cursorrules-prompt-file Правило задаёт Cursor ориентиры для разработки на TanStack Start: от серверных функций и маршрутов до потоковой загрузки и SSR. ★ 41 024звёзд репо tanstack-router Правило для Cursor, которое задаёт агенту стандарты TanStack Router v1: файловые маршруты, типизация параметров и загрузка данных через loader. ★ 41 024звёзд репо tanstack-router-react-cursorrules-prompt-file Задаёт стандарты TanStack Router v1 в React: файловую маршрутизацию, валидацию search-параметров схемами Zod, загрузчики данных и защиту маршрутов через beforeLoad. ★ 41 024звёзд репо tanstack-query Правило задаёт для Cursor шаблоны работы с TanStack Query v5 в TypeScript и React. Оно пригодится при запросах, мутациях, пагинации и Suspense. ★ 41 024звёзд репо

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

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