Rod Hynes 68432a251f Patch vendored quic-go to fix gQUICv44 7 years ago
..
h2quic 46c54ee605 Vendor quic-go/h2quic and http2 dependencies 7 years ago
internal 526827ba0d Update vendored quic-go 7 years ago
qerr 49f92dcb5e Vendor quic-go and errgroup 7 years ago
Changelog.md a6319cbe48 Update vendored quic-go for v44 support 7 years ago
LICENSE 49f92dcb5e Vendor quic-go and errgroup 7 years ago
README.md f960bf193a Update quic-go 7 years ago
appveyor.yml 526827ba0d Update vendored quic-go 7 years ago
buffer_pool.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
client.go 68432a251f Patch vendored quic-go to fix gQUICv44 7 years ago
codecov.yml 49f92dcb5e Vendor quic-go and errgroup 7 years ago
conn.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
crypto_stream.go 16842adc1c Update vendored quic-go 7 years ago
frame_sorter.go a6319cbe48 Update vendored quic-go for v44 support 7 years ago
framer.go 16842adc1c Update vendored quic-go 7 years ago
go.mod 526827ba0d Update vendored quic-go 7 years ago
go.sum 526827ba0d Update vendored quic-go 7 years ago
interface.go a6319cbe48 Update vendored quic-go for v44 support 7 years ago
mint_utils.go dbd3b9f176 QUIC-OSSH updates 7 years ago
mockgen.go 16842adc1c Update vendored quic-go 7 years ago
mockgen_private.sh dbd3b9f176 QUIC-OSSH updates 7 years ago
multiplexer.go dbd3b9f176 QUIC-OSSH updates 7 years ago
packet_handler_map.go a6319cbe48 Update vendored quic-go for v44 support 7 years ago
packet_number_generator.go 526827ba0d Update vendored quic-go 7 years ago
packet_packer.go 526827ba0d Update vendored quic-go 7 years ago
packet_packer_legacy.go 68432a251f Patch vendored quic-go to fix gQUICv44 7 years ago
packet_unpacker.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
receive_stream.go 526827ba0d Update vendored quic-go 7 years ago
send_stream.go 526827ba0d Update vendored quic-go 7 years ago
server.go 526827ba0d Update vendored quic-go 7 years ago
server_session.go a6319cbe48 Update vendored quic-go for v44 support 7 years ago
server_tls.go 526827ba0d Update vendored quic-go 7 years ago
session.go 526827ba0d Update vendored quic-go 7 years ago
stream.go 16842adc1c Update vendored quic-go 7 years ago
streams_map.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_generic_helper.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_incoming_bidi.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_incoming_generic.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_incoming_uni.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_legacy.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_outgoing_bidi.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_outgoing_generic.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
streams_map_outgoing_uni.go 49f92dcb5e Vendor quic-go and errgroup 7 years ago
window_update_queue.go 16842adc1c Update vendored quic-go 7 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.