unstale

npm / hono

hono

What changed in hono 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.

20 breaking65 security6 deprecations45 new APIs and options5 performance18 behavior and defaults137 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.0 on npm

hono 4296 changes

Breaking changes 20

  • Rejects request paths that still contain % after decoding, preventing crafted paths from bypassing middleware mounted on a static prefix.

    4.13.11release notes

  • An invalid base64url signature now throws JwtTokenInvalid.

    4.13.9release notes

  • An empty path segment is no longer matched as a parameter.

    4.13.9release notes

  • The Cache Middleware caches QUERY responses using a SHA-256 digest of request content and representation metadata; its internal cache key URL format changes for all methods, so external cache-purge logic may need updating.

    4.13.0release notes

  • RefObject<T> is now { current: T }; type nullable refs as RefObject<T | null> and pass useRef(undefined) instead of useRef().

    4.13.0release notes

  • RegExpRouter detects unsupported path combinations during route registration, so misconfigured routes fail at startup instead of on the first matching request.

    4.13.0release notes

  • 206 Partial Content responses are no longer compressed.

    4.12.30release notes

  • Any non-identity content encoding is treated as binary.

    4.12.29release notes

  • A single 0 group is no longer compressed to ::.

    4.12.23release notes

  • JWT authentication now validates the Authorization scheme and accepts only Bearer rather than any two-part header value.

    4.12.21release notessecurity advisory

  • JWT verify() now rejects falsy, non-finite, or non-numeric exp, nbf, and iat claims instead of allowing them to bypass time-based checks.

    4.12.18release notessecurity advisory

  • decode now validates token format.

    4.12.5release notes

  • decodeHeader now validates token format.

    4.12.5release notes

  • Rejects ;, \r, and \n in domain and path options to prevent cookie attribute manipulation.

    4.12.4release notessecurity advisory

  • Rejects CR/LF characters in event, id, and retry to prevent injection of unintended SSE fields.

    4.12.4release notessecurity advisory

  • JWK/JWKS middleware now requires an explicit algorithm configuration, preventing untrusted JWT header values from influencing verification.

    4.11.4release notes

  • JWT middleware now requires an explicit algorithm configuration, preventing untrusted JWT header values from influencing verification.

    4.11.4release notes

  • Replaces schema-based path tracking with the CurrentPath parameter.

    4.11.0release notes

  • Deletes the NotSpecified type.

    4.10.7release notes

  • Deletes the StrictVerifyOptions type.

    4.10.7release notes

Security 65

  • Plain strings used as children or fallbacks in boundary components, or as root values in server rendering functions, are now HTML-escaped to prevent untrusted strings from being emitted as markup.

    4.13.7release notessecurity advisory

  • hono/jsx renders plain strings unescaped in boundary components, leading to XSS

    4.13.7security advisory

  • Hono: Incomplete fix for CVE-2026-39408: toSSG() still writes files outside the output directory

    4.13.5security advisory

  • Hono: Query parser reads parameters after the URL fragment, causing cache-key and proxy interpretation differentials

    4.13.5security advisoryrelease notes

  • Hono: Unbounded dot-notation nesting in parseBody() can cause memory exhaustion

    4.13.5security advisoryrelease notes

  • Hono: Algorithmic Complexity DoS in Language Middleware

    4.12.34security advisoryrelease notes

  • Fixes quadratic backtracking when parsing Access-Control-Request-Headers if allowHeaders is not configured, preventing long whitespace runs from stalling request processing.

    4.12.34release notessecurity advisory

  • Hono: memo() retains SSR output across requests, leading to cross-user data disclosure

    4.12.34security advisoryrelease notes

  • Hono: Proxy Helper does not remove response headers listed in the Connection header

    4.12.34security advisoryrelease notes

  • Hono: ReDoS in CORS middleware via Access-Control-Request-Headers

    4.12.34security advisory

  • These values are parsed using Object.create(null).

    4.12.32release notes

  • Hono: API Gateway v1 adapter can drop a distinct repeated request header value during de-duplication

    4.12.27security advisory

  • hono/jsx does not isolate context per request, leading to cross-request data disclosure

    4.12.27security advisory

  • Hono: Server-Side XSS via JSX Escaping Bypass in cx() Utility

    4.12.27security advisoryrelease notes

  • The API Gateway v1 and VPC Lattice adapters no longer drop a repeated header value merely because it is a substring of another value.

    4.12.27release notessecurity advisory

  • During SSR, context is isolated per request, so useContext() and useRequestContext() after an await in an async component no longer read another concurrent request's value.

    4.12.27release notessecurity advisory

  • hono: AWS Lambda adapter merges multiple Set-Cookie headers into one value, dropping cookies on ALB single-header and Lattice

    4.12.25security advisoryrelease notes

  • hono: Body Limit Middleware can be bypassed on AWS Lambda by understating Content-Length

    4.12.25security advisoryrelease notes

  • hono: CORS Middleware reflects any Origin with credentials when origin defaults to the wildcard

    4.12.25security advisory

  • Fixes wildcard origin reflection with credentials enabled and no explicit origin, preventing credentialed cross-origin requests from reading cookie-authenticated responses.

    4.12.25release notessecurity advisory

  • hono: Lambda@Edge adapter keeps only the last value of a repeated request header, dropping the rest

    4.12.25security advisory

  • Fixes repeated request headers being overwritten so all values, such as those in X-Forwarded-For, reach the application.

    4.12.25release notessecurity advisory

  • hono: Path traversal in serve-static on Windows via encoded backslash (%5C)

    4.12.25security advisoryrelease notes

  • Mount-prefix stripping now uses the raw URL pathname, preventing percent-encoded paths from being routed incorrectly to the sub-application.

    4.12.21release notessecurity advisory

  • Hono: app.mount() strips mount prefix using undecoded path, causing incorrect routing for percent-encoded paths

    4.12.21security advisory

  • Cookie helper validates sameSite and priority options against injection characters, preventing user-controlled values from injecting attributes into Set-Cookie headers.

    4.12.21release notessecurity advisory

  • Hono: Cookie helper does not sanitize sameSite and priority, allowing Set-Cookie injection

    4.12.21security advisory

  • Hono: IP Restriction bypasses static deny rules for non-canonical IPv6

    4.12.21security advisoryrelease notes

  • Hono: JWT middleware accepts any Authorization scheme, not only Bearer

    4.12.21security advisory

  • Hono has CSS Declaration Injection via Style Object Values in JSX SSR

    4.12.18security advisoryrelease notes

  • Hono has improper validation of NumericDate claims (exp, nbf, iat) in JWT verify()

    4.12.18security advisory

  • Hono's Cache Middleware ignores Vary: Authorization / Vary: Cookie leading to cross-user cache leakage

    4.12.18security advisoryrelease notes

  • Enforces body limits for requests without a reliable Content-Length before oversized requests can reach handlers and return successful responses.

    4.12.16release notessecurity advisory

  • Validates JSX tag names to prevent HTML injection when untrusted input is used as the tag name.

    4.12.16release notessecurity advisory

  • Hono: bodyLimit() can be bypassed for chunked / unknown-length requests

    4.12.16security advisory

  • hono Improperly Handles JSX Attribute Names Allows HTML Injection in hono/jsx SSR

    4.12.14security advisory

  • JSX attribute names are validated during server-side rendering to prevent malformed keys from corrupting generated HTML or injecting unintended attributes or elements.

    4.12.14release notessecurity advisory

  • Hono has incorrect IP matching in ipRestriction() for IPv4-mapped IPv6 addresses

    4.12.12security advisoryrelease notes

  • Hono: Middleware bypass via repeated slashes in serveStatic

    4.12.12security advisoryrelease notes

  • Hono missing validation of cookie name on write path in setCookie()

    4.12.12security advisoryrelease notes

  • Hono: Non-breaking space prefix bypass in cookie name handling in getCookie()

    4.12.12security advisoryrelease notes

  • Hono: Path traversal in toSSG() allows writing files outside the output directory

    4.12.12security advisoryrelease notesrelease notessecurity advisory

  • Regex metacharacters in the bearer auth prefix option are escaped.

    4.12.8release notes

  • Hono vulnerable to Prototype Pollution possible through __proto__ key allowed in parseBody({ dot: true })

    4.12.7security advisory

  • When dot is enabled, parseBody ignores __proto__ path segments to prevent potential prototype pollution when merged with unsafe patterns.

    4.12.7release notes

  • Replaces regex splitting in accept handling to mitigate ReDoS.

    4.12.6release notes

  • Hono vulnerable to arbitrary file access via serveStatic vulnerability

    4.12.4security advisory

  • Hono Vulnerable to Cookie Attribute Injection via Unsanitized domain and path in setCookie()

    4.12.4security advisory

  • Hono Vulnerable to SSE Control Field Injection via CR/LF in writeSSE()

    4.12.4security advisory

  • Fixes inconsistent URL decoding that could let protected static resources bypass route-based middleware.

    4.12.4release notessecurity advisory

  • Uses Math.floor instead of bitwise OR for a safe timestamp.

    4.12.3release notes

  • Hono is Vulnerable to Authentication Bypass by IP Spoofing in AWS Lambda ALB conninfo

    4.12.2security advisory

  • Fixed incorrect handling of X-Forwarded-For in the AWS Lambda adapter behind ALB to prevent IP-based access control bypass.

    4.12.2release notessecurity advisory

  • Hono added timing comparison hardening in basicAuth and bearerAuth

    4.11.10security advisoryrelease notes

  • Fixed a reflected XSS issue that could occur when untrusted strings were rendered without proper escaping.

    4.11.7release notes

  • Hono cache middleware ignores "Cache-Control: private" leading to Web Cache Deception

    4.11.7security advisoryrelease notes

  • Hono has an Arbitrary Key Read in Serve static Middleware (Cloudflare Workers Adapter)

    4.11.7security advisoryrelease notes

  • Hono IPv4 address validation bypass in IP Restriction Middleware allows IP spoofing

    4.11.7security advisoryrelease notes

  • Hono vulnerable to XSS through ErrorBoundary component

    4.11.7security advisory

  • Hono JWK Auth Middleware has JWT algorithm confusion when JWK lacks "alg" (untrusted header.alg fallback)

    4.11.4security advisory

  • Hono JWT Middleware's JWT Algorithm Confusion via Unsafe Default (HS256) Allows Token Forgery and Auth Bypass

    4.11.4security advisory

  • Secure headers now support CSP TrustedTypePolicy.

    4.10.6release notes

  • Hono vulnerable to Vary Header Injection leading to potential CORS Bypass

    4.10.3security advisoryrelease notes

  • Hono Improper Authorization vulnerability

    4.10.2security advisory

  • Adds RFC 7519–compliant audience validation for JWT middleware, allowing applications to reject tokens intended for other audiences.

    4.10.2release notes

Deprecations 6

  • app.mount() still works in v4 but is deprecated and will be removed in v5; use Mount Middleware with app.all() instead.

    4.13.13release notes

  • Adapter imports through hono/<adapter> still work in v4 but are deprecated and will be removed in v5; migrate imports to the separate adapter packages.

    4.13.10release notes

  • hono/cloudflare-pages is deprecated without a replacement package; Cloudflare recommends Workers with static assets.

    4.13.10release notes

  • Deprecated; use invalidAuthenticationHeader.message instead.

    4.10.6release notes

  • Deprecated; use invalidToken.message instead.

    4.10.6release notes

  • Deprecated; use noAuthenticationHeader.message instead.

    4.10.6release notes

New APIs and options 45

  • Mount Middleware is available from hono/mount as a handler that can be registered with app.all().

    4.13.13release notes

  • Set allowPercentInPath to true to serve files whose names contain a literal %.

    4.13.11release notes

  • The AWS Lambda runtime adapter is published as its own package.

    4.13.10release notes

  • The Bun runtime adapter is published as its own package, so imports can use @hono/bun.

    4.13.10release notes

  • The Cloudflare Workers runtime adapter is published as its own package.

    4.13.10release notes

  • The Deno runtime adapter is published as its own package and is also available on JSR.

    4.13.10release notes

  • The Lambda@Edge runtime adapter is published as its own package.

    4.13.10release notes

  • The Netlify runtime adapter is published as its own package.

    4.13.10release notes

  • The service-worker runtime adapter is published as its own package.

    4.13.10release notes

  • The Vercel runtime adapter is published as its own package.

    4.13.10release notes

  • The WebSocket client supports custom buildSearchParams and filters undefined query values.

    4.13.4release notes

  • Adds first-class support for defining handlers for the HTTP QUERY method.

    4.13.0release notes

  • Adds middleware that returns 405 with an Allow header when a path matches a registered route but the request method does not.

    4.13.0release notes

  • Lets you customize the response produced by the Method Not Allowed Middleware.

    4.13.0release notes

  • The JWT and JWK middleware accept a realm option for the WWW-Authenticate challenge on 401 responses, and challenge values are properly escaped.

    4.13.0release notes

  • Adds JWT and Lambda authorizer types for API Gateway v2.

    4.12.32release notes

  • COMPRESSIBLE_CONTENT_TYPE_REGEX is now re-exported.

    4.12.23release notes

  • The compress middleware adds a contentTypeFilter option.

    4.12.23release notes

  • The Context class is now publicly exported.

    4.12.23release notes

  • A new bytes() method is available on requests.

    4.12.19release notes

  • Adds the onCacheNotAvailable option to cache handling.

    4.12.13release notes

  • Adds the skip option to trailing-slash handling.

    4.12.13release notes

  • Adds the classNameSlug option to createCssContext.

    4.12.11release notes

  • Adds the PickResponseByStatusCode type to the client API.

    4.12.9release notes

  • Supports providing jsxRenderer options as a function.

    4.12.6release notes

  • This type helper adds global error response types to all routes in the RPC client.

    4.12.0release notes

  • The ExecutionContext type includes an exports property for Cloudflare Workers, which can be typed through module augmentation with Wrangler's generated types.

    4.12.0release notes

  • getConnInfo() is now available in the AWS Lambda, Cloudflare Pages, and Netlify adapters.

    4.12.0release notes

  • Basic Auth accepts a callback invoked after successful authentication, allowing context variables or logging without re-parsing the Authorization header; async callbacks and verifyUser mode are supported.

    4.12.0release notes

  • The Hono client adds $path(), which returns a path string with optional path and query parameters instead of a full URL.

    4.12.0release notes

  • The SSG plugin generates static HTML redirect pages for HTTP redirect responses, including a refresh tag, canonical link, and robots noindex tag.

    4.12.0release notes

  • When enabled, the middleware redirects before executing handlers, allowing trailing slash handling to work with wildcard routes.

    4.12.0release notes

  • getBunServer is now exported for Bun users.

    4.11.6release notes

  • AlgorithmTypes is exported for use by developers.

    4.11.5release notes

  • The Hono client option customizes how query parameters are serialized.

    4.11.0release notes

  • Module augmentation can customize the NotFoundResponse type so c.notFound() returns a typed response and the client can infer its 404 response type.

    4.11.0release notes

  • The pretty-json middleware supports a force option.

    4.11.0release notes

  • Secure Headers adds support for the CSP report-to directive.

    4.11.0release notes

  • Secure Headers adds support for the CSP report-uri directive.

    4.11.0release notes

  • The Context Storage middleware helper returns undefined instead of throwing an error when the context is not available.

    4.11.0release notes

  • Hono client $url() now returns the exact URL type, including protocol, host, and path, when the base URL is supplied as the second type parameter to hc.

    4.11.0release notes

  • Adds wrapTime to simplify usage.

    4.11.0release notes

  • AWS Lambda handling now supports AWS Lattice events.

    4.10.6release notes

  • Adds a utility to clone the raw Request object after it has been consumed by validators or middleware.

    4.10.0release notes

  • Adds a default SSG plugin that defines the recommended behavior.

    4.10.0release notes

Performance 5

  • Reduces lookup work for large keyed updates and optimizes matching-head child lookup during reconciliation.

    4.13.8release notes

  • Static array header options are pre-joined during initialization.

    4.13.2release notes

  • Low-level optimizations make common routes up to 1.25x faster in the benchmark; route registration plus the first match is roughly 20% faster.

    4.13.0release notes

  • c.json() now creates the Response directly when there is no custom status, headers, or finalized state, avoiding allocation of a Headers object.

    4.12.0release notes

  • TrieRouter performance is improved by approximately 1.5x to 2.0x across the listed route benchmarks.

    4.12.0release notes

Behavior and default changes 18

  • Media type matching supports wildcards and specificity ordering.

    4.13.4release notes

  • pretty-json supports structured JSON content types ending in +json.

    4.13.3release notes

  • Appends Origin to the Vary header on OPTIONS preflight requests.

    4.13.3release notes

  • The CORS Middleware includes QUERY in the default Access-Control-Allow-Methods list; explicitly configured allowMethods values are unchanged.

    4.13.0release notes

  • The ETag Middleware handles conditional QUERY requests and returns 304 Not Modified when If-None-Match matches.

    4.13.0release notes

  • The Compress Middleware sets Vary: Accept-Encoding on negotiated responses.

    4.13.0release notes

  • Cookie names are validated less strictly when parsing the Cookie header.

    4.12.33release notes

  • Function headers are merged with per-request headers in the client.

    4.12.29release notes

  • Charset parameters are specified per MIME type instead of being mechanically detected.

    4.12.22release notes

  • MessagePack is now a compressible content type.

    4.12.22release notes

  • Widens the children type to Child[] for jsx.

    4.12.20release notes

  • bearerAuth is generic for typed context in verifyToken, allowing token verification to use the context type.

    4.12.19release notes

  • The options parameter is now optional in all adapters, so callers can use serveStatic without passing options.

    4.12.19release notes

  • The origin option is now optional in CORSOptions.

    4.12.17release notes

  • The map now includes atom+xml and rss+xml.

    4.12.17release notes

  • normalizeLanguage uses RFC 4647 Lookup-based progressive truncation, so a locale such as ja-JP can match ja when only the base language is supported.

    4.12.0release notes

  • IsAllowedOriginHandler can now be asynchronous, allowing origin checks to complete asynchronously.

    4.10.8release notes

  • IsAllowedSecFetchSiteHandler can now be asynchronous, allowing Sec-Fetch-Site checks to complete asynchronously.

    4.10.8release notes

Fixes and other changes 137

  • JSXNode function component results are now allowed.

    4.13.13release notes

  • Internal types remain private in bundled declarations, avoiding a self-referencing JSX.IntrinsicElements type.

    4.13.12release notes

  • Numeric gridColumnGap values now receive px units.

    4.13.12release notes

  • Numeric gridGap values now receive px units.

    4.13.12release notes

  • Numeric gridRowGap values now receive px units.

    4.13.12release notes

  • The retainedHeader option correctly matches mixed-case header names.

    4.13.12release notes

  • some() now returns a Response when middleware short-circuits.

    4.13.12release notes

  • Types now allow returning a Blob as a response body.

    4.13.10release notes

  • Binary +xml archive media types are treated as binary.

    4.13.9release notes

  • Empty query parameters are preserved.

    4.13.9release notes

  • ErrorBoundary content is replaced across newlines.

    4.13.9release notes

  • Content type detection is synchronized with aws-lambda.

    4.13.9release notes

  • Malformed events fail with a descriptive error.

    4.13.9release notes

  • Media types and language tags are matched case-insensitively.

    4.13.9release notes

  • Responses with unparseable JSON bodies are no longer broken.

    4.13.9release notes

  • Suspense content is replaced across newlines.

    4.13.9release notes

  • Treats the q parameter name as case-insensitive.

    4.13.8release notes

  • Clamps a negative q value to 0 instead of 1.

    4.13.8release notes

  • Skips accept entries with quality 0 when matching.

    4.13.8release notes

  • Respects backpressure when streaming the response body.

    4.13.8release notes

  • Skips accept entries with quality 0 when matching.

    4.13.8release notes

  • Keeps the request media type when reusing a cached body.

    4.13.8release notes

  • Allows symbol keys in get and set fallbacks for Context<any>.

    4.13.6release notes

  • Keeps a parameter value of "index" in $path().

    4.13.6release notes

  • Normalizes root WebSocket URLs.

    4.13.6release notes

  • Keeps a parameter value of "index" in $url().

    4.13.6release notes

  • Abort listeners no longer crash abort().

    4.13.4release notes

  • Cached JSON bodies are serialized when cloning a raw request.

    4.13.4release notes

  • Cloned FormData requests drop stale content length.

    4.13.4release notes

  • Undefined header and cookie values are skipped.

    4.13.4release notes

  • Undefined entries inside query arrays are skipped.

    4.13.4release notes

  • Undefined entries inside form arrays are skipped.

    4.13.4release notes

  • An empty query omits the query delimiter.

    4.13.4release notes

  • ETag matching accepts optional whitespace before the comma in If-None-Match tags.

    4.13.4release notes

  • Previous ref cleanup executes when the ref prop changes on re-render.

    4.13.4release notes

  • Parameters are handled on unmatched requests.

    4.13.4release notes

  • Signed cookies with empty string values can be parsed.

    4.13.4release notes

  • Wildcard middleware is associated with matching routes.

    4.13.4release notes

  • Avoids skipping headers when filtering headers for a 304 response.

    4.13.3release notes

  • Copies pending stream bytes so they are not lost during ETag processing.

    4.13.3release notes

  • Avoids truncating embedded IPv4 addresses when expanding IPv6 addresses.

    4.13.3release notes

  • OPTIONS requests are exempt from CSRF validation.

    4.13.3release notes

  • Prevents URL corruption when replacement values contain $ replacement tokens.

    4.13.3release notes

  • Trie-router matching now handles suffix wildcard routes.

    4.13.3release notes

  • Pattern and linear routers no longer overmatch route prefixes when matching wildcard routes.

    4.13.3release notes

  • Async children of document metadata tags are rendered instead of appearing as [object Promise].

    4.13.2release notes

  • Incremental hashing for chunked responses is corrected and digests are stable across stream chunks.

    4.13.2release notes

  • The client correctly serializes multiple cookies in a request.

    4.13.2release notes

  • The client sends falsy JSON bodies.

    4.13.2release notes

  • Trailing question marks are stripped correctly for optional parameters with regex quantifiers.

    4.13.2release notes

  • Disabled Permissions-Policy directives now output standard empty parentheses instead of none.

    4.13.2release notes

  • Missing W3C Permissions-Policy directives are now supported.

    4.13.2release notes

  • ETag handling skips unsafe methods or error responses in the non-* case.

    4.13.1release notes

  • When pipe() throws, the stream utility re-acquires the writer lock.

    4.13.1release notes

  • Trie routing now counts every slash consumed by a pattern, fixing route matching.

    4.13.1release notes

  • A function component can return an array of children without throwing during server-side rendering.

    4.13.0release notes

  • HTTP field types are synced with the IANA HTTP Field Name Registry, including newly registered fields such as Accept-Query.

    4.13.0release notes

  • Fixes handling of subscription and snapshot changes for useSyncExternalStore in JSX.

    4.12.33release notes

  • CSP callbacks are kept scoped to their header.

    4.12.32release notes

  • An empty SSE id field is emitted to reset Last-Event-ID.

    4.12.32release notes

  • Fixes multipart boundary mismatches in cloned raw requests.

    4.12.31release notes

  • parseBody() reuses cached formData.

    4.12.31release notes

  • The SSE retry field is emitted when retry is 0.

    4.12.31release notes

  • Cache-Control directives are deduplicated case-insensitively.

    4.12.30release notes

  • A duplex value is set when forwarding a stream body in query mode.

    4.12.30release notes

  • replaceUrlParam no longer matches a parameter that prefixes another parameter.

    4.12.30release notes

  • The trie router matches an empty wildcard remainder after a regexp parameter.

    4.12.29release notes

  • An If-None-Match header with the value * is treated as a match.

    4.12.29release notes

  • Extra properties are stripped from array types in JSONParsed.

    4.12.29release notes

  • The handler is resolved with the value passed to the callback.

    4.12.29release notes

  • Content-encoded response bodies are base64 encoded.

    4.12.29release notes

  • V2 events are detected by request context rather than rawPath alone.

    4.12.28release notes

  • Content-Type media types are normalized for case-insensitive matching in body utilities and the validator.

    4.12.28release notes

  • Static serving now treats empty string content as found.

    4.12.28release notes

  • On Bun, WSContext.protocol now reports the requested subprotocol.

    4.12.28release notes

  • Fixed Content-Length body encoding in lambda-edge to satisfy Deno lib types.

    4.12.26release notes

  • The parser expands :: to eight zero groups.

    4.12.24release notes

  • The binary representation of the unspecified address is rendered as ::.

    4.12.24release notes

  • The missing-options error message now mentions verifyToken, making the required option clearer.

    4.12.24release notes

  • Static file paths now normalize all backslashes, not just the first.

    4.12.23release notes

  • The encoding option now respects Accept-Encoding.

    4.12.22release notes

  • The Deno WebSocket upgrade response now echoes the negotiated subprotocol.

    4.12.22release notes

  • Widens the children type to Child[] for jsxFn.

    4.12.20release notes

  • Preserves the base path of a mounted route() app.

    4.12.20release notes

  • Cache entries are keyed by configured vary headers, so requests with different values for those headers use distinct entries.

    4.12.19release notes

  • When multiple cookies have the same name, cookie lookup returns the first one.

    4.12.19release notes

  • Abort handling for streams is fixed.

    4.12.19release notes

  • Middleware response types now propagate to app.on overloads.

    4.12.17release notes

  • SVG attributes on the root svg element are now normalized.

    4.12.17release notes

  • JWT now supports single-line PEM keys.

    4.12.15release notes

  • Request processing now handles invalid header names.

    4.12.14release notes

  • The 9- and 10-handler overloads now infer the response type from the last handler.

    4.12.13release notes

  • Strong ETags are converted to weak ETags when compressing.

    4.12.10release notes

  • The select value is applied after its children are rendered.

    4.12.10release notes

  • Reflects the request origin when credentials is true and the origin is a wildcard.

    4.12.9release notes

  • Makes fire() fallback behavior consistent with handle().

    4.12.9release notes

  • Removes parseBody from bodyCache to prevent a TypeError.

    4.12.9release notes

  • Passes SSG_CONTEXT to forGetInfoURLRequest.

    4.12.9release notes

  • Input extensions are normalized to lowercase before the MIME check.

    4.12.8release notes

  • Aligns link hoisting and deduplication with React 19.

    4.12.6release notes

  • Avoids callback handler deprecation when running on NODEJS_24_X.

    4.12.6release notes

  • Fixes the “Invalid state: Controller is already closed” error in JSX.

    4.12.5release notes

  • When the path type is any, param() returns string | undefined.

    4.12.5release notes

  • Preserves the route schema in ApplyGlobalResponse.

    4.12.4release notes

  • Removes DOM type dependencies from ClientResponse and the request method.

    4.12.3release notes

  • Prevents a type diff bug when parsing form data.

    4.12.3release notes

  • Avoids mutating the options object to prevent a memory leak.

    4.12.3release notes

  • Corrects JwtVariables for ContextVariableMap.

    4.12.3release notes

  • Corrects middleware types.

    4.12.3release notes

  • Removes DOM type dependencies from ClientResponse and the request method.

    4.12.3release notes

  • Exported from hono/client so developers can use ApplyGlobalResponse from the client package.

    4.12.1release notes

  • JSX DOM rendering now handles empty arrays in the render children loop.

    4.12.0release notes

  • Client form data serialization now skips undefined values.

    4.12.0release notes

  • getPath() ignores fragment identifiers when determining the path.

    4.11.9release notes

  • Makes the auth scheme case-insensitive.

    4.11.8release notes

  • Preserves context when using await before the html helper.

    4.11.8release notes

  • writeSSE now handles \r and \r\n line endings.

    4.11.6release notes

  • The JWKS allowedAlgorithms typing is marked to let users pass a const value.

    4.11.5release notes

  • The ClientRequest type excludes $all.

    4.11.5release notes

  • Fixes middleware union type merging in MergeMiddlewareResponse.

    4.11.3release notes

  • Preserves literal union types in input type inference.

    4.11.2release notes

  • Fixed array type inference for the app.on method.

    4.11.1release notes

  • Hono JSX displays blank when children is nullish.

    4.11.0release notes

  • Fixes incorrect app typing with pathless handlers.

    4.11.0release notes

  • Fixes incorrect path matching in the linear router.

    4.10.8release notes

  • Fixes a TypeError: null is not an object in the Bun adapter.

    4.10.7release notes

  • Adds a JSX type for hono/jsx/dom.

    4.10.7release notes

  • Fixes incomplete types for the validator.

    4.10.7release notes

  • The cache middleware skips caching when the response includes Vary: *.

    4.10.5release notes

  • Wrapped empty JSX tags are now self-closed.

    4.10.5release notes

  • Query parameter lookup now searches behind the question mark.

    4.10.5release notes

  • Preserves handler response typing in createHandlers, allowing developers to retain response types when using the helper.

    4.10.4release notes

  • The Lambda handler serves Microsoft Office files as binary.

    4.10.3release notes

  • Request ID validation accepts the = character.

    4.10.3release notes

  • Fixes types so .use accepts non-returning middleware created with createMiddleware.

    4.10.1release notes

  • Corrects proxy handling of hop-by-hop headers per RFC 9110.

    4.10.0release notes

  • Middleware response types are now passed through so RPC clients can correctly infer response types.

    4.10.0release notes