/!\ WIP
Fast, low-allocation, zero-dependency HTTP/1.1 + HTTP/2 + HTTP/3 Ring server adapter for Clojure. Java core optimized for Ring, not a wrapper. Built on/for virtual threads. Plain sync handler.
Expect, TLS via SSLContext.:http2 true). HPACK, flow control,
CONTINUATION reassembly, streaming request/response bodies. 145/146
h2spec pass.libquiche over UDP via JNI shim. Pure-Java
QPACK + H3 framing on top of quiche's transport primitives. Alt-Svc
auto-advertised from h1/h2 responses when h3 enabled. Faster than
Netty h3 in bench — see doc/performance.md.flush!.StreamableResponseBody. Optional ring.core.protocols support.File bodies dispatch via
FileChannel.transferTo(SocketChannel) — zero-copy on plain HTTP.;; core only, no h3
{:deps {com.s-exp/enso {:mvn/version "1.0.0-alphaN"}}}
;; core + per-platform h3 shim
{:deps {com.s-exp/enso {:mvn/version "1.0.0-alphaN"}
com.s-exp/enso$darwin-arm64 {:mvn/version "1.0.0-alphaN"}}}
Classifiers: darwin-arm64, linux-{amd64,arm64},
linux-musl-{amd64,arm64}. Full detail in doc/http3.md.
(require '[s-exp.enso :as enso])
(def server
(enso/run-server
(fn [req] {:status 200 :body "hello"})
{:port 8080}))
(enso/stop server)
libquiche (pure-Java QPACK + H3 framing).
Graceful CONNECTION_CLOSE on shutdown, stateless retry, GOAWAY
monotonicity, control-stream parser with connection-level error
propagation, RFC 9114 header validation. h3spec / quic-interop-runner
pass pending.The HTTP/2 write architecture — dedicated writer vthread, bounded frame
queue, fair lock around HPACK, SSLEngine over SocketChannel — is
inspired by Helidon Níma
(Apache 2.0).
Ensō re-implements the pattern from scratch, no code copied.
Copyright © 2026 Max Penet.
Ensō is distributed under the Mozilla Public License 2.0. Practical summary: https://www.mozilla.org/en-US/MPL/2.0/FAQ/.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |