A QUIC implementation in pure Go
quic-go is an implementation of the QUIC protocol in Go. It implements the IETF QUIC draft-29, draft-32 and draft-34.
Version compatibility
Since quic-go is under active development, there's no guarantee that two builds of different commits are interoperable. The QUIC version used in the master branch is just a placeholder, and should not be considered stable.
When using quic-go as a library, please always use a tagged release. Only these releases use the official draft version numbers.
Guides
We currently support Go 1.15+, with Go modules support enabled.
Running tests:
go test ./...
QUIC without HTTP/3
Take a look at this echo example.
Usage
As a server
See the example server. Starting a QUIC server is very similar to the standard lib http in go:
http.Handle("/", http.FileServer(http.Dir(wwwDir)))
http3.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)
As a client
See the example client. Use a http3.RoundTripper
as a Transport
in a http.Client
.
http.Client{
Transport: &http3.RoundTripper{},
}
Contributing
We 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. If you have any questions, please feel free to reach out by opening an issue or leaving a comment.