Features
Features of genhttp-kt, the Kotlin port of the GenHTTP web server: frameworks, standards, its engines and how it is verified.
Frameworks
genhttp-kt provides several frameworks to develop and host web services (service classes, controllers or functional handlers). Additionally, you can easily host static websites or a single page application. Besides this, the framework comes with a rich set of features:
- Automatically generated Open API specifications, with Scalar, Redoc or Swagger UI to browse them
- Various authentication methods (API keys, JWT, client certificates or basic authentication)
- Support for Websockets and Server Sent Events (SSE)
- Automatic response compression (Brotli, Zstandard, gzip) and request decompression
- Client caching directives and automatic ETag handling
- Range support to fetch byte ranges
- Security relevant features, such as CORS policies and an automatic redirection to HTTPS
- JSON, XML, YAML, form and Protobuf serialization, dependency injection with Koin
All of them are documented in the documentation.
Server Performance
According to HTTP Arena, genhttp-kt is among the fastest Kotlin web servers for HTTP/1.1. The following excerpt shows how it compares to the Java and Kotlin frameworks in the field, each without tuning:
| Framework | Language | Score (Composite H1) |
|---|---|---|
ktron | Kotlin | 7711 |
genhttp-kt-netty | Kotlin | 5648 |
vertx | Java | 4874 |
micronaut | Java | 3989 |
genhttp-kt | Kotlin | 3869 |
helidon | Java | 3516 |
ktor | Kotlin | 2796 |
neton | Kotlin | 2100 |
jooby | Java | 1993 |
http4k | Kotlin | 1633 |
spring-boot | Java | 1509 |
As the leaderboard showed them on October 24, 2026.
With the Netty engine, genhttp-kt ranks second of all the Java and Kotlin frameworks in the field. The internal engine is 1.4 times faster than Ktor and 2.6 times faster than Spring Boot in a mixed challenge with different use cases and usage scenarios.
Made for Kotlin
genhttp-kt is not a wrapper around a Java server - it is GenHTTP, written in Kotlin:
- Coroutines all the way. Handlers, concerns and operations are
suspendfunctions. Suspend whenever you like - wait for a database, adelayor a channel - without holding a thread. - Virtual threads or event loops. On the internal engine, every connection runs as a coroutine on a dispatcher backed by virtual threads, reading and writing through NIO - blocking code is fine as well, a blocking call only parks a virtual thread. On the Netty engine, every connection runs as a coroutine on the event loop that accepted it, for handlers that suspend rather than block.
- Kotlin types. Data classes are serialized as they are, nullability is respected when
requests are mapped,
kotlin.time.Durationandjava.timeare used where GenHTTP usesTimeSpanandDateTime. - Few dependencies. The internal engine and the core modules need the Kotlin standard library, kotlinx.coroutines and the SLF4J API. A module that needs more - Jackson, swagger-core, Pebble, Nimbus - brings it along.
Engines
genhttp-kt has two HTTP/1.1 engines: the port of the internal engine of GenHTTP, with TLS
through the SSLEngine of the JDK, and the Netty engine - the counterpart of GenHTTP’s ioxide
engine - with one event loop per CPU core on epoll or io_uring and TLS through OpenSSL. Both
select certificates per host name (SNI) and parse requests with a port of
Glyph11, a hardened parser for HTTP/1.1, and your
application runs on either without changes. See Engines for how
they work and which one to choose.
Verified Against GenHTTP
The port is checked against GenHTTP on every build: more than 1,000 tests mirrored one to one from GenHTTP and Glyph11, a comparison of the public API, reviewed API dumps, at least 90 % line coverage, on Linux, Windows and macOS. About the Port tells how it is made and kept in sync.