- Updates fips-go to be the latest on cfsetup.yaml - Updates sumtype's x/tools to be latest to avoid Internal: nil pkg errors with fips. |
||
|---|---|---|
| .. | ||
| internal | ||
| logging | ||
| quicvarint | ||
| .gitignore | ||
| .golangci.yml | ||
| Changelog.md | ||
| LICENSE | ||
| README.md | ||
| buffer_pool.go | ||
| client.go | ||
| closed_session.go | ||
| codecov.yml | ||
| config.go | ||
| conn.go | ||
| conn_generic.go | ||
| conn_helper_darwin.go | ||
| conn_helper_freebsd.go | ||
| conn_helper_linux.go | ||
| conn_id_generator.go | ||
| conn_id_manager.go | ||
| conn_oob.go | ||
| conn_windows.go | ||
| crypto_stream.go | ||
| crypto_stream_manager.go | ||
| datagram_queue.go | ||
| errors.go | ||
| frame_sorter.go | ||
| framer.go | ||
| go.mod | ||
| go.sum | ||
| interface.go | ||
| mockgen.go | ||
| mockgen_private.sh | ||
| mtu_discoverer.go | ||
| multiplexer.go | ||
| packet_handler_map.go | ||
| packet_packer.go | ||
| packet_unpacker.go | ||
| receive_stream.go | ||
| retransmission_queue.go | ||
| send_conn.go | ||
| send_queue.go | ||
| send_stream.go | ||
| server.go | ||
| session.go | ||
| stream.go | ||
| streams_map.go | ||
| streams_map_generic_helper.go | ||
| streams_map_incoming_bidi.go | ||
| streams_map_incoming_generic.go | ||
| streams_map_incoming_uni.go | ||
| streams_map_outgoing_bidi.go | ||
| streams_map_outgoing_generic.go | ||
| streams_map_outgoing_uni.go | ||
| token_store.go | ||
| tools.go | ||
| window_update_queue.go | ||
README.md
A QUIC implementation in pure Go
quic-go is an implementation of the QUIC protocol, RFC 9000 protocol in Go. In addition to RFC 9000, it currently implements the IETF QUIC draft-29. Support for draft-29 will eventually be dropped, as it is phased out of the ecosystem.
Guides
We currently support Go 1.16.x and Go 1.17.x.
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.