Running as a Netty-based server

Warning! This is an early development module, with important features missing.

To expose an endpoint using a Netty-based server, first add the following dependency:

"com.softwaremill.sttp.tapir" %% "tapir-netty-server" % "0.19.0-M10"

Then, use:

  • NettyFutureServer().addEndpoints to expose Future-based server endpoints.
  • NettyCatsServer().addEndpoints to expose F-based server endpoints, where F is any cats-effect supported effect.

For example:

import sttp.tapir._
import sttp.tapir.server.netty.{NettyFutureServer, NettyFutureServerBinding}

import scala.concurrent.Future

val helloWorld = endpoint
  .serverLogic(name => Future.successful[Either[Unit, String]](Right(s"Hello, $name!")))

val binding: Future[NettyFutureServerBinding] = 


The interpreter can be configured by providing an NettyFutureServerOptions value, see server options for details.

Some options can be configured directly using a NettyFutureServer instance, such as the host and port. Others can be passed using the NettyFutureServer(options) methods. Options may also be overridden when adding endpoints.

Defining an endpoint together with the server logic

It’s also possible to define an endpoint together with the server logic in a single, more concise step. See server logic for details.