Darien Raymond 2f96c3c257 update references 6 years ago
..
internal 2f96c3c257 update references 6 years ago
Changelog.md 2f96c3c257 update references 6 years ago
LICENSE f1934a4ff2 move vendor to external 6 years ago
README.md 2f96c3c257 update references 6 years ago
buffer_pool.go f1934a4ff2 move vendor to external 6 years ago
client.go f1934a4ff2 move vendor to external 6 years ago
conn.go f1934a4ff2 move vendor to external 6 years ago
crypto_stream.go f1934a4ff2 move vendor to external 6 years ago
crypto_stream_manager.go f1934a4ff2 move vendor to external 6 years ago
frame_sorter.go f1934a4ff2 move vendor to external 6 years ago
framer.go f1934a4ff2 move vendor to external 6 years ago
interface.go f1934a4ff2 move vendor to external 6 years ago
mockgen.go 2f96c3c257 update references 6 years ago
mockgen_private.sh 2f96c3c257 update references 6 years ago
multiplexer.go f1934a4ff2 move vendor to external 6 years ago
packet_handler_map.go f1934a4ff2 move vendor to external 6 years ago
packet_packer.go f1934a4ff2 move vendor to external 6 years ago
packet_unpacker.go f1934a4ff2 move vendor to external 6 years ago
receive_stream.go f1934a4ff2 move vendor to external 6 years ago
send_stream.go f1934a4ff2 move vendor to external 6 years ago
server.go f1934a4ff2 move vendor to external 6 years ago
server_session.go f1934a4ff2 move vendor to external 6 years ago
session.go f1934a4ff2 move vendor to external 6 years ago
stream.go f1934a4ff2 move vendor to external 6 years ago
streams_map.go f1934a4ff2 move vendor to external 6 years ago
streams_map_generic_helper.go f1934a4ff2 move vendor to external 6 years ago
streams_map_incoming_bidi.go 2f96c3c257 update references 6 years ago
streams_map_incoming_generic.go f1934a4ff2 move vendor to external 6 years ago
streams_map_incoming_uni.go 2f96c3c257 update references 6 years ago
streams_map_outgoing_bidi.go 2f96c3c257 update references 6 years ago
streams_map_outgoing_generic.go f1934a4ff2 move vendor to external 6 years ago
streams_map_outgoing_uni.go 2f96c3c257 update references 6 years ago
window_update_queue.go f1934a4ff2 move vendor to external 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. 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.

Google QUIC

quic-go used to support both the QUIC versions supported by Google Chrome and QUIC as deployed on Google's servers, as well as IETF QUIC. Due to the divergence of the two protocols, we decided to not support both versions any more.

The master branch only supports IETF QUIC. For Google QUIC support, please refer to the gquic branch.

Guides

We currently support Go 1.9+.

Installing and updating dependencies:

go get -t -u ./...

Running tests:

go test ./...

HTTP mapping

We're currently not implementing the HTTP mapping as described in the QUIC over HTTP draft. The HTTP mapping here is a leftover from Google QUIC.

QUIC without HTTP/2

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)))
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.