Rod Hynes d5d9b91e45 Update vendored github.com/Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
..
http3 0074bdee43 Vendor Psiphon-Labs/quic-go/http3 %!s(int64=6) %!d(string=hai) anos
internal 178f4b6e10 Update vendored quic-go %!s(int64=6) %!d(string=hai) anos
quictrace 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
Changelog.md 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
LICENSE 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
README.md 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
appveyor.yml 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
buffer_pool.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
client.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
closed_session.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
codecov.yml 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
conn.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
conn_id_generator.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
conn_id_manager.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
crypto_stream.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
crypto_stream_manager.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
frame_sorter.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
framer.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
go.mod 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
go.sum 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
interface.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
mockgen.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
mockgen_private.sh 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
multiplexer.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
packet_handler_map.go c8e0b25f8f Update vendored Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
packet_packer.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
packet_unpacker.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
receive_stream.go 304048e09a Update vendored Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
retransmission_queue.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
send_queue.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
send_stream.go 304048e09a Update vendored Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
server.go d5d9b91e45 Update vendored github.com/Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
session.go d5d9b91e45 Update vendored github.com/Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
stream.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map_generic_helper.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map_incoming_bidi.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map_incoming_generic.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map_incoming_uni.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map_outgoing_bidi.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map_outgoing_generic.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
streams_map_outgoing_uni.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
token_store.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos
window_update_queue.go 32917dfb51 Vendor Psiphon-Labs/quic-go %!s(int64=6) %!d(string=hai) anos

README.md

A QUIC implementation in pure Go

Godoc Reference Travis Build Status CircleCI Build Status Windows Build Status Code Coverage fuzzit

quic-go is an implementation of the QUIC protocol in Go. It roughly implements the IETF QUIC draft, although we don't fully support any of the draft versions at the moment.

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.

If you want to use quic-go as a library in other projects, please consider using a tagged release. These releases expose experimental QUIC versions, which are guaranteed to be stable.

Guides

We currently support Go 1.13+, with Go modules support enabled.

Installing and updating dependencies:

go get -u ./...

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.