1# A QUIC implementation in pure Go 2 3<img src="docs/quic.png" width=303 height=124> 4 5[![PkgGoDev](https://pkg.go.dev/badge/github.com/lucas-clemente/quic-go)](https://pkg.go.dev/github.com/lucas-clemente/quic-go) 6[![Travis Build Status](https://img.shields.io/travis/lucas-clemente/quic-go/master.svg?style=flat-square&label=Travis+build)](https://travis-ci.org/lucas-clemente/quic-go) 7[![CircleCI Build Status](https://img.shields.io/circleci/project/github/lucas-clemente/quic-go.svg?style=flat-square&label=CircleCI+build)](https://circleci.com/gh/lucas-clemente/quic-go) 8[![Windows Build Status](https://img.shields.io/appveyor/ci/lucas-clemente/quic-go/master.svg?style=flat-square&label=windows+build)](https://ci.appveyor.com/project/lucas-clemente/quic-go/branch/master) 9[![Code Coverage](https://img.shields.io/codecov/c/github/lucas-clemente/quic-go/master.svg?style=flat-square)](https://codecov.io/gh/lucas-clemente/quic-go/) 10 11quic-go is an implementation of the [QUIC protocol, RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000) protocol in Go. 12In addition to RFC 9000, it currently implements the [IETF QUIC draft-29](https://tools.ietf.org/html/draft-ietf-quic-transport-29). Support for draft-29 will eventually be dropped, as it is phased out of the ecosystem. 13 14## Guides 15 16*We currently support Go 1.16.x and Go 1.17.x.* 17 18Running tests: 19 20 go test ./... 21 22### QUIC without HTTP/3 23 24Take a look at [this echo example](example/echo/echo.go). 25 26## Usage 27 28### As a server 29 30See the [example server](example/main.go). Starting a QUIC server is very similar to the standard lib http in go: 31 32```go 33http.Handle("/", http.FileServer(http.Dir(wwwDir))) 34http3.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil) 35``` 36 37### As a client 38 39See the [example client](example/client/main.go). Use a `http3.RoundTripper` as a `Transport` in a `http.Client`. 40 41```go 42http.Client{ 43 Transport: &http3.RoundTripper{}, 44} 45``` 46 47## Contributing 48 49We are always happy to welcome new contributors! We have a number of self-contained issues that are suitable for first-time contributors, they are tagged with [help wanted](https://github.com/lucas-clemente/quic-go/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22). If you have any questions, please feel free to reach out by opening an issue or leaving a comment. 50