← スキル一覧に戻る

tanstack-start
by hashintel
🧪 Public laboratory for @hashintel experiments
⭐ 30🍴 11📅 2026年1月18日
SKILL.md
name: tanstack-start description: TanStack Start full-stack React framework patterns. Use when working with file-based routing, API routes, server handlers, TanStack Router layouts, or integrating AI/MCP features in this codebase.
TanStack Start
File-Based Routing
Routes live in src/routes/. The route tree auto-generates to src/routeTree.gen.ts - commit this file (required for type-checking).
Route Types
__root.tsx- Root layout, wraps all routesindex.tsx- Index route for a path segmentdemo.tsx- Layout route wrapping alldemo/*.tsxchildren (uses<Outlet />)demo/*.tsx- Child routes rendered inside parent layout$param.tsx- Dynamic route segment
Layout Routes
Create foo.tsx alongside foo/ directory to wrap child routes:
import { createFileRoute, Outlet } from '@tanstack/react-router'
export const Route = createFileRoute('/foo')({
component: FooLayout,
})
function FooLayout() {
return (
<div>
<Outlet />
</div>
)
}
API Routes
Server handlers use api.*.ts naming convention:
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/demo/api/example')({
server: {
handlers: {
POST: async ({ request }) => {
const data = await request.json()
return Response.json({ result: data })
},
},
},
})
AI Chat Integration
Client Side
Use @ai-sdk/react with DefaultChatTransport:
import { useChat } from '@ai-sdk/react'
import { DefaultChatTransport } from 'ai'
const { messages, sendMessage } = useChat({
transport: new DefaultChatTransport({
api: '/demo/api/chat',
}),
})
Server Side
Use streamText from ai package with OpenRouter provider:
import { convertToModelMessages, streamText } from 'ai'
import { haiku } from '@/lib/openrouter'
const result = await streamText({
model: haiku,
messages: convertToModelMessages(messages),
system: SYSTEM_PROMPT,
tools,
})
return result.toUIMessageStreamResponse()
OpenRouter Setup
Create provider singleton in src/lib/openrouter.ts:
import { createOpenRouter } from '@openrouter/ai-sdk-provider'
export const openrouter = createOpenRouter({
apiKey: process.env.OPENROUTER_API_KEY,
})
export const haiku = openrouter('anthropic/claude-3.5-haiku')
MCP Server
Register tools with Zod schemas in route files:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import z from 'zod'
import { handleMcpRequest } from '@/utils/mcp-handler'
const server = new McpServer({ name: 'my-server', version: '1.0.0' })
server.registerTool(
'toolName',
{
title: 'Tool Title',
description: 'Tool description',
inputSchema: { param: z.string().describe('Param description') },
},
({ param }) => ({
content: [{ type: 'text', text: result }],
}),
)
export const Route = createFileRoute('/mcp')({
server: {
handlers: {
POST: async ({ request }) => handleMcpRequest(request, server),
},
},
})
Path Aliases
@/* maps to ./src/* (configured in tsconfig.json).
スコア
総合スコア
70/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
✓最近の活動
1ヶ月以内に更新
+10
✓フォーク
10回以上フォークされている
+5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
✓タグ
1つ以上のタグが設定されている
+5
レビュー
💬
レビュー機能は近日公開予定です


