Documentation | Latest releases | Get support
http-kit is a minimalist and efficient Ring-compatible HTTP client+server for Clojure.
It uses an event-driven architecture to support highly concurrent a/synchronous web applications, and features a simple unified API for WebSocket and HTTP long-polling/streaming.
See here for earlier releases.
Ring compliant: http-kit is a drop-in replacement for the standard Ring Jetty adapter. You can use it with all your current libraries and middleware.
High performance: http-kit uses an event-driven architecture like nginx, and is fast. See here for benchmarks.
High concurrency: http-kit is efficient. Its RAM usage is O(n), with only few kB used per connection. Tests have shown http-kit happily serving >600k concurrent connections.
Clean, simple, small: written from the ground-up to be lean, the entire http-kit client+server JAR is ~90kB with zero dependencies and ~3k total lines of code.
Sync or async: synchronous is simple, asynchronous fast & flexible. With http-kit you get the best of both with a simple API that lets you mix & match to best fit your use case.
WebSockets: realtime web apps are a breeze with http-kit, with great out-the-box support for both WebSockets and efficient HTTP long-polling.
http-kit includes an extensive and easy-to-use benchmark suite.
To run the benchmark suite on your own system:
rake bench
or rake bench['{<edn-opts>}']
from the repo's root dirDetailed results will be automatically exported to .edn
and .csv
files.
See the benchmark namespace for more info on options and advanced usage.
A good benchmark is clear, accurate, and useful for some well-defined purpose. Designing good benchmarks can be surprisingly difficult, especially general-purpose comparative benchmarks.
And unfortunately the accurate interpretation of results can often be just as difficult.
It's tempting to want to conclude that "X is faster/cheaper/better than Y", but real-world trade-offs mean that these kind of simplistic statements rarely make sense without a good bit of context.
The approach I've taken with the benchmarks here is to emphasize testing across a wide range of parameters (currently 480 combinations in total).
All the results are available in detailed .csv files and Google sheets, making it easy to filter and compare the results most applicable to your particular scenario and goals.
I'd also encourage folks to explore the extensive customization options, and to be critical of the methodology used.
Additions and improvements are very welcome!
TODO (ETA: 2023-10-05)
http-kit was created by @shenfeng, but is currently being maintained by its community.
A big thank-you to the current contributors for keeping the project going! Additional contributors very welcome: please ping me if you'd be interested in lending a hand.
Copyright © 2012-2023 Feng Shen and contributors.
Licensed under Apache 2.0.
Can you improve this documentation? These fine people already did:
feng, Peter Taoussanis, James Carnegie, Ben Sless, iacopo, Philip Aston, Dmitri Sotnikov, Samy Dindane, Alexander Oloo, Michiel Borkent & Francesco PischeddaEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close