From 0.20 to 1.0

  • EndpointVerifier is moved to a separate tapir-testing module

  • customJsonBody is renamed to customCodecJsonBody

  • anyFromStringBody is renamed to stringBodyAnyFormat

  • anyFromUtf8StringBody is renamed to stringBodyUtf8AnyFormat

  • CustomInterceptors is renamed to CustomiseInterceptors as this better reflects the functionality of the class

  • CustomiseInterceptors.errorOutput is renamed to .defaultHandlers, with additional options added.

  • in custom server interpreters, the RejectInterecptor must be now disabled explicitly using RejectInterceptor.disableWhenSingleEndpoint when a single endpoint is being interpreted; the ServerInterpreter no longer knows about all endpoints, as it is now parametrised with a function which gives the potentially matching endpoints, given a ServerRequest

  • the names of Prometheus and OpenTelemetry metrics have changed; there are now three metrics (requests active, total and duration), instead of the previous 4 (requests active, total, response total and duration). Moreover, the request duration metric includes an additional label - phase (either headers or body), measuring how long it takes to create the headers or the body.

  • CustomiseInterceptors.appendInterceptor is replaced with .addInterceptor; .prependInterceptor and .appendInterceptor methods are also added

  • RequestHandler, returned by RequestInterceptor, now also accepts a list of server endpoints. This allows to dynamically filter the endpoints. Moreover, there’s a new type parameter in RequestInterceptor and RequestHandler, R, specifying the capabilities required by the given server endpoints.

  • the http4s server interpreters have only one effect parameter, instead of two (F for the general effect and G for the body effect). This separation stopped making sense with the introduction of BodyListener some time ago and keeping ServerInterpreter using a single effect.

  • the Swagger and Redoc UIs by default use relative paths for yaml/json documentation references and for redirects. This can be changed by passing appropriate options.

  • The streamBinaryBody method now has a mandatory format parameter, which previously was fixed to be CodecFormat.OctetStream()

Moved traits, classes, objects

  • server interpreters & interceptors have moved from core into the server/core module

  • ServerResponse and ValuedEndpointOutput are moved to sttp.tapir.server.model

  • metrics classes and interceptors have moved to the sttp.tapir.server.metrics package

  • Endpoint.renderPathTemplate is renamed to Endpoint.showPathTemplate

  • web socket exceptions UnsupportedWebSocketFrameException and WebSocketFrameDecodeFailure are now in the sttp.tapir.model package

  • OpenAPI and AsyncAPI models are now part of a separate sttp-apispec project, hence the packages of these objects changed as well, from sttp.tapir.apispec / sttp.tapir.openapi / sttp.tapir.asyncapi to sttp.tapir.apispec.(...)

  • server interpreters sources are now grouped based on the underlying server implementation (e.g. http4s, vertx), and then sub-directories contain effect integrations (e.g. cats, zio). Name templates:

    • for artifacts: tapir-<server>-server-<effect>. E.g. tapir-zio-http4s-server became tapir-http4s-server-zio1

    • for package names: sttp.tapir.server.<server>.<effect>

    • for interpreters: <server><effect>ServerInterpreter

From 0.19 to 0.20

See the release notes

From 0.18 to 0.19

See the release notes

From 0.17 to 0.18

See the release notes