Rue ecosystem framework

Text.js

Text.js 是 Rue 生态中的全栈应用框架。它基于 Vite、Rue、RSC 与文件系统路由,把 App Router、Pages Router、SSR、API 路由和 Workers 部署整合成一条轻量开发路径。 设计上参考 Vercel 的 Next.js,并基于 Cloudflare 的 vinext 与 Workers 运行时继续演进。

text app
// app/page.tsx
export default function Page() {
  return <main>Hello Text.js</main>
}

// package.json
{
  "scripts": {
    "dev": "text dev",
    "build": "text build",
    "start": "text start",
    "deploy": "text deploy"
  }
}
App + Pages
文件系统路由

同时覆盖 App Router 与 Pages Router,适合渐进迁移。

Vite + Rue
默认构建基础

自动接入 Rue JSX / TSX、Vite 插件与开发服务器。

Workers
边缘部署

通过 text deploy 输出 Cloudflare Workers 应用。

Based on Vercel and Cloudflare

熟悉的应用模型,面向边缘运行时

Text.js 不是从零发明一套全栈约定,而是把 Vercel Next.js 的应用框架经验、Cloudflare vinext 的 Vite-first / Workers 部署路径,与 Rue 的 JSX / TSX 运行时组合到同一套工具链里。

Why Text.js

同一个 Rue 应用,扩展到全栈

参考 vinext 的 Vite-first 思路,Text.js 把熟悉的文件系统约定放到 Rue 运行时之上。保留简单组件开发体验,同时补齐服务端、路由和部署层。

熟悉的全栈应用模型

以 Vercel Next.js 应用模型为参照,提供 layout、page、route handler、middleware、redirects、rewrites 和 headers 等能力。

Rue 原生的 JSX / TSX 工作流

页面和组件继续使用 Rue 的响应式能力与 JSX 表达方式,Text.js 负责路由、渲染、构建编排和部署适配。

面向 RSC 与服务端渲染

支持 React Server Components 风格的服务端组件工作流,并为 SSR、静态生成与客户端交互保留统一入口。

兼容常见 text/* 入口

内置 text/navigation、text/link、text/image、text/headers、text/cache 等 shim,降低生态适配成本。

路由与 API

从页面到接口都沿用 app 目录约定,动态参数和 route handler 放在同一套图谱里。

// app/blog/[slug]/page.tsx
export default function BlogPage({ params }: { params: { slug: string } }) {
  return <article>{params.slug}</article>
}

// app/api/hello/route.ts
export function GET() {
  return Response.json({ message: 'Hello from Text.js' })
}

CLI 与部署

text 命令负责开发、构建、检查、类型生成和 Cloudflare Workers 部署。

text dev       # 启动开发服务器
text build     # 构建生产产物
text start     # 启动生产服务器
text preview   # text start 的别名
text deploy    # 部署到 Cloudflare Workers
text typegen   # 生成 App Router 路由类型
text lint      # 调用项目中的 eslint / oxlint
text init      # 初始化部署相关配置
text check     # 检查 Text.js 兼容性
Demo source

可直接查看的 Text.js 示例源码

仓库内提供了 SSR 博客和静态导出两个 demo,用同一套 App Router 约定覆盖服务端渲染、API 路由、客户端交互、动态路由预渲染和纯静态文件交付。

查看全部 examples
examples/text-blog-ssr

Blog SSR Demo

一个 App Router 博客示例,首页与文章页走服务端渲染,同时包含 /api/posts route handler、客户端主题筛选和本地点赞组件。

运行命令
pnpm --dir examples/text-blog-ssr dev
pnpm --dir examples/text-blog-ssr build
pnpm --dir examples/text-blog-ssr start
// examples/text-blog-ssr/app/page.tsx
import TopicFilter from '../components/TopicFilter'
import { getTags, getTopics, posts } from '../lib/posts'

export default function HomePage() {
  const renderedAt = new Date().toLocaleTimeString('en-US', {
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
  })

  return (
    <main>
      <section className="intro">
        <p className="eyebrow">Server-rendered demo</p>
        <h1>A small blog running on Text.js</h1>
        <a href="/blog/rendering-notes">Read the featured post</a>
        <a href="/blog">Browse all posts</a>
        <a href="/api/posts">View API response</a>
        <span>Rendered at {renderedAt}</span>
      </section>

      <TopicFilter posts={posts} topics={getTopics()} tags={getTags()} />
    </main>
  )
}

// examples/text-blog-ssr/app/api/posts/route.ts
export function GET() {
  return Response.json({ count: posts.length, posts })
}
examples/text-static-export

Static Export Demo

一个知识库静态导出示例,通过 output: "export" 在 text build 时预渲染全部路由,包括动态 guide 页面。

运行命令
pnpm --dir examples/text-static-export dev
pnpm --dir examples/text-static-export build
pnpm --dir examples/text-static-export start
// examples/text-static-export/text.config.mjs
export default {
  output: 'export',
}

// examples/text-static-export/app/guides/[slug]/page.tsx
export function generateStaticParams() {
  return guides.map(guide => ({ slug: guide.slug }))
}

export default async function GuidePage({ params }) {
  const guide = getGuide((await params).slug)
  if (!guide) notFound()

  return (
    <main className="narrow">
      <Link href="/">Back home</Link>
      <h1>{guide.title}</h1>
      <ol>{guide.steps.map(step => <li key={step}>{step}</li>)}</ol>
    </main>
  )
}

从 Rue 组件到全栈应用

安装 @rue-js/text 后,创建 app/page.tsx 即可启动。多数项目不需要手动维护 Vite 配置,Text.js 会自动组织 Rue 插件与应用路由。

开始了解 Text.js