SolidStart
SolidJS 官方全栈框架,提供文件路由、Server Functions、流式 SSR 与多平台部署。
项目概述
SolidStart 将 Solid 的细粒度响应式扩展到完整应用,通过 Solid Router、Server Functions、API Routes 和多种渲染模式构建高性能全栈 Web 产品。
SolidStart 是 SolidJS 官方 Meta-framework,负责把 UI 组件、路由、服务端数据和部署输出组合为完整应用。它使用 src/routes 生成 UI Route 与 API Route,Solid Router 负责嵌套路由、预加载和客户端导航;query 与 createAsync 用于读取数据,action 与 Server Function 用于写入数据,并通过 "use server" 指令确保数据库、私密变量和授权逻辑只在服务器执行。页面可采用客户端渲染、服务端渲染、流式 SSR 或静态生成,Solid 的细粒度响应式会让浏览器只更新真正依赖变化的 DOM。底层工具链结合 Vite 与服务端运行时能力,并通过部署 Preset 面向 Node、Netlify、Vercel、AWS、Cloudflare 等环境。当前官方文档已增加 SolidStart 2.0 分支,将配置统一迁移到 vite.config.ts 和 solidStart() 插件;与此同时,npm 稳定生态仍有大量 1.x 项目,因此新项目和升级项目都应先确认实际脚手架版本。
主要特点
SolidStart 将 Solid 的精确响应式、同构路由和服务端函数结合起来,为页面、数据和部署提供轻量的全栈基础。
Solid 细粒度响应式
Signal、Memo 和 Resource 精确追踪依赖,状态变化直接更新相关 DOM,而不是重复执行整棵组件树或进行虚拟 DOM Diff。
同构文件路由
src/routes 中的 TSX 或 MDX 文件生成 UI Route,支持嵌套布局、动态参数、可选参数、Catch-all 与 Route Groups。
Query 与预加载
query 为服务端数据建立稳定键,createAsync 在组件中读取结果,route.preload 可在导航前启动请求并与 Suspense 协作。
Action 与 Server Functions
通过 action 处理数据写入,"use server" 将函数转换为安全的服务端调用边界,并可结合重定向和查询重新验证。
完整 API Routes
路由文件导出 GET、POST、PATCH 或 DELETE 即可创建 Endpoint,适合 REST API、Webhook、OAuth Callback 与非 HTML 响应。
多种渲染模式
支持 CSR、同步或异步 SSR、流式 SSR 与 SSG,可根据内容、交互和托管条件选择合适的交付方式。
服务端 HTTP 能力
@solidjs/start/http 提供 Cookie、Session、请求和响应辅助方法,Middleware 可传递请求级上下文并统一处理认证。
Vite 配置与部署 Preset
SolidStart 2.0 通过 solidStart() Vite Plugin 配置应用,并为 Node、Serverless、Edge 和主流云平台准备构建输出。
适用场景
适合偏好 JSX 与 Signal、重视客户端更新效率,并希望使用一套 TypeScript 代码覆盖 SSR、API 和交互界面的团队。
高交互 SaaS
细粒度更新适合仪表盘、编辑器、协作工具和包含大量独立交互状态的产品界面。
数据驱动型网站
query、createAsync、Suspense 与服务端渲染适合目录、搜索、报表和实时状态页面。
电商与会员产品
服务端函数可承载账户、购物车和订单逻辑,SSR 与静态生成兼顾商品内容、SEO 和交互体验。
内容和文档站
文件路由、MDX、SSG 与流式 SSR 可用于博客、文档、营销站和需要局部互动的内容页面。
TypeScript BFF 应用
页面、Server Functions 与 API Routes 可共享类型和业务模块,适合作为前端专用后端连接数据库或外部服务。
跨平台部署项目
部署 Preset 支持多种 Node、Serverless 和 Edge 环境,适合希望保留托管平台选择权的团队。
优点与注意事项
技术选型不仅要看能力,也要理解它带来的团队成本。
主要优点
SolidStart 擅长的地方
- 继承 Solid 的细粒度响应式,客户端更新精确且无需虚拟 DOM
- JSX、路由预加载和 Server Functions 形成连贯的 TypeScript 开发体验
- query 与 action 把读取、写入、缓存键和重新验证组织在路由数据层
- 同时支持 CSR、SSR、流式渲染和静态生成,适配多类网站
- API Route 使用标准 HTTP 方法与 Request/Response,适合外部客户端和 Webhook
- 框架保持相对精简,不强制绑定特定数据库、认证或 UI 组件库
- Vite 工具链和多平台 Preset 为开发速度与部署可移植性提供基础
需要注意
采用前应考虑的问题
Signal Getter、组件只执行一次、资源与响应式所有权不同于 React,照搬 Hooks 和组件重渲染思维容易产生错误。
官方已有 v2 文档,而大量现有项目和 npm 稳定生态仍使用 v1;配置文件、包入口和升级步骤必须与实际版本匹配。
企业组件、认证示例、平台集成和人才储备少于 Next.js 或 Nuxt,复杂问题可能需要阅读源码、Issue 与 Router 文档。
"use server" 函数看起来像本地调用,但会跨越网络和序列化边界;参数、错误、延迟和幂等性仍需按远程调用设计。
浏览器 API 不能在服务端执行,数据库和秘密也不能进入客户端 Bundle;同构代码必须明确运行环境与副作用。
query 键、preload、action 后重新验证和导航缓存彼此关联,复杂写入流程应验证过期数据和并发提交行为。
SSR 改善首屏并不等于零 JavaScript;应测量 Hydration、第三方依赖和高交互页面的真实包体与启动成本。
文件系统、数据库连接、流式响应、冷启动和 Edge API 仍取决于目标环境,切换平台前需要端到端验证。
Action、API Route 和 Server Function 必须验证输入、执行授权、保护 Session,并避免把私密数据序列化到页面。
快速开始
按照 SolidStart 2.0 文档创建项目,并使用文件路由、query、Server Function、action 和 API Route 构建项目目录。
bashnpm create solid@latest solidstart-catalog
cd solidstart-catalog
npm install
npm run devtypescriptimport { solidStart } from "@solidjs/start/config";
import { defineConfig } from "vite";
export default defineConfig({
plugins: [solidStart()],
});tsximport {
createAsync,
query,
type RouteDefinition,
} from "@solidjs/router";
import { For, Suspense } from "solid-js";
const getProjects = query(async () => {
"use server";
return [
{ id: "1", name: "SolidStart" },
{ id: "2", name: "SolidJS" },
];
}, "projects");
export const route = {
preload: () => getProjects(),
} satisfies RouteDefinition;
export default function ProjectsPage() {
const projects = createAsync(() => getProjects());
return (
<main>
<h1>开源项目</h1>
<Suspense fallback={<p>正在加载…</p>}>
<ul>
<For each={projects()}>
{(project) => <li>{project.name}</li>}
</For>
</ul>
</Suspense>
</main>
);
}tsximport {
action,
redirect,
useSubmission,
} from "@solidjs/router";
const createProject = action(async (formData: FormData) => {
"use server";
const name = String(formData.get("name") ?? "").trim();
if (!name || name.length > 80) {
throw new Error("项目名称不合法");
}
// 在这里写入数据库,并执行当前用户的授权检查
throw redirect("/projects");
}, "create-project");
export function CreateProjectForm() {
const submission = useSubmission(createProject);
return (
<form action={createProject} method="post">
<input name="name" required maxlength="80" />
<button disabled={submission.pending}>
{submission.pending ? "正在保存…" : "添加项目"}
</button>
</form>
);
}typescriptimport type { APIEvent } from "@solidjs/start/server";
export async function GET({ params }: APIEvent) {
return Response.json({
id: params.id,
name: "SolidStart",
});
}下一步:SolidStart 处于 v1 到 v2 的过渡阶段,执行脚手架后应以生成项目的 package.json 和对应版本文档为准;不要直接把旧版 app.config.ts 配置复制到 v2 的 vite.config.ts。
类似项目
这些应用框架同样提供同构路由、服务端数据和多种渲染模式,但组件响应式、表单模型与部署工具链不同。
SolidJS
采用细粒度响应式和 JSX 构建高性能 Web 用户界面的 JavaScript 库。
查看项目SvelteKit
Svelte 官方应用框架,提供文件路由、服务端渲染、数据加载和渐进增强表单。
查看项目Nuxt
基于 Vue 的全栈 Web 框架,统一路由、服务端渲染、数据获取与后端 API。
查看项目Qwik City
基于 Qwik 可恢复执行模型,提供路由、数据加载和 Server Action 的全栈 Meta-framework。
查看项目TanStack Start
基于 TanStack Router 的类型安全全栈 React 框架,覆盖 SSR、Server Functions 与流式数据。
访问官网SolidStart vs SvelteKit
SolidStart 与 SvelteKit 都是编译器驱动 UI 生态的官方全栈框架,支持文件路由、SSR、服务端数据与多平台部署。SolidStart 使用 JSX、细粒度 Signal 和 query/action;SvelteKit 使用 .svelte 组件、Load、Form Actions 与 + 文件约定。
| 比较维度 | SolidStart | SvelteKit |
|---|---|---|
| 界面基础 | Solid、JSX/TSX 与细粒度 Signal | Svelte 5、单文件组件与 Runes |
| 路由文件 | src/routes 中的 TSX/MDX 与 HTTP 方法导出 | +page、+layout、+server 及其 .server 变体 |
| 数据读取 | query、createAsync、route.preload 与 Suspense | 通用/服务端 Load 与生成的 PageData |
| 数据写入 | action、useSubmission 与 Server Function | Form Actions、fail 与 use:enhance |
| 响应式更新 | Signal 依赖直接更新对应 DOM | Svelte 编译器与 Runes 生成更新逻辑 |
| 渐进增强 | Action 可使用原生 form,具体体验依路由方案 | Form Actions 明确以无 JavaScript 表单为核心 |
| 部署工具 | Vite 配置与 SolidStart 部署 Preset | Vite 构建与平台 Adapter |
| 更适合 | 偏好 JSX、Signal 和精确更新模型的团队 | 偏好 HTML 风格组件和渐进增强表单的团队 |
如果团队喜欢 JSX,又希望获得 Signal 的细粒度更新、路由 Query 与类型化 Server Functions,SolidStart 很有吸引力;如果更偏好接近 HTML 的组件语法、成熟的 Load/Form Actions 约定和更完整的 Adapter 文档,SvelteKit 通常更稳妥。SolidStart 目前还需额外评估 v1/v2 迁移、关键生态和目标平台支持。
资料核验
版本、维护信息与本页采用的官方资料来源。
本次核验覆盖 SolidStart 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。
官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 25 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。