Rod Hynes 480a47ae78 Remove quic-go SVID 6 years ago
..
h2quic a01dc133fd Use low-memory http2 fork with FRONTED-QUIC 6 years ago
internal 480a47ae78 Remove quic-go SVID 6 years ago
qerr e99118de97 Move quic-go gquic branch to internal fork 6 years ago
quic-go-certificates e99118de97 Move quic-go gquic branch to internal fork 6 years ago
LICENSE e99118de97 Move quic-go gquic branch to internal fork 6 years ago
README.md e99118de97 Move quic-go gquic branch to internal fork 6 years ago
buffer_pool.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
client.go 98b4ee80fb Re-apply quic-go gquic branch local patches 6 years ago
conn.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
crypto_stream.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
frame_sorter.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
framer.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
interface.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
mint_utils.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
mockgen.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
mockgen_private.sh e99118de97 Move quic-go gquic branch to internal fork 6 years ago
multiplexer.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
packet_handler_map.go 5d27fb5254 Patch qguic-go 6 years ago
packet_number_generator.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
packet_packer.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
packet_packer_legacy.go 98b4ee80fb Re-apply quic-go gquic branch local patches 6 years ago
packet_unpacker.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
receive_stream.go 1885003867 Stop quic-go timers to immediately release resources 6 years ago
send_stream.go 1885003867 Stop quic-go timers to immediately release resources 6 years ago
server.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
server_session.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
server_tls.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
session.go 1885003867 Stop quic-go timers to immediately release resources 6 years ago
stream.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_generic_helper.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_incoming_bidi.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_incoming_generic.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_incoming_uni.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_legacy.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_outgoing_bidi.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_outgoing_generic.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
streams_map_outgoing_uni.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago
window_update_queue.go e99118de97 Move quic-go gquic branch to internal fork 6 years ago

README.md

A QUIC implementation in pure Go

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

quic-go is an implementation of the QUIC protocol in Go.

Roadmap

quic-go is compatible with the current version(s) of Google Chrome and QUIC as deployed on Google's servers. We're actively tracking the development of the Chrome code to ensure compatibility as the protocol evolves. In that process, we're dropping support for old QUIC versions. As Google's QUIC versions are expected to converge towards the IETF QUIC draft, quic-go will eventually implement that draft.

Guides

We currently support Go 1.9+.

Installing and updating dependencies:

go get -t -u ./...

Running tests:

go test ./...

Running the example server

go run example/main.go -www /var/www/

Using the quic_client from chromium:

quic_client --host=127.0.0.1 --port=6121 --v=1 https://quic.clemente.io

Using Chrome:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome --no-proxy-server --enable-quic --origin-to-force-quic-on=quic.clemente.io:443 --host-resolver-rules='MAP quic.clemente.io:443 127.0.0.1:6121' https://quic.clemente.io

QUIC without HTTP/2

Take a look at this echo example.

Using the example client

go run example/client/main.go https://clemente.io

Usage

As a server

See the example server or try out Caddy (from version 0.9, instructions here). Starting a QUIC server is very similar to the standard lib http in go:

http.Handle("/", http.FileServer(http.Dir(wwwDir)))
h2quic.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)

As a client

See the example client. Use a h2quic.RoundTripper as a Transport in a http.Client.

http.Client{
  Transport: &h2quic.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.