Hono
Hono —— 在日语中意为火焰🔥 —— 是一个基于 Web 标准构建的小巧、简单且极速的 Web 应用框架。 它能够运行在任意 JavaScript 运行时:Cloudflare Workers、Fastly Compute、Deno、Bun、Vercel、Netlify、AWS Lambda、Lambda@Edge,以及 Node.js。
快,而且不止于快。
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hono!'))
export default app
快速上手
只需运行下列命令之一:
npm create hono@latest
yarn create hono
pnpm create hono@latest
bun create hono@latest
deno init --npm hono@latest
核心特性
- 极速性能 🚀 ——
RegExpRouter
路由器拥有极致性能,没有线性循环,真正的快。 - 轻量体积 🪶 ——
hono/tiny
预设压缩后小于 14kB。Hono 没有任何依赖,只使用 Web 标准。 - 多运行时 🌍 —— 兼容 Cloudflare Workers、Fastly Compute、Deno、Bun、AWS Lambda 与 Node.js,同一份代码跑遍所有平台。
- 电池全配 🔋 —— 内置中间件、可自定义中间件、第三方中间件与助手函数,开箱即用。
- 愉悦的开发体验 😃 —— API 简洁清晰,对 TypeScript 提供一流支持,如今还拥抱了完备的类型系统。
适用场景
Hono 是一个类似 Express 的纯后端 Web 应用框架,没有前端层。 它可以在 CDN 边缘运行,与中间件组合即可搭建更大的应用。 以下是几个典型案例:
- 构建 Web API
- 作为后端服务器的代理
- CDN 边缘的入口层
- 边缘计算应用
- 库或框架的基础服务器
- 全栈应用
谁在使用 Hono?
项目 | 平台 | 用途 |
---|---|---|
cdnjs | Cloudflare Workers | 免费开源的 CDN 服务,Hono 被用于提供 API 服务。 |
Cloudflare D1 | Cloudflare Workers | 无服务器 SQL 数据库,Hono 被用于内部 API 服务。 |
Cloudflare Workers KV | Cloudflare Workers | 无服务器键值数据库,Hono 被用于内部 API 服务。 |
BaseAI | 本地 AI 服务器 | 带有记忆功能的无服务器 AI Agent 流水线开源框架,使用 Hono 搭建 API 服务器。 |
Unkey | Cloudflare Workers | 开源的 API 鉴权与授权平台,Hono 被用于 API 服务器。 |
OpenStatus | Bun | 开源的网站与 API 监控平台,Hono 被用于 API 服务器。 |
Deno Benchmarks | Deno | 基于 V8 的安全 TypeScript 运行时,Hono 用于基准测试。 |
Clerk | Cloudflare Workers | 开源的用户管理平台,Hono 被用于 API 服务器。 |
还有以下团队也在生产环境中使用 Hono:
- Drivly - Cloudflare Workers
- repeat.dev - Cloudflare Workers
想了解更多?请访问 Who is using Hono in production?。
一分钟体验 Hono
以下演示展示了如何使用 Hono 在 Cloudflare Workers 上创建应用。
极速表现
在 Cloudflare Workers 的各类路由器中,Hono 是最快的。
Hono x 402,820 ops/sec ±4.78% (80 runs sampled)
itty-router x 212,598 ops/sec ±3.11% (87 runs sampled)
sunder x 297,036 ops/sec ±4.76% (77 runs sampled)
worktop x 197,345 ops/sec ±2.40% (88 runs sampled)
Fastest is Hono
✨ Done in 28.06s.
查看 更多基准测试。
轻量体积
**Hono 非常小。**在使用 hono/tiny
预设并压缩后,体积 低于 14KB。 拥有众多中间件和适配器,但只会在使用时才打包。作为对比,Express 的体积为 572KB。
$ npx wrangler dev --minify ./src/index.ts
⛅️ wrangler 2.20.0
--------------------
⬣ Listening at http://0.0.0.0:8787
- http://127.0.0.1:8787
- http://192.168.128.165:8787
Total Upload: 11.47 KiB / gzip: 4.34 KiB
多款路由器
Hono 提供多种路由器实现。
RegExpRouter 是 JavaScript 世界中最快的路由器。它在派发前先构建一个巨大的正则表达式,用以匹配路由。配合 SmartRouter,即可支持所有路由模式。
LinearRouter 能够极快地注册路由,适用于每次请求都会初始化应用的运行时。PatternRouter 则以简单的方式添加并匹配路由模式,让体积更小。
查看 更多关于路由的信息。
Web 标准
得益于 Web 标准,Hono 可以运行在众多平台上。
- Cloudflare Workers
- Cloudflare Pages
- Fastly Compute
- Deno
- Bun
- Vercel
- AWS Lambda
- Lambda@Edge
- 以及更多
通过使用 Node.js 适配器,Hono 也能在 Node.js 上运行。
查看 更多关于 Web 标准的信息。
中间件与助手
Hono 拥有大量中间件与助手函数,真正实现“写得更少,做得更多”。
开箱即用的中间件与助手包括:
- Basic Authentication
- Bearer Authentication
- Body Limit
- Cache
- Compress
- Context Storage
- Cookie
- CORS
- ETag
- html
- JSX
- JWT Authentication
- Logger
- Language
- Pretty JSON
- Secure Headers
- SSG
- Streaming
- GraphQL Server
- Firebase Authentication
- Sentry
- 以及更多!
例如,在 Hono 中仅需几行代码就能加入 ETag 与请求日志:
import { Hono } from 'hono'
import { etag } from 'hono/etag'
import { logger } from 'hono/logger'
const app = new Hono()
app.use(etag(), logger())
查看 更多关于中间件的信息。
开发者体验
Hono 带来令人愉悦的“开发者体验”。
得益于 Context
对象,可以轻松获取 Request/Response。 此外,Hono 采用 TypeScript 编写,自带“类型”。
例如,路径参数会被推断为字面量类型。
借助 Validator 与 Hono Client hc
,可以启用 RPC 模式。 在该模式下,你可以继续使用自己喜爱的校验器(如 Zod),轻松在服务端与客户端之间共享 API 规范,从而构建类型安全的应用。
查看 Hono Stacks。