· hono / express / nodejs

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

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:

Routerops/sec±%
Hono402,820±4.78%
Sunder297,036±4.76%
itty-router212,598±3.11%
Worktop197,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):

Frameworkreq/s
Hono136,112
Fast103,214
Oak43,326
Opine30,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

HonoExpress v5
Bundle (gzipped)7.2 KB236 KB
Footprint khi cài~14 KB, 0 dependency~2 MB dependency
Cold start (CF Workers)Dưới mili-giâyKhô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ăngHonoExpress
CORShono/cors❌ package cors
JWT authhono/jwtexpress-jwt / passport-jwt
CSRFhono/csrfcsurf (deprecated)
Secure headershono/secure-headershelmet
Body limithono/body-limit❌ tự xử lý
Loggerhono/loggermorgan
Compressionhono/compresscompression

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

RuntimeHonoExpress
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 Context API
  • Độ 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