Hono RPC logo

Hono RPC

Hono 内置的 RPC 能力 —— 基于 hc 客户端,零代码生成即可实现服务端到客户端的端到端类型安全调用,是轻量 Web 框架向全栈类型化 API 演进的典型方案。

HTTP请求API类型安全RPCEdge框架

Hono RPC 是 Hono 框架内置的 RPC 能力,通过 hc 客户端实现零代码生成的端到端类型安全调用。支持 Cloudflare Workers/Deno/Bun/Node.js 等多运行时环境,保留标准 REST 语义。GitHub 31,300+ Stars,npm 周下载量超 2000 万,是 Edge/Serverless 场景增长最快的框架之一。

Hono RPC

Hono 内置的 RPC 能力 —— 基于 hc 客户端,零代码生成即可实现服务端到客户端的端到端类型安全调用,是轻量 Web 框架向全栈类型化 API 演进的典型方案。


技术简介

Hono(日语「炎」,意为"火焰")是一个基于 Web Standards 构建的超轻量 HTTP 框架,由 Yusuke Wada 于 2021 年创建。其核心设计目标是:零依赖、多运行时、高性能、极致的 TypeScript 类型推导体验。Hono 本身是一个完整的 Web 框架(路由、中间件、验证、SSR/SSG),但其 RPC 能力(从 v4 开始大幅强化)是它区别于 Express、Fastify 等传统框架的关键差异化特性。

Hono RPC 的工作原理非常简洁:服务端定义路由并导出类型(export type AppType = typeof route),客户端通过 hc<AppType>(baseUrl) 即可获得与后端完全一致的请求/响应类型推导 —— 无需代码生成、无需 OpenAPI Schema、无需额外构建步骤。这种模式与 tRPC 类似,但 Hono 同时保留了标准 REST 语义和 HTTP 协议,不要求客户端必须使用 TypeScript,对外部消费者也更友好。

截至 2026 年中,Hono 已发展到 v4.12.28,GitHub Stars 超过 31,300,npm 周下载量超过 2000 万,成为 Edge / Serverless 场景增长最快的 Web 框架之一。其 RPC 能力被大量全栈项目采用,尤其在 Cloudflare Workers + Next.js/Nuxt/SvelteKit 的组合中非常流行。


基本信息

项目说明
官方网站https://hono.dev
GitHubhttps://github.com/honojs/hono
npmhttps://www.npmjs.com/package/hono
LicenseMIT
最新版本v4.12.28(2026 年 7 月 6 日发布)
Node.js 适配@hono/node-server v2.0.4
创建者 / 维护者Yusuke Wada(https://github.com/yusukebe),Cloudflare 工程师
GitHub Stars31,300+(2026 年 7 月)
npm 周下载量20,000,000+(2026 年)
运行时要求Node.js 18+(Node 场景);零外部依赖
包体积~14KB(minified + gzipped)

快速上手

1. 安装

# 服务端(Hono 核心)
npm install hono
 
# 可选:Node.js 适配器(如果不在 Edge 环境)
npm install @hono/node-server
 
# 可选:Zod 验证器(RPC 类型推导的最佳搭档)
npm install @hono/zod-validator zod

2. 服务端 —— 定义路由并导出类型

// server.ts
import { Hono } from 'hono'
import { zValidator } from '@hono/zod-validator'
import { z } from 'zod'
 
const app = new Hono()
 
// 定义路由 + 验证器 + 处理函数,赋值给变量
const route = app
  .post('/api/posts', zValidator('json', z.object({
    title: z.string().min(1),
    body: z.string(),
  })), async (c) => {
    const data = await c.req.valid('json')
    // ... 业务逻辑
    return c.json({
      id: 1,
      title: data.title,
      body: data.body,
      createdAt: new Date().toISOString(),
    }, 201)
  })
 
// 关键:导出路由类型供客户端使用
export type AppType = typeof route
 
export default app

3. 客户端 —— 使用 hc 类型安全调用

// client.ts
import { hc } from 'hono/client'
import type { AppType } from './server'
 
// 创建类型安全客户端
const client = hc<AppType>('http://localhost:8787')
 
// 调用 API —— 参数和返回值均有完整类型推导
const res = await client.api.posts.$post({
  json: {
    title: 'Hello Hono RPC',
    body: '类型安全,零代码生成',
  },
})
 
// 响应类型也被推导 —— 根据状态码区分
if (res.status === 201) {
  const data = await res.json()
  console.log(data.title) // 类型推导为 string
  console.log(data.id)    // 类型推导为 number
}
 
// 辅助工具:获取 URL
const url = client.api.posts.$url()
// => URL { href: 'http://localhost:8787/api/posts' }
 
// 辅助工具:仅获取路径
const path = client.api.posts.$path()
// => '/api/posts'

核心概念与架构

hc 客户端

hc 是 Hono 内置的 RPC 客户端(从 hono/client 导入),核心机制:

  • 类型读取:接收 AppType 泛型参数,从服务端路由定义中提取完整的请求/响应类型
  • 链式调用:路径通过点语法映射 —— client.api.users[':id'].$get(&#123; param: &#123; id: '1' &#125; &#125;)
  • 标准 fetch:底层基于 fetch(),返回值就是标准 Response 对象
  • HTTP 方法映射$get()$post()$put()$delete()$patch() 对应服务端路由方法

类型推导机制

服务端路由定义
      ↓
TypeScript 泛型类型链(InferRequestType / InferResponseType)
      ↓
hc<AppType> 客户端获得完整类型
      ↓
请求参数(json / form / query / param / header)→ 编译期检查
响应体 + 状态码 → 编译期推导 + 分支收窄

关键类型工具:

工具用途
InferRequestType&lt;typeof route&gt;提取请求参数类型
InferResponseType&lt;typeof route&gt;提取响应体类型
ApplyGlobalResponse合并全局错误响应类型到所有路由

Validator 的角色

验证器是 Hono RPC 类型推导的桥梁 —— 输入类型从验证器 Schema 推导,而非手动定义:

// 使用 Zod 验证器 → 输入类型自动推导
zValidator('json', z.object({ name: z.string() }))
 
// 使用 Standard Schema(通用标准,支持 Zod / Valibot / ArkType 等)
import { standardValidator } from '@hono/standard-validator'

核心特性

1. 零代码生成的端到端类型安全

无需 openapi-typescript、无需 codegen,仅通过 TypeScript 类型导出/导入即可实现完整的请求/响应类型推导。

2. 多运行时支持(Write Once, Run Anywhere)

同一份代码可运行于:

  • Cloudflare Workers / Pages
  • Deno / Deno Deploy
  • Bun
  • Node.js(通过 @hono/node-server
  • AWS Lambda / Lambda@Edge
  • Fastly Compute
  • Vercel / Netlify

3. REST 语义保留

与 tRPC 不同,Hono RPC 基于标准 HTTP + REST,外部非 TypeScript 客户端(curl、Postman、移动 App)可以正常调用,不要求客户端必须使用 TypeScript。

4. 状态码分支推导

服务端使用 c.json(data, 200) / c.json(error, 404) 指定不同状态码时,客户端可根据 res.status 分支收窄响应类型。

5. 内置丰富中间件

开箱即用的官方中间件:CORS、JWT、Bearer/Basic Auth、Cookie、Cache、ETag、Compress、Logger、Pretty JSON、Secure Headers、Body Limit、Context Storage、SSG、Streaming 等。

6. 验证器生态

支持 Zod(@hono/zod-validator)、Standard Schema(@hono/standard-validator)、Valibot、ArkType,以及 @hono/zod-openapi(验证 + OpenAPI 文档生成)。

7. 自定义 Fetch 支持

hc 可注入自定义 fetch 函数,适配 Cloudflare Workers 的 env.fetch、Node.js 的 undici、或添加认证 header 的包装函数。

8. 前端框架集成

与 SWR、React Query、Vue Query、SvelteKit 等无缝集成 —— 将 hc 调用包装为 fetcher 即可获得缓存、重试、乐观更新等能力。

9. 路由分组与挂载

支持 app.route() 嵌套路由、app.mount() 挂载子应用,类型在分组后仍然保持完整推导。

10. 极小体积与极高性能

核心包 ~14KB,零外部依赖;使用 RegExpRouter / LinearRouter 等多种路由策略,冷启动极快,适合 Edge 场景。


生态图

┌─────────────────────────────────────────────────────────┐
│                    Hono 生态                             │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─ 核心 ──────────────────────────────────────────────┐ │
│  │  hono(核心框架)                                     │ │
│  │  @hono/node-server(Node.js 适配器)                  │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                         │
│  ┌─ 验证层 ────────────────────────────────────────────┐ │
│  │  @hono/zod-validator     Zod 验证                    │ │
│  │  @hono/standard-validator Standard Schema 验证       │ │
│  │  @hono/zod-openapi       Zod + OpenAPI 文档生成      │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                         │
│  ┌─ 认证中间件 ────────────────────────────────────────┐ │
│  │  Basic Auth / Bearer Auth / JWT Auth                │ │
│  │  Firebase Auth / Clerk Auth                         │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                         │
│  ┌─ 运行时适配器 ──────────────────────────────────────┐ │
│  │  Cloudflare Workers  │  Deno / Deno Deploy          │ │
│  │  Bun                  │  AWS Lambda / Lambda@Edge    │ │
│  │  Fastly Compute       │  Vercel / Netlify            │ │
│  │  Node.js              │  Service Worker              │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                         │
│  ┌─ 工具中间件 ────────────────────────────────────────┐ │
│  │  CORS │ ETag │ Cache │ Compress │ Logger            │ │
│  │  Cookie │ Secure Headers │ Body Limit │ Pretty JSON │ │
│  │  SSG │ Streaming │ Context Storage │ JSX / html     │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                         │
│  ┌─ 第三方集成 ────────────────────────────────────────┐ │
│  │  GraphQL Server(graphql-yoga)│ Sentry              │ │
│  │  Prisma │ Drizzle ORM │ D1 / KV / R2               │ │
│  │  Pino │ Winston(日志)    │ BullMQ(队列)          │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                         │
│  ┌─ 前端集成 ──────────────────────────────────────────┐ │
│  │  SWR / React Query / Vue Query / SvelteKit          │ │
│  │  Next.js App Router / Nuxt / Astro / SolidStart     │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                         │
└─────────────────────────────────────────────────────────┘

适用场景

1. Edge / Serverless API 服务

Cloudflare Workers、Deno Deploy、Vercel Edge Functions 等边缘场景的首选框架,冷启动快、体积小、天然支持 RPC。

2. 全栈 TypeScript 项目

前后端共享类型但不想引入 tRPC 的复杂度时,Hono RPC 提供更轻量、更贴近 REST 的方案。适合 monorepo(Turborepo / pnpm workspace)架构。

3. 微服务 / API 网关

多运行时支持使得同一套代码可以部署到不同平台(Workers 做边缘路由、Lambda 做核心业务),RPC 客户端确保服务间调用的类型安全。

4. BFF(Backend For Frontend)层

在 Next.js / Nuxt / Astro 的服务端层使用 Hono 聚合后端 API,通过 RPC 将类型安全传递到前端组件。

5. 内部工具 / 管理后台

需要快速搭建带类型安全的 CRUD 管理接口,Hono + Zod 验证 + hc 客户端可以零 Schema 定义实现完整类型链。

6. SaaS API 后端

面向外部开发者的 API 服务,结合 @hono/zod-openapi 可同时获得验证 + OpenAPI 文档,降低维护成本。

7. 代理 / 中间层服务

利用 Hono 的中间件能力和多运行时适配,构建认证代理、请求转换、限流等中间层服务。


开发与工程化

TypeScript 严格模式

Hono 本身用 TypeScript 编写,天然支持 strict: true。RPC 模式在严格模式下效果最佳。

Monorepo 推荐结构

packages/
  api/          ← Hono 服务端(定义路由 + 导出 AppType)
  web/          ← 前端应用(引用 AppType,使用 hc 客户端)
  shared/       ← 共享类型、常量

构建工具

  • 开发wrangler dev(Workers)、tsx watch(Node.js)、bun --hot(Bun)
  • 生产wrangler deploynode dist/index.js、Bun 原生编译
  • Vite 插件@hono/vite-dev-server 提供开发热更新

测试

  • vitest 配合 app.request() 方法可直接对路由做单元测试,无需启动服务器:
import { describe, it, expect } from 'vitest'
import app from './server'
 
describe('Posts API', () => {
  it('should create a post', async () => {
    const res = await app.request('/api/posts', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ title: 'Test', body: 'Content' }),
    })
    expect(res.status).toBe(201)
    const data = await res.json()
    expect(data.title).toBe('Test')
  })
})

类型推导性能优化

当路由数量庞大时(100+ 路由),TypeScript 编译时间可能显著增长。缓解策略:

  1. 保持 monorepo 中 Hono 版本一致
  2. 使用 TypeScript Project References
  3. 预编译客户端类型以缓存实例化结果
  4. 手动指定泛型参数减少推导开销
  5. 将大型应用拆分为多个独立的客户端文件

性能与安全

性能

指标数据
包体积~14KB(gzipped),零依赖
路由策略RegExpRouter(默认,正则匹配)、LinearRouter(线性扫描)、SmartRouter(自适应)、TrieRouter(字典树)
冷启动极快,适合 Edge / Serverless
v4.12 改进路由速度提升 2 倍,JSON 响应序列化优化
基准测试TechEmpower 等榜单表现优异,Cloudflare Workers 上延迟通常在 1ms 以内

安全

方面说明
CVE-2026-24398IP 限制中间件漏洞,v4.11.7+ 已修复
JWT / JWK内置 JWT 认证中间件,v4.12.25+ 修复了多个序列化安全问题
CORS / Secure Headers内置中间件,开箱即用
Body Limit请求体大小限制中间件
IP 限制IP Restriction 中间件(需确保版本 ≥ v4.11.7)
Cookie 序列化v4.12.26 修复了 Cookie 序列化安全问题
mount() 安全v4.12.25 修复了 mount() 相关安全问题

建议:生产环境使用最新 v4.12.x 版本,至少 ≥ v4.11.7 以规避已知安全漏洞。


技术对比

Hono RPC vs tRPC vs ts-rest vs oRPC

维度Hono RPCtRPCts-restoRPC
核心定位轻量 HTTP 框架 + 内置 RPC端到端类型安全 RPC 框架类型安全 REST 客户端RPC + REST 兼容
类型安全✅ 通过 AppType 推导✅ 完整端到端✅ 通过 contract 定义✅ 完整端到端
代码生成不需要不需要不需要不需要
HTTP 语义标准 REST自有协议(非标准 REST)标准 RESTREST 兼容
外部消费者友好✅ 标准 HTTP❌ 需 tRPC 客户端✅ 标准 HTTP✅ 标准 HTTP
多运行时✅ Workers/Deno/Bun/Node/Lambda❌ 主要 Node.js✅ 框架无关✅ 框架无关
包体积~14KB~30KB~8KB~5KB
Edge 支持✅ 优秀⚠️ 一般✅ 好✅ 好
OpenAPI 生成需中间件(@hono/zod-openapi需插件内置内置
社区成熟度快速增长(31K+ stars)成熟(44K+ stars)较小新兴
自定义 Procedure❌ 不支持✅ 强大N/A✅ 支持
最佳场景Edge API / 多运行时 / REST 服务全栈 TS monorepo(前后端均 TS)需要 REST + 类型安全tRPC 体验 + REST 兼容

Hono vs Express vs Fastify vs Elysia

维度HonoExpressFastifyElysia
运行时多运行时Node.jsNode.jsBun only
包体积~14KB~800KB+~200KB+~10KB
类型安全✅ 内置 RPC❌ 无⚠️ 有限✅ 内置 RPC
Edge 部署✅ 原生支持❌ 不支持❌ 不支持❌ 不支持
插件生态中等(快速增长)最成熟成熟较小
性能极快较慢极快(Bun)
学习曲线

最佳实践

1. 始终使用验证器

// ✅ 推荐:使用 Zod 验证器,类型自动推导
zValidator('json', postSchema)
 
// ❌ 避免:手动解析 body,丢失类型推导
const body = await c.req.json()

2. 导出路由类型而非 app 实例

// ✅ 推荐:导出具体路由变量类型
const route = app.post('/api/users', handler)
export type AppType = typeof route
 
// ⚠️ 注意:导出整个 app 的类型可能包含不需要的路由

3. 使用 $url() 获取完整 URL

// ✅ 推荐:需要完整 URL 对象
const url = client.api.posts.$url()
 
// ✅ 推荐:仅需路径
const path = client.api.posts.$path()

4. 注入自定义 fetch 实现认证

const client = hc<AppType>('https://api.example.com', {
  fetch: (input, init) => {
    return fetch(input, {
      ...init,
      headers: {
        ...init?.headers,
        Authorization: `Bearer ${getToken()}`,
      },
    })
  },
})

5. 避免 c.notFound() 破坏类型推导

// ✅ 推荐:使用 c.json + 状态码
return c.json({ error: 'Not found' }, 404)
 
// ❌ 避免:c.notFound() 会中断客户端类型推导
return c.notFound()

6. 大型应用拆分客户端

// ✅ 推荐:按模块拆分
import type { UsersType } from './api/users'
import type { PostsType } from './api/posts'
 
const usersClient = hc<UsersType>('...')
const postsClient = hc<PostsType>('...')

7. 配合 SWR / React Query 使用

// 自定义 fetcher
const fetcher = async (key: string) => {
  const res = await client.api.posts.$get()
  return res.json()
}
 
// 在组件中使用
const { data } = useSWR('/api/posts', fetcher)

技术局限与边界

1. 类型推导性能瓶颈

当路由数量超过 100+ 时,TypeScript 编译时间可能从几秒增长到数分钟(GitHub Issue #3869)。需要主动拆分应用、使用 Project References 缓解。

2. IDE 支持差异

  • VS Code:支持最好,类型推导完整
  • WebStorm:存在已知的类型推导问题(WEB-69009),复杂路由可能显示 "Analyzing" 卡住

3. 不支持自定义 Procedure

与 tRPC 不同,Hono RPC 没有类似 tRPC procedure 的中间件抽象层。无法像 tRPC 那样定义 authedProcedure 等可复用的 Procedure 链。

4. unknown 类型推导为 never

当路由返回值中包含 unknown 类型属性时,客户端可能将其推导为 neverGitHub Issue #4368)。

5. 全局错误处理器类型不自动推导

app.onError() 定义的全局错误响应不会被客户端自动推导,需要使用 ApplyGlobalResponse 手动合并。

6. 抽象路由的类型推导限制

使用工厂函数创建抽象路由时,RPC 客户端可能无法获得完整类型提示。

7. 非 TypeScript 客户端无类型安全

Hono RPC 的类型推导完全依赖 TypeScript 类型系统。JavaScript 客户端、curl、Postman 等无法享受类型安全(但 API 仍可正常调用)。


学习资源

官方资源

博客与文章

资源说明
Hey, this is Hono's RPCYusuke Wada 亲笔,讲解 RPC 设计理念
Hono RPC Complete Guide 20262026 年完整 RPC 指南
Type Safety Without Code GenerationfreeCodeCamp,对比 tRPC 与 Hono
Hono vs tRPC vs oRPCsupastarter,2026 年 API 层对比
Hono vs Express vs Fastify 2025Level Up Coding,Next.js 架构指南

视频

资源说明
AWS re:Invent 2025 - Supercharge Lambda with HonoAWS 官方,Lambda + Hono
Hono.js in 20262026 年 Hono 现状分析
The Creator of Hono on Bringing It to Node.js创作者 Yusuke Wada 访谈
The Story of Web Framework HonoCloudflare 官方博客,Hono 创立故事

2026 年现状

框架版本与生态

  • 最新版本:v4.12.28(2026-07-06),持续活跃发布
  • GitHub Stars:31,300+,是 2024 年同期的 1.5 倍
  • npm 周下载量:20,000,000+,进入 JS 生态框架第一梯队
  • Node.js 适配器@hono/node-server v2.0.4,支持 Node.js 22+

社区与采用

  • 知名用户:cdnjs、Cloudflare D1/KV、Unkey、OpenStatus、Clerk、Drivly、repeat.dev
  • Zod 4 兼容@hono/zod-validator 已支持 Zod 4(2025 年发布)
  • Standard Schema:支持通用验证标准,兼容 Zod / Valibot / ArkType
  • 安全维护:2026 年 1 月修复 CVE-2026-24398,持续发布安全补丁

竞争格局

  • vs tRPC:tRPC 仍在全栈 TypeScript monorepo 中占主导,但 Hono RPC 在 Edge / 多运行时 / REST 兼容场景中快速替代 tRPC
  • vs Elysia:Elysia 在 Bun 上性能略优,但 Hono 的多运行时覆盖和 Edge 部署是决定性优势
  • vs Express/Fastify:Hono 在 Edge / Serverless 场景基本取代 Express,传统 Node.js 场景仍由 Express/Fastify 主导
  • vs oRPC / ts-rest:新兴竞争者,各有特色,但 Hono 社区增长最快

趋势判断

Hono 在 2026 年已从"新兴框架"进入"主流选择"阶段:

  1. Edge-first 架构成为云厂商默认推荐,Hono 是此赛道的领导者
  2. RPC 能力被广泛采用,尤其在前端开发者构建全栈应用时
  3. AWS re:Invent 2025 官方推荐 Hono 用于 Lambda 开发
  4. Cloudflare 深度合作,Yusuke Wada 本人是 Cloudflare 工程师
  5. 社区增长曲线陡峭,预计 2026 年底 GitHub Stars 可能突破 40K