Swiftpack.co - Package - apple/swift-nio-http2


This project contains HTTP/2 support for Swift projects using SwiftNIO. To get started, check the API docs.


swift-nio-http2 is a SwiftPM project and can be built and tested very simply:

$ swift build
$ swift test


Just like the rest of the SwiftNIO family, swift-nio-http2 follows SemVer 2.0.0 with a separate document declaring SwiftNIO's Public API.

swift-nio-http2 1.x

swift-nio-http2 versions 1.x are a pure-Swift implementation of the HTTP/2 protocol for SwiftNIO. It's part of the SwiftNIO 2 family of repositories and does not have any dependencies besides swift-nio and Swift 5. As the latest version, it lives on the master branch.

To depend on swift-nio-http2, put the following in the dependencies of your Package.swift:

.package(url: "https://github.com/apple/swift-nio-http2.git", from: "1.0.0"),

swift-nio-http2 0.x

The legacy swift-nio-http 0.x is part of the SwiftNIO 1 family of repositories and works on Swift 4.1 and newer but requires nghttp2 to be installed on your system. The source code can be found on the nghttp2-support-branch.

Developing SwiftNIO HTTP/2

For the most part, SwiftNIO development is as straightforward as any other SwiftPM project. With that said, we do have a few processes that are worth understanding before you contribute. For details, please see CONTRIBUTING.md in this repository.


Stars: 235
Help us keep the lights on



1.2.0 - May 2, 2019

Semver Minor

  • Added support for policing correct content length headers, with support for disabling these checks if needed. (#98)

Semver Patch

  • Fixed an off-by-one error when calculating the valid bounds of certain HTTP/2 settings. (#97)
  • Fixed an issue where we'd incorrectly reject headers that were larger than the dynamic table size, instead of flushing the table. (#99)
  • Fixed an issue where max stream ID was forbidden in GOAWAY when sent by servers. (#102)
  • Removed unnecessary memory copies in the state machine. (#104)
  • Avoided unnecessary heap allocation when parsing frame headers. (#107)
  • Fixed an issue where NIO would consider WINDOW_UPDATE frames on closed streams to be a connection error of type PROTOCOL_ERROR. (#109)
  • Added "Show on Github" link to API docs. (#108)

1.1.0 - Apr 12, 2019

Semver Minor

  • Added additional validation for inbound and outbound HPACK headers. This change adds a number of new errors and a new API to NIOHTTP2Handler to disable this validation. (#84, #90, #91, #94, #95)
  • Rewrote the representation of HPACK headers for a substantial performance improvement. (#89)

Semver Patch

  • Fixed a bug where zero-length SETTINGS frames would be treated as an error. (#88)
  • Substantially decreased the allocation overhead of encoding HTTP headers. (#86)
  • Documentation cleanups. (#82, #82)

1.0.1 - Mar 27, 2019

Semver Patch

  • Added validation to enforce that END_STREAM is set on HEADERS frames containing trailers. (#81)
  • Forced HTTP2StreamMultiplexer to forward on channelActive to the parent channel. (#80)
  • Miscellaneous docs fixes. (#76, #77, #78)

1.0.0 - Mar 27, 2019

This is the first major release of SwiftNIO HTTP/2. It substantially changes the API and moves the implementation to a pure-Swift model. As the changes are so large, we do not have release notes here: please consider the 1.0 revision as an entirely clean slate.

0.2.1 - Jan 9, 2019

Semver Patch

  • Initiate HTTP/2 parser on handlerAdded as well as on channelActive, to facilitate adding HTTP/2 handlers to pipelines after setup. (#36)