Liking cljdoc? Tell your friends :D

This project uses Break Versioning.


Unreleased

New: WebSocket permessage-deflate (RFC 7692)

The server can now accept a client's permessage-deflate offer and compress WebSocket messages, with context takeover in both directions.

Opt in per server with :websocket-compression? true; it is off by default. Related options: :websocket-max-message-size (bounds a message after decompression, defaults to :max-ws) and :websocket-compression-threshold (send messages below a given size uncompressed, default 0).

See WebSocket compression for what is and isn't supported, tuning guidance, and measured trade-offs.


New: outbound backpressure — writable?, on-writable, queued-bytes

A channel accepts everything you send! it, and if the peer stops reading the data queues in the server. That queue was unbounded and silent: one non-reading client took 1364 MB of heap in 8 seconds while send! returned true on all 20 000 calls. HTTP streaming and WebSocket share the write path, so both were affected.

Queued bytes are now counted per connection, in O(1) — incremented by what is enqueued, decremented by SocketChannel.write's return value, under the synchronized (atta) that already guards toWrites. Same units and shape as Netty's ChannelOutboundBuffer.

  • writable? — false once more than :queue-high-water-bytes (default 64 KB) is queued, true again only below :queue-low-water-bytes (default 32 KB). Two marks for hysteresis, as Netty's WriteBufferWaterMark.
  • on-writable — a race-free, one-shot continuation scheduled immediately if already writable or called once when writability is restored, so an application is told rather than having to poll. Equivalent to Netty's channelWritabilityChanged, Node's 'drain', Servlet 3.1's onWritePossible.
  • queued-bytes — the current backlog, for metrics.
  • :max-queued-bytes — a close threshold that schedules the connection for closing. Concurrent producers can overshoot it before the selector closes. Off by default (see below).

send! is unchanged: false still means closed and nothing else. A write past the mark is still accepted, exactly as Netty's write() is.

Why the close threshold is off by default

A size threshold cannot yet distinguish a stalled peer from a large response, because HttpUtils.bodyBuffer materialises a whole body into a single ByteBuffer — a 100 MB download to a perfectly healthy client arrives as one 100 MB enqueue. Measured: with a 64 MiB threshold that download is truncated; with the threshold off it completes. Jetty's equivalent (maxOutgoingFrames) is likewise unlimited by default.

Enable it where responses are small and incremental — WebSocket, SSE — and note the threshold is per connection. A bound safe to enable by default would need to key on stall rather than size, which is a follow-up.

Overflow logs a warning and emits the serverQueueOverflow event, once per connection.

v2.9.0-beta4 (2026-07-31)

This is a security and maintenance pre-release with extensive protocol hardening across the server, client, and WebSocket implementations. It's expected to be stable, but the changes affect core networking paths: please test carefully and report any unexpected problems, thank you! 🙏

See linked commits below for details, and big thanks to all contributors!

- Peter Taoussanis

Security and compatibility note ⚠️

This release rejects several malformed or ambiguous HTTP and WebSocket forms that were previously accepted, and fixes request, response, TLS, redirect, pooling, and resource-limit hazards.

Configured max-body-filter limits now apply to both received and automatically decompressed response sizes. Buffered responses remain unlimited by default; use max-body-filter or :as :stream for untrusted content.

Three uncommon behaviours intentionally change: malformed WebSocket handshakes are rejected, the server now owns wire response framing, and unsupported :tunnel? true proxy requests fail explicitly. Please see the BREAKING entries for affected users and remediation.

Since v2.9.0-beta3 (2025-11-04)

BREAKING

  • [mod] [server] Harden HTTP boundaries [4a37a56]
  • [mod] [server] [GHSA-j9v4-rr7v-r6pw] WebSocket enforce protocol state (@hibrian827) [08950e3]
  • [mod] [client] Proxy reject broken tunnels [06c821f]

Fixes

  • [sec] [server] [GHSA-qwg7-h8j3-975p] Preserve protocol integrity (@vartija) [eb60ccf]
  • [sec] [server] [GHSA-4gx4-prhm-c233] Enforce protocol boundaries (@koyokr) [7876af2]
  • [sec] [client] Preserve protocol integrity [973d386]
  • [sec] [client] Preserve request integrity [f4b60dc]
  • [sec] [client] Enforce message integrity [84c5035]
  • [sec] [client] [GHSA-h7mc-gw66-cwmx] Enforce decoded max-body limits (@EQSTLab) [af93798]
  • [sec] [client] Harden request handling [b8f2a35]
  • [sec] [client] Isolate TLS policies [f922167]
  • [sec] [server] WebSocket preserve close semantics [3c6f1bd]
  • [sec] [server] Proxy validate numeric addresses [7046202]
  • [fix] [server] Preserve response lifecycle [c4a6ff4]
  • [fix] [server] [client] Protocol normalize public contracts [3283c05]
  • [fix] [server] [client] Bodies reduce resource hazards [c0f95e9]
  • [fix] [client] [#609] [#610] make-client to use default SSL configurer if available (@souenzzo) [ef9172c]
  • [fix] [client] [#607] [#608] [#611] Enable SNI with :insecure? true (@Ramblurr) (@souenzzo) [3ba47b8]
  • [prf] [client] Reuse HTTP/1.0 connections [410ec78]
  • [fix] [server] Timer preserve scheduler liveness [2b122dc]
  • [fix] [server] [client] Graal validate current builds [944f97e]

New

  • [new] [client] [#591] [#593] [#602] Make RespListener immediately stream response (@GAumala) [c96eaea]
  • [new] [server] [#606] [#585] Return 400 for protocol exceptions (@caioguedes) [772737f]
  • [new] [server] [#613] Add :protocol to Ring requests to match Ring spec (@souenzzo) [43f3bf1]

v2.9.0-beta3 (2025-11-04)

This is a feature and maintenance pre-release. It's expected to be stable but as always, please test carefully and report any unexpected problems, thank you! 🙏

See linked commits below for details, and big thanks to all contributors!

- Peter Taoussanis

Security note ⚠️

This release includes a new :legacy-unsafe-remote-addr? option for http-kit server kindly provided by @ramblurr. The default value (true) retains the old (unsafe) behaviour for backwards compatibility, but you may want to check the relevant docs and consider a change for improved security.

Since v2.9.0-beta2 (2025-08-19)

  • REVERTED [new] [client] [#591] [#593] Make RespListener immediately stream response (@GAumala) [fc1254c]
  • [fix] [#601] Avoid int overflow in DynamicBytes (@reutsharabani) [e8ade61]

Since v2.8.0 (2024-04-30)

  • [fix] [server] [#584] Reject invalid host header ports (@ianmuge) [de33aed]
  • [fix] [server] [#578] [#579] Fix regression in #375 (@andersmurphy) [76b869f]
  • [fix] [client] [#592] Fix number encoding in MultipartEntity (@GAumala) [2baeab5]
  • [fix] [client] [#574] [#575] Fix possible java.util.zip.ZipException for deflate encodings (@pieterbreed) [42ad799]
  • [fix] [client] [#568] [#569] Fix performance regression (@bsless) [3831982]
  • [fix] [client] [#583] [#594] Don't send Content-Length: 0 if body is nil (@GAumala) [eefe7c1]
  • [fix] [client] [#590] [#576] Fix warning during client tests (@kolstae) [a8a5df8]
  • [new] [server] [#454] [#600] Add :legacy-content-length? option (@Ramblurr) [e33f7c9]
  • [new] [server] [#226] [#599] Add :legacy-unsafe-remote-addr? option for secure IP handling (@ramblurr) [72b4a03]
  • [new] [server] [#588] [#589] Add join-server function (@hlship) [b31d588]
  • [new] [server] [client] [#581] [#582] [#601] Throw instead of trying to allocate impossibly large arrays (@reutsharabani) [e4937b1]
  • [new] [client] [#517] [#567] Add some Java methods to better enable instrumentation (@jefimm) [082eb7f]
  • [new] [client] [#366] [#596] Check for non-text doc types with "text" or "xml" in Content-Type (@TheKostins) [3629757]
  • [doc] Mention utils/new-worker util [1d173fe]
  • [doc] Extend production info section, link directly from README [fd6b993]
  • [doc] [#570] [#572] Add updated WebSocket example to wiki (@jf) [a0d39bf]

v2.9.0-beta2 (2025-08-19)

This is a feature and maintenance pre-release. It's expected to be stable but as always, please test carefully and report any unexpected problems, thank you! 🙏

See linked commits below for details, and big thanks to all contributors!

- Peter Taoussanis

Security note ⚠️

This release includes a new :legacy-unsafe-remote-addr? option for http-kit server kindly provided by @ramblurr. The default value (true) retains the old (unsafe) behaviour for backwards compatibility, but you may want to check the relevant docs and consider a change for improved security.

Since v2.9.0-beta1 (2025-04-15)

  • [fix] [client] [#583] [#594] Don't send Content-Length: 0 if body is nil (@GAumala) [eefe7c1]
  • [new] [client] [#591] [#593] Make RespListener immediately stream response (@GAumala) [cdb06f2]
  • [new] [client] [#366] [#596] Check for non-text doc types with "text" or "xml" in Content-Type (@TheKostins) [3629757]
  • [new] [server] [client] [#581] [#582] Throw instead of trying to allocate impossibly large arrays (@reutsharabani) [e4937b1]
  • [new] [server] [#454] [#600] Add :legacy-content-length? option (@Ramblurr) [e33f7c9]
  • [new] [server] [#226] [#599] Add :legacy-unsafe-remote-addr? option for secure IP handling (@ramblurr) [72b4a03]

v2.8.1 (2025-08-19)

This is a stable hotfix release to backport 2 commits from the v2.9 dev branch:

  • [new] [server] [#588] [#589] Add join-server function (@hlship) [a251a4c]
  • [fix] [client] [#568] [#569] Fix performance regression (@bsless) [a879b3d]

This should be a safe update for users of v2.8.0.


v2.9.0-beta1 (2025-04-15)

This is a feature and maintenance pre-release. It's expected to be stable but as always, please test carefully and report any unexpected problems, thank you! 🙏

See linked commits below for details, and big thanks to all contributors!

- Peter Taoussanis

Since v2.8.0 (2024-04-30)

  • [fix] [server] [#584] Reject invalid host header ports (@ianmuge) [de33aed]
  • [fix] [server] [#578] [#579] Fix regression in #375 (@andersmurphy) [76b869f]
  • [fix] [client] [#592] Fix number encoding in MultipartEntity (@GAumala) [2baeab5]
  • [fix] [client] [#590] [#576] Fix warning during client tests (@kolstae) [a8a5df8]
  • [fix] [client] [#574] [#575] Fix possible java.util.zip.ZipException for deflate encodings (@pieterbreed) [42ad799]
  • [fix] [client] [#568] [#569] Fix performance regression (@bsless) [3831982]
  • [new] [server] [#588] [#589] Add join-server function (@hlship) [b31d588]
  • [new] [client] [#517] [#567] Add some Java methods to better enable instrumentation (@jefimm) [082eb7f]
  • [doc] Mention utils/new-worker util [1d173fe]
  • [doc] Extend production info section, link directly from README [fd6b993]
  • [doc] [#570] [#572] Add updated WebSocket example to wiki (@jf) [a0d39bf]

v2.8.0 (2024-04-30)

Dep/s: http-kit is on Clojars.
Versioning: http-kit uses Break Versioning.

This is a major feature and maintenance release. As always, please test carefully and report any unexpected problems, thank you! 🙏

Highlights include:

  • Support for the latest Ring async and WebSocket APIs
  • Performance improvements, incl. auto use of JVM 21+ virtual threads when available
  • Numerous minor features, fixes, and other improvements

Please see linked commits below for details.

A huge thanks to the 10 contributors who helped create this release!

- Peter Taoussanis

Changes since v2.7.0 (2023-06-30)

  • 6db3f0f [mod] Bump minimum Java version: 7->8
  • If using AOT/uberjar, please ensure that you build with the lowest Java version that you'd like to support.

Fixes since v2.7.0 (2023-06-30)

  • 2474302 [fix] [client] [#535] [#536] Fix handling of some bad ssl certificates (@jeffdik)
  • b9f84d5 [fix] [client] [#523] Basic support for trailer section in chunked encoding responses
  • b45725f [fix] [server] [#543] Migrate away from SimpleDateFormat to java.time, fixes native-image issue (@borkdude)
  • 45a4b53 [fix] [server] [#537] Respond with Connection: Close when appropriate
  • 126d5df [fix] [client] [#528] Possible fix for broken insecure? client option
  • 9be19c0 [fix] [client] [#528] Re-enable insecure SSL client tests disabled for #513
  • de3596a [fix] [server] [#539] [#540] Prevent race condition in TimerService (@weavejester)
  • 99de95b [fix] [server] [#552] [#553] Bad arg order causing broken loggers config (@frwdrik)
  • 2dcfa29 [fix] [server] [#546] Fix Jetty server SNI check in client tests (@weavejester)
  • ed6833e [fix] [client] [#560] Attempted fix to allow SSL with IP host
  • 48cb7fe [fix] [server] [#559] Add missing Content-Type header to last-resort error responses
  • bfba515 [fix] [client] Ignore nil clients, even when they're delay-wrapped
  • 8738140 [fix] [server] [#551] Unintentional code duplication (@slipset)
  • 491e19c [fix] [tests] Flaky timing in CI
  • e2ca731 [fix] Resolve Lein composite profile warning

New since v2.7.0 (2023-06-30)

  • c91a752 [new] [server] [#546] Add support for Ring WebSocket API (@weavejester)
  • 6652df8 [new] [server] [#394] [#538] Add support for Ring async handler arities (@weavejester)
  • 47129af [new] [server] Refactor worker threading, use virtual threads by default on JVM 21+
  • e38169b [new] [client] Refactor worker threading, use virtual threads by default on JVM 21+
  • 741eed8 [new] [tests] Add new benchmark suite
  • 2a74dbf [new] [tests] Add first benchmark results
  • af5550f [new] [client] [#554] Support non-ASCII characters on multipart filenames (@davartens)
  • 41940f3 [new] [client] [server] Add public worker constructors
  • f267426 [new] [client] [server] utils/new-worker improvements
  • 890de2d [new] [client] [#561] [#562] Add :nested-param-style option to client requests (@wevre)

Other improvements since v2.7.0 (2023-06-30)

  • 5379f62 [new] [server] [#546] Also test without support for Ring WebSocket API
  • 4813a17 [nop] [#530] [#531] Update dep: http.async.client (@NoahTheDuke)
  • 9877bca [nop] [client] Don't submit tasks to closed pool
  • 92fc3fe [wiki] Add client page from legacy website (@harold)
  • 9b131e2 [wiki] Clean-up, update client docs
  • Updated dependencies

Everything since v2.8.0-RC1 (2024-02-06)

  • 890de2d [new] [client] [#561] [#562] Add :nested-param-style option to client requests (@wevre)

v2.8.0-RC1 (2024-02-26)

📦 Available on Clojars, this project uses Break Versioning.

This is a major feature and maintenance pre-release.
Please test carefully and report any unexpected problems, thank you! 🙏

Highlights include:

  • Support for the latest Ring async and WebSocket APIs
  • Performance improvements, incl. auto use of JVM 21+ virtual threads when available
  • Numerous minor features, fixes, and other improvements

Please see linked commits below for details.

A huge thanks to all contributors!

Changes since v2.7.x

  • 6db3f0f [mod] Bump minimum Java version: 7->8
  • If using AOT/uberjar, please ensure that you build with the lowest Java version that you'd like to support.

Fixes since v2.7.x

  • 2474302 [fix] [client] [#535] [#536] Fix handling of some bad ssl certificates (@jeffdik)
  • b9f84d5 [fix] [client] [#523] Basic support for trailer section in chunked encoding responses
  • b45725f [fix] [server] [#543] Migrate away from SimpleDateFormat to java.time, fixes native-image issue (@borkdude)
  • 45a4b53 [fix] [server] [#537] Respond with Connection: Close when appropriate
  • 126d5df [fix] [client] [#528] Possible fix for broken insecure? client option
  • 9be19c0 [fix] [client] [#528] Re-enable insecure SSL client tests disabled for #513
  • de3596a [fix] [server] [#539] [#540] Prevent race condition in TimerService (@weavejester)
  • 99de95b [fix] [server] [#552] [#553] Bad arg order causing broken loggers config (@frwdrik)
  • 2dcfa29 [fix] [server] [#546] Fix Jetty server SNI check in client tests (@weavejester)
  • ed6833e [fix] [client] [#560] Attempted fix to allow SSL with IP host
  • 48cb7fe [fix] [server] [#559] Add missing Content-Type header to last-resort error responses
  • bfba515 [fix] [client] Ignore nil clients, even when they're delay-wrapped
  • 8738140 [fix] [server] [#551] Unintentional code duplication (@slipset)
  • 491e19c [fix] [tests] Flaky timing in CI
  • e2ca731 [fix] Resolve Lein composite profile warning

New since v2.7.x

  • c91a752 [new] [server] [#546] Add support for Ring WebSocket API (@weavejester)
  • 6652df8 [new] [server] [#394] [#538] Add support for Ring async handler arities (@weavejester)
  • 47129af [new] [server] Refactor worker threading, use virtual threads by default on JVM 21+
  • e38169b [new] [client] Refactor worker threading, use virtual threads by default on JVM 21+
  • 741eed8 [new] [tests] Add new benchmark suite
  • 2a74dbf [new] [tests] Add first benchmark results
  • af5550f [new] [client] [#554] Support non-ASCII characters on multipart filenames (@davartens)
  • 41940f3 [new] [client] [server] Add public worker constructors
  • f267426 [new] [client] [server] utils/new-worker improvements

Other improvements since v2.7.x

  • 5379f62 [new] [server] [#546] Also test without support for Ring WebSocket API
  • 4813a17 [nop] [#530] [#531] Update dep: http.async.client (@NoahTheDuke)
  • 9877bca [nop] [client] Don't submit tasks to closed pool
  • 92fc3fe [wiki] Add client page from legacy website (@harold)
  • 9b131e2 [wiki] Clean-up, update client docs
  • Updated dependencies

v2.8.0-beta3 (2023-10-11)

📦 Available on Clojars, this project uses Break Versioning.

Hotfix: identical to v2.8.0-beta2 but removes an unintended dependency on Cider. Thanks to @borkdude for the report!

v2.8.0-beta2 (2023-10-11)

📦 Available on Clojars, this project uses Break Versioning.

This is an early maintenance and feature pre-release.
Please test carefully and report any unexpected problems, thank you! 🙏

Fixes since v2.8.0-beta1

  • de3596a [fix] [server] [#539] [#540] Prevent race condition in TimerService (@weavejester)
  • 2474302 [fix] [client] [#535] [#536] Fix handling of some bad ssl certificates (@jeffdik)
  • b45725f [fix] [server] [#543] Migrate away from SimpleDateFormat to java.time, fixes native-image issue (@borkdude)
  • 45a4b53 [fix] [server] [#537] Respond with Connection: Close when appropriate

New since v2.8.0-beta1

  • 741eed8 [new] [tests] Add new benchmark suite
  • 2a74dbf [new] [tests] Add first benchmark results
  • 6652df8 [new] [server] [#394] [#538] Add support for Ring async handler arities (@weavejester)
  • 41940f3 [new] [client] [server] Add public worker constructors
  • f267426 [new] utils/new-worker improvements

Other improvements since v2.8.0-beta1

  • 7d49819 [nop] Bump Jetty dependency, fix broken tests
  • 9877bca [nop] [client] Don't submit tasks to closed pool
  • 92fc3fe [wiki] Add client page from legacy website (@harold)
  • 9b131e2 [wiki] Clean-up, update client docs

v2.8.0-beta1 (2023-09-27)

📦 Available on Clojars, this project uses Break Versioning.

This is an early maintenance and feature pre-release.
Please test carefully and report any unexpected problems, thank you! 🙏

The main improvement in this release is to make it easier to automatically get good performance from http-kit client + server. Virtual threads are now used by default for both client and server on Java 21+, otherwise the default worker pools are now automatically sized based on available processor count.

As before, you may still want to customize your request queue and/or worker threading - but the changes here make it much easier to get started with reasonable defaults.

As always, feedback welcome! Cheers :-)

- Peter Taoussanis

Changes since v2.7.x

  • 6db3f0f [mod] Bump minimum Java version: 7->8

Fixes since v2.7.x

  • b9f84d5 [fix] [client] [#523] Basic support for trailer section in chunked encoding responses
  • 126d5df [fix] [client] [#528] Possible fix for broken insecure? client option
  • 9be19c0 [fix] [client] [#528] Re-enable insecure SSL client tests disabled for #513

New since v2.7.x

  • 47129af [new] [server] Refactor worker threading, use virtual threads by default on JVM 21+
  • e38169b [new] [client] Refactor worker threading, use virtual threads by default on JVM 21+

Other improvements since v2.7.x

  • 4813a17 [nop] [#530] [#531] Update dep: http.async.client (@NoahTheDuke)

v2.7.0 (2023-06-30)

📦 Available on Clojars

Please test carefully and report any issues!

Identical to v2.7.0-RC1 except for:

  • cdfc5fb [fix] [client] [#524] Reliably close InputStream when data too large (@rublag)

Changes since v2.6.0 ⚠️

  • [BREAK] [#528] [Client] Support for :insecure? flag is currently broken
  • 6158351 [mod] [Client] [#501] [#502] Join multiple headers with "\n" rather than "," (@g23)

v2.7.0-RC1 (2023-05-30)

📦 Available on Clojars

Identical to v2.7.0-beta3.


v2.7.0-beta3 (2023-05-03)

📦 Available on Clojars

Identical to v2.7.0-beta2 except for:

  • 10501a5 [fix] [#520] Remove unintended dependency on cider-nrepl plugin (@harold)

v2.7.0-beta2 (2023-04-24)

📦 Available on Clojars

This is a major pre-release that includes many significant fixes and new features.
Please test carefully and report any issues!

A big thanks to the many contributors 🙏

Changes since v2.6.0 ⚠️

  • [BREAK] [#528] [Client] Support for :insecure? flag is currently broken
  • 6158351 [mod] [Client] [#501] [#502] Join multiple headers with "\n" rather than "," (@g23)

New since v2.6.0

  • ed1cb8e [nop] [Docs] Introduced a new community docs wiki
  • e5c8caa [new] [Client] [#393 #513] Use SNI client by default for Java >= 8
  • 02a3739 [new] [Server] [Client] [#510] [#461] Support custom address & channel providers, enable Unix Domain Sockets (@kipz)
  • 17eacca [new] [Client] Support dereffable :client vals
  • 7cba2db [new] [Server] [#504] Add temporary clj-kondo support for with-channel (@figurantpp)
  • eafdfcd [#224 #451] [Client] [New] Add basic multipart/mixed support (@vtrbtf)
  • 4dd4ee5 [#400 #490] [Client] [New] Add :as :raw-byte-array coercion for babashka use case (@xfthhxk)
  • 13e38b8 [#485] [Client] [New] Add HTTP LIST method (@greglook)
  • 727b4f1 [#484] [Server] [New] Add :start-time initial timestamp to requests (@niquola)
  • 754fe88 [#479] [Server] [New] Add org.http-kit.memmap-file-threshold JVM property (@ikappaki)

Fixes since v2.6.0

  • 304c042 [fix] [Client] [#464] Retain dynamic client on client redirects
  • 4ff7dba [fix] [Server] [#498] [#499] Don't send Content-Length header for status 1xx or 204 (@restenb)
  • d6fa328 [fix] [Server] [#375] [EXPERIMENTAL] NB prevent unintentional re-use of channels (@osbert)
  • 2feb510 [fix] [Client] [#446] [EXPERIMENTAL] Use host as key for keepalive conns (@luizhespanha)
  • 48a4688 [fix] [Server] [#504] [#508] Add missing ^:deprecated meta for with-channel, et al.
  • 5b742ed [fix] [Client] [#503] Properly close sockets when calling stop() on client (@benbramley)
  • 7632f46 [fix] [Client] [#505] Prevent duplicate headers in HeaderMap, fix broken tests (@kipz)
  • 550da73 [#493 #491] [Server] [fix] Send '100 Continue' response only once (@zgtm)

Other improvements since v2.6.0

  • c393759 [nop] [Tests] [#508] [#512] Move all tests from with-channel to as-channel (@kipz)
  • e2d7103 [new] [Build] [#509] [#511] Add native-image test to CI (@borkdude)
  • dff3bab [new] [Build] [#507] Add GitHub to build and run tests (@kipz)
  • cf13651 [#495] [Server] [Docs] Improve error message of HTTP server loop error (@tweeks-reify)
  • 88e5a04 [Housekeeping] [Server] Use const for Content-Length header
  • deac8ee [Client] [Docs] Improve client/request docstring
  • 9b04909 Update some dependencies

v2.6.0 (2022-06-13)

[http-kit "2.6.0"]

Non-breaking maintenance release with some fixes and minor features See here recommended steps when updating any Clojure/Script dependencies.

Identical to v2.6.0-RC1.

Changes since v2.5.3

  • [#476] [Server] Optimization: change buildRequestMap to create a PersistentHashMap directly (@bsless)

New since v2.5.3

  • [#471 #472] [Client] Add option to not automatically add Accept-Content header (@MarcoNicolodi)

Fixes since v2.5.3

  • [#469 #489] [Client] Properly unrecycle req when kept-alive conn wasn't able to be reused (@xwang1498)
  • [#475 #477] [Graal] Add --initialize-at-run-time to config to stop GRAAL builds failing (@askonomm)
  • [#482 #483] [Client] Fix java version parsing for JDK 17 (@pmonks)
  • [#401 #481] [Client] mark Request as connected when reusing keepalive (@xwang1498)

Everything since v2.6.0-alpha1

  • [#469 #489] [Fix] [Client] Properly unrecycle req when kept-alive conn wasn't able to be reused (@xwang1498)

v2.6.0-RC1 (2022 May 28)

[http-kit "2.6.0-RC1"]

Non-breaking maintenance release with some fixes and minor features See here recommended steps when updating any Clojure/Script dependencies.

Changes since v2.5.3

  • [#476] [Server] Optimization: change buildRequestMap to create a PersistentHashMap directly (@bsless)

New since v2.5.3

  • [#471 #472] [Client] Add option to not automatically add Accept-Content header (@MarcoNicolodi)

Fixes since v2.5.3

  • [#469 #489] [Client] Properly unrecycle req when kept-alive conn wasn't able to be reused (@xwang1498)
  • [#475 #477] [Graal] Add --initialize-at-run-time to config to stop GRAAL builds failing (@askonomm)
  • [#482 #483] [Client] Fix java version parsing for JDK 17 (@pmonks)
  • [#401 #481] [Client] mark Request as connected when reusing keepalive (@xwang1498)

Everything since v2.6.0-alpha1

  • [#469 #489] [Fix] [Client] Properly unrecycle req when kept-alive conn wasn't able to be reused (@xwang1498)

v2.6.0-alpha1 (2021 Oct 16)

[http-kit "2.6.0-alpha1"]

Non-breaking maintenance release with some fixes and minor features See here recommended steps when updating any Clojure/Script dependencies.

Changes since v2.5.3

  • [#476] [Server] Optimization: change buildRequestMap to create a PersistentHashMap directly (@bsless)

New since v2.5.3

  • [#471 #472] [Client] Add option to not automatically add Accept-Content header (@MarcoNicolodi)

Fixes since v2.5.3

  • [#475 #477] [Graal] Add --initialize-at-run-time to config to stop GRAAL builds failing (@askonomm)
  • [#482 #483] [Client] Fix java version parsing for JDK 17 (@pmonks)
  • [#401 #481] [Client] mark Request as connected when reusing keepalive (@xwang1498)

v2.5.3 (2021 Feb 21)

[http-kit "2.5.3"]

Non-breaking hotfix release. See here recommended steps when updating any Clojure/Script dependencies.

Fixes since v2.5.2

  • [#462 #437] Fix project.clj compiler option to support older JVMs (e.g. Java 8)

v2.5.2 (2021 Feb 19)

[http-kit "2.5.2"]

Non-breaking hotfix release. See here recommended steps when updating any Clojure/Script dependencies.

Fixes since v2.5.1

  • [#457 #456] [Client] Fix race condition in clientContext initialization (@bsless)

v2.5.1 (2021 Jan 14)

[http-kit "2.5.1"]

Non-breaking hotfix release. See here recommended steps when updating any Clojure/Script dependencies.

Fixes since v2.5.0

  • [#455] [Client] Fix Java version parsing used to set default client hostname-verification? option (@aiba)

v2.5.0 (2020 Sep 18)

[http-kit "2.5.0"]

Bumps minimum JVM version from 1.6 to 1.7. Should otherwise be non-breaking.
See here recommended steps when updating any Clojure/Script dependencies.

Identical to v2.5.0-RC1.

Changes since v2.4.0

  • BREAKING: bump minimum JVM version from 1.6 to 1.7
  • [#438 #439][Server] Stop using sun.misc.Unsafe (@kirked)

New since v2.4.0

  • [#434][Client] GraalVM Native Image Compatibility: move SSL initialisation to constructor (@alekcz)
  • [#433 #432 #129] [Server] Configurable server header (@barkanido)
  • [#441][Server] Add 1-arity server-stop!

Fixes since v2.4.0

  • [#429] Fix flaky server-status tests
  • [Server][Tests] Fix lint issue with newer JDKs

Earlier releases

See here for earlier releases.

Can you improve this documentation? These fine people already did:
Peter Taoussanis & Christian Weilbach
Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close