Hono v4.1.0 is now available! Let's take a look at the new features.
WebSocket Helper
Now Hono supports WebSockets! With WebSocket helper, you can easily handle WebSockets in your application. Currently, Cloudflare Workers / Pages, Deno, and Bun adapters are available.
const app = new Hono()
app.get(
'/ws',
upgradeWebSocket((c) => {
return {
onMessage(event, ws) {
console.log(`Message from client: ${event.data}`)
ws.send('Hello from server!')
},
onClose: () => {
console.log('Connection closed')
}
}
})
)
PRC mode is now also supported for WebSockets endpoints. The following is a demo.
Thanks @nakasyou!
Body Limit Middleware
Introducing Body Limit Middleware. This middleware can limit the file size of the request body.
const app = new Hono()
app.post(
'/upload',
bodyLimit({
maxSize: 50 * 1024, // 50kb
onError: (c) => {
return c.text('overflow :(', 413)
}
}),
async (c) => {
const body = await c.req.parseBody()
if (body['file'] instanceof File) {
console.log(`Got file sized: ${body['file'].size}`)
}
return c.text('pass :)')
}
)
Thanks @EdamAme-x and @usualoma!
ES2022
We made the target
in the tsconfig.json
as ES2022 instead of ES2020. So, the generated JavaScript files are now ES2022. That made the file size smaller! The following is the result of the minify and build of "Hello World" with Wrangler.
// ES2020
hono => Total Upload: 20.15 KiB / gzip: 7.42 KiB
hono/tiny => Total Upload: 12.74 KiB / gzip: 4.69 KiB
// ES2022
hono => Total Upload: 18.46 KiB / gzip: 7.09 KiB
hono/tiny => Total Upload: 11.12 KiB / gzip: 4.38 KiB
Performance has also been improved in some Node.js environments.
Other features
- Cookie Helper - Supports
__Secure-
and__Host- prefix
#2269 - Cookie Helper - Check bis condition #2314
- jsx/dom - Add more React staff #2197
- SSG - Generate files concurrently #2187
- HTTP Exception - Add
cause
option #2224 - Logger - Support
NO_COLOR
#2228
All Updates
- feat: Add a "cause" option to HTTPException by @Karibash in #2224
- feat(logger): support
NO_COLOR
by @ryuapp in #2228 - feat(cookie): add secure and host prefix support by @Datron in #2269
- feat(ssg): generate files concurrently by @usualoma in #2187
- feat(jsx): more react staff by @usualoma in #2197
- feat: introduce Body Limit Middleware using stream by @yusukebe in #2309
- feat: Introduce WebSocket Helper / Adapter by @nakasyou in #2265
- refactor(SSG): separate middleware logic by @watany-dev in #2315
- chore: bump up
@hono/node-server
by @yusukebe in #2323 - fix(body-limit): export
bodyLimit
for Deno by @yusukebe in #2324 - fix(websocket): export WebSocket helper for Deno by @yusukebe in #2325
- feat(cookie): Add Cookie bis condition check by @Jxck in #2314
- Next by @yusukebe in #2327
New Contributors
- @Karibash made their first contribution in #2224
- @Datron made their first contribution in #2269
- @Jxck made their first contribution in #2314
Full Changelog: v4.0.10...v4.1.0