Skip to content

Releases: honojs/hono

v4.6.2

17 Sep 01:16
Compare
Choose a tag to compare

What's Changed

  • chore(lint): ESLint v9 by @yusukebe in #3393
  • perf(serve-static): performance optimization for precompressed feature by @usualoma in #3414
  • fix(serve-static): use application/octet-stream if the mime type is not detected by @usualoma in #3415

Full Changelog: v4.6.1...v4.6.2

v4.6.1

11 Sep 13:47
Compare
Choose a tag to compare

What's Changed

  • fix(build): improve addExtension esbuild plugin by @kt3k in #3405

New Contributors

Full Changelog: v4.6.0...v4.6.1

v4.6.0

11 Sep 12:16
Compare
Choose a tag to compare

Hono v4.6.0 is now available!

One of the highlights of this release is the Context Storage Middleware. Let's introduce it.

Context Storage Middleware

Many users may have been waiting for this feature. The Context Storage Middleware uses AsyncLocalStorage to allow handling of the current Context object even outside of handlers.

For example, letโ€™s define a Hono app with a variable message: string.

type Env = {
  Variables: {
    message: string
  }
}

const app = new Hono<Env>()

To enable Context Storage Middleware, register contextStorage() as middleware at the top and set the message value.

import { contextStorage } from 'hono/context-storage'

//...

app.use(contextStorage())

app.use(async (c, next) => {
  c.set('message', 'Hello!')
  await next()
})

getContext() returns the current Context object, allowing you to get the value of the message variable outside the handler.

import { getContext } from 'hono/context-storage'

app.get('/', (c) => {
  return c.text(getMessage())
})

// Access the variable outside the handler.
const getMessage = () => {
  return getContext<Env>().var.message
}

In the case of Cloudflare Workers, you can also access the Bindings outside the handler by using this middleware.

type Env = {
  Bindings: {
    KV: KVNamespace
  }
}

const app = new Hono<Env>()

app.use(contextStorage())

const setKV = (value: string) => {
  return getContext<Env>().env.KV.put('key', value)
}

Thanks @marceloverdijk !

New features

  • feat(secureHeader): add Permissions-Policy header to secure headers middleware #3314
  • feat(cloudflare-pages): enable c.env.eventContext in handleMiddleware #3332
  • feat(websocket): Add generics type to WSContext #3337
  • feat(jsx-renderer): set Content-Encoding when stream is true #3355
  • feat(serveStatic): add precompressed option #3366
  • feat(helper/streaming): Support Promise<string> or (async) JSX.Element in streamSSE #3344
  • feat(context): make fetch Response headers mutable #3318
  • feat(serve-static): add onFound option #3396
  • feat(basic-auth): added custom response message option #3371
  • feat(bearer-auth): added custom response message options #3372

Other changes

  • chore(jsx-renderer): fix typo in JSDoc by @taga3s in #3378
  • chore(deno): use the latest jsr libraries for testing by @ryuapp in #3375
  • fix(secure-headers): optimize getPermissionsPolicyDirectives function by @kbkn3 in #3398
  • fix(bearer-auth): typo by @yusukebe in #3404

New Contributors

Full Changelog: v4.5.11...v4.6.0

v4.5.11

03 Sep 08:16
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v4.5.10...v4.5.11

v4.5.10

31 Aug 02:34
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v4.5.9...v4.5.10

v4.5.9

26 Aug 12:35
Compare
Choose a tag to compare

What's Changed

  • test(types): broken test in future versions of typescript by @m-shaka in #3310
  • fix(utils/color): Deno does not require permission for NO_COLOR by @ryuapp in #3306
  • feat(jsx): improve type (MIME) attribute types by @ssssota in #3305
  • feat(pretty-json): support custom query by @nakasyou in #3300

Full Changelog: v4.5.8...v4.5.9

v4.5.8

22 Aug 07:14
Compare
Choose a tag to compare

Security Fix for CSRF Protection Middleware

Before this release, in versions 4.5.7 and below, the CSRF Protection Middleware did not treat requests including Content-Types with uppercase letters (e.g., Application/x-www-form-urlencoded) as potential attacks, allowing them to pass.

This could cause unexpected behavior, leading to a vulnerability. If you are using the CSRF Protection Middleware, please upgrade to version 4.5.8 or higher immediately.

For more details, see the report here: GHSA-rpfr-3m35-5vx5

v4.5.7

21 Aug 02:15
Compare
Choose a tag to compare

What's Changed

  • fix(jsx/dom): Fixed a bug that caused Script elements to turn into Style elements. by @usualoma in #3294
  • perf(jsx/dom): improve performance by @usualoma in #3288
  • feat(jsx): improve a-tag types with well known values by @ssssota in #3287
  • fix(validator): Fixed a bug in hono/validator where URL Encoded Data could not be validated if the Content-Type included charset. by @uttk in #3297
  • feat(jsx): improve target and formtarget attribute types by @ssssota in #3299
  • docs(README): change Twitter to X by @nakasyou in #3301
  • fix(client): replace optional params to url correctly by @yusukebe in #3304
  • feat(jsx): improve input attribute types based on react by @ssssota in #3302

New Contributors

Full Changelog: v4.5.6...v4.5.7