Hono vs Express: Chọn framework Node.js API nào trong 2026
Chọn Hono cho edge deployment và TypeScript-first DX. Dùng Express nếu bạn có Passport.js hoặc middleware stack đã ổn định mà không đáng đầu tư thay thế.
Bởi Ethan
1.538 từ · 8 phút đọc
Chọn Hono nếu bạn đang deploy lên edge runtime, bắt đầu project TypeScript mới, hoặc cần cold start dưới mili-giây trên Cloudflare Workers. Chọn Express nếu codebase hiện tại của bạn đang dùng Passport.js hoặc một thư viện phụ thuộc vào signature (req, res, next) — chi phí migration sẽ xóa sạch mọi lợi ích hiệu năng bạn kỳ vọng.
Bài này dành cho ai
Các backend engineer đang chọn framework cho Node.js API mới, hoặc nhóm đang đánh giá xem Hono có đáng migrate không. Nếu bạn đang chạy Express v4 ổn định, chưa có lý do thuyết phục để chuyển. Nếu bạn bắt đầu từ đầu — đặc biệt khi nhắm vào edge runtime — hãy đọc tiếp.
Những gì chúng tôi đã kiểm tra
Hono v4.12.21 (phát hành 2026-05-19) so với Express v5.2.1 (v5.0.0 ra mắt tháng 10/2024; v5.1.0 trở thành npm latest vào tháng 3/2025). Express v5 yêu cầu Node.js ≥ 18. Hono chạy trên Node.js ≥ 16, Bun, Deno, Cloudflare Workers, Vercel Edge, Netlify Edge, và AWS Lambda.
Các số liệu hiệu năng lấy từ benchmark chính thức của Hono (hono.dev/docs/concepts/benchmarks), chạy trên Apple M1 Pro (32 GB RAM) cho bộ test Cloudflare Workers và Bombardier (100 concurrent, 10 giây) cho bộ test Deno.
Cài đặt và route đầu tiên
Cả hai framework đều cho bạn server chạy được trong chưa đến mười dòng code.
Hono:
import { Hono } from 'hono'
const app = new Hono()
app.get('/posts/:id', (c) => {
const id = c.req.param('id')
const page = c.req.query('page')
return c.json({ id, page })
})
export default app // works on Workers, Deno, Bun, Node.js
Express v5:
import express from 'express'
const app = express()
app.get('/posts/:id', (req, res) => {
const { id } = req.params
const { page } = req.query
res.json({ id, page })
})
app.listen(3000) // Node.js only
Điểm khác biệt không nằm ở cú pháp — mà ở điểm thoát. export default app của Hono là một fetch handler theo Web API chuẩn, có thể deploy lên bất kỳ runtime nào nói Fetch API. app.listen(3000) của Express gắn chặt bạn với Node.js.
Hono ưu tiên TypeScript ngay từ đầu với kiểu được suy luận sẵn. Express cần thêm @types/express, và kiểu kém chính xác hơn — kiểu tham số route không lan truyền qua handler theo cùng một cách.
Hiệu năng
Lợi thế hiệu năng của Hono thực sự rõ ở mức concurrent cao. Với tải CRUD API thông thường (~100 req/s), không đo được sự khác biệt.
Cloudflare Workers — ops/sec:
| Router | ops/sec | ±% |
|---|---|---|
| Hono | 402,820 | ±4.78% |
| Sunder | 297,036 | ±4.76% |
| itty-router | 212,598 | ±3.11% |
| Worktop | 197,345 | ±2.40% |
Hono nhanh hơn ~35% so với framework Workers đứng thứ hai. Express không có trong bảng này vì không chạy được trên Cloudflare Workers.
Deno — req/s (Bombardier, 100 concurrent):
| Framework | req/s |
|---|---|
| Hono | 136,112 |
| Fast | 103,214 |
| Oak | 43,326 |
| Opine | 30,700 |
Hono đạt thông lượng gấp 3.1× Oak, framework Deno phổ biến trước đây. Express cũng không có mặt — nó không chạy trên Deno.
Trên Node.js ở concurrent cao, Hono xử lý tải tốt hơn Express — dù con số cụ thể từ hono.dev chỉ là ảnh chụp màn hình và không có nguồn trích dẫn trực tiếp. Ở 100 req/s — tải thực tế của một CRUD API — không có chênh lệch độ trễ nào đo được. Đừng chọn Hono vì lý do hiệu năng trên Node.js. Hãy chọn vì khả năng chạy đa runtime. Nếu mô hình bảo mật sandbox của Deno thu hút bạn cùng với tính di động của Hono, xem Deno vs Node.js để so sánh chi tiết.
Lưu ý: TechEmpower Framework Benchmarks đã ngừng hoạt động vào tháng 3/2026. Đừng dùng làm nguồn tham chiếu hiện tại.
Bundle size
| Hono | Express v5 | |
|---|---|---|
| Bundle (gzipped) | 7.2 KB | 236 KB |
| Footprint khi cài | ~14 KB, 0 dependency | ~2 MB dependency |
| Cold start (CF Workers) | Dưới mili-giây | Không được hỗ trợ |
Sự chênh lệch bundle size quan trọng trên edge. Import 236 KB có thể chạm giới hạn cold start của gói miễn phí Cloudflare Workers. Bundle 7.2 KB của Hono thì không.
Hệ sinh thái middleware
Hono đi kèm 25 middleware tích hợp sẵn. Express không có — mọi tính năng đều cần npm install riêng.
| Tính năng | Hono | Express |
|---|---|---|
| CORS | ✅ hono/cors | ❌ package cors |
| JWT auth | ✅ hono/jwt | ❌ express-jwt / passport-jwt |
| CSRF | ✅ hono/csrf | ❌ csurf (deprecated) |
| Secure headers | ✅ hono/secure-headers | ❌ helmet |
| Body limit | ✅ hono/body-limit | ❌ tự xử lý |
| Logger | ✅ hono/logger | ❌ morgan |
| Compression | ✅ hono/compress | ❌ compression |
Về bên thứ ba: Hono có adapter cho Auth.js, Clerk, Firebase Auth, Zod OpenAPI, Sentry, và tRPC. Danh sách đang tăng nhanh nhưng vẫn nông hơn so với hệ sinh thái npm dày dạn mười năm của Express.
Điểm không thể vượt qua: Hono không dùng được Express middleware. Express dùng signature (req, res, next). Hono dùng object Context theo Web Standards. Hai bên không tương thích. Nếu stack của bạn phụ thuộc vào Passport.js — không có cách chuyển trực tiếp. Bạn sẽ phải thay thế bằng adapter Auth.js của Hono. Việc migration đó có đáng không tùy thuộc vào những gì khác bạn đang thay đổi.
Hỗ trợ edge runtime
| Runtime | Hono | Express |
|---|---|---|
| Node.js ≥ 18 | ✅ | ✅ |
| Bun | ✅ | ⚠️ qua compat layer |
| Deno | ✅ | ❌ |
| Cloudflare Workers | ✅ (được hỗ trợ chính thức) | ❌ |
| Vercel Edge Functions | ✅ | ❌ |
| Netlify Edge Functions | ✅ | ❌ |
| AWS Lambda | ✅ | ⚠️ qua serverless-http |
Hướng dẫn framework chính thức của Cloudflare liệt kê Hono là lựa chọn được hỗ trợ cho Workers (developers.cloudflare.com/workers/framework-guides). Nếu bạn đang deploy lên Cloudflare Workers, Hono là lựa chọn hiển nhiên. Xem Cloudflare Workers vs AWS Lambda để quyết định serverless platform nào phù hợp với mô hình triển khai của bạn.
Kết luận
Chọn Hono nếu:
- Bạn đang deploy lên Cloudflare Workers, Deno, Bun, hoặc bất kỳ runtime nào nói Fetch API
- Bạn bắt đầu project mới và muốn TypeScript-first DX với zero-dependency footprint
- Cold start time quan trọng (serverless, edge functions)
- Bạn muốn có security middleware (CORS, JWT, CSRF) mà không cần cài sáu package riêng lẻ
Giữ Express nếu:
- Codebase hiện tại có Passport.js hoặc middleware
(req, res, next)khác - Nhóm của bạn chưa quen với Web Standards
ContextAPI - Độ trưởng thành của hệ sinh thái và các thư viện đã được kiểm chứng trong production quan trọng hơn DX
- Bạn chỉ deploy Node.js và không có kế hoạch thay đổi
Express v5 là bản nâng cấp thực sự từ v4. Riêng việc xử lý lỗi async tự động cũng đủ đáng cho các project Express hiện có. Nhưng nó không thu hẹp khoảng cách với Hono về khả năng đa runtime hay bundle size. Nếu bạn đang cân nhắc Bun cùng với Hono cho API project tiếp theo, Bun vs Node.js sẽ giúp đánh giá runtime này đã sẵn sàng cho production chưa.
Lưu ý về benchmark
Benchmark từ bộ test của Hono cần đọc với thái độ thận trọng thông thường dành cho số liệu do vendor tự công bố — họ chọn workload và máy chạy. Số liệu Deno dùng Hono v3.0.0, không phải v4; các benchmark Node.js/Bun độc lập gần đây từ bộ test chính thức của Hono chỉ là ảnh chụp màn hình và không có nguồn trích dẫn trực tiếp. Câu chuyện hiệu năng ở concurrent cao nhất quán qua nhiều nguồn độc lập, nhưng con số cụ thể nên thúc bạn tự chạy benchmark trên workload thực tế của mình.
Số lượt tải npm: Express ~93–95 triệu lượt/tuần, Hono ~34.5 triệu lượt/tuần. Tốc độ tăng trưởng của Hono là ~40× trong một năm (từ ~934K lên ~37.7 triệu lượt/tuần, tháng 5/2025 → tháng 5/2026) nhưng con số bị thổi phồng bởi CI pipeline và transitive dependency của bundler. Hãy coi cả hai là chỉ số xu hướng phổ biến, không phải tín hiệu sử dụng tuyệt đối.
Bài này có link affiliate đến Cloudflare Workers. Điều đó không ảnh hưởng đến kết luận — Hono là lựa chọn đúng cho Workers deployment bất kể.
Tài liệu tham khảo
- Hono v4.12.21: github.com/honojs/hono
- Benchmark Hono: hono.dev/docs/concepts/benchmarks
- Middleware bên thứ ba của Hono: hono.dev/docs/middleware/third-party
- Express v5 release: expressjs.com/2024/10/15/v5-release.html
- Xu hướng npm: npmtrends.com/express-vs-hono
- Cloudflare Workers + Hono: developers.cloudflare.com/workers/framework-guides
- Vấn đề tương thích middleware Hono: github.com/honojs/hono/issues/3293
- TechEmpower đã ngừng hoạt động: dev.to/kaliumhexacyanoferrat/techempower-framework-benchmarks-are-now-archived-whats-next-3l0a