5e6f606f4e
This addresses https://security.snyk.io/vuln/SNYK-GOLANG-GOPKGINYAMLV3-2841557 by updating yaml v3 to latest version. It also stops using yaml v2 directly (we were using both v2 and v3 mixed). We still rely on yaml v2 indirectly, via urfave cli, though. Note that the security vulnerability does not affect v2. |
||
---|---|---|
.. | ||
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 | ||
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{},
}
Projects using quic-go
Project | Description | Stars |
---|---|---|
algernon | Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support | |
caddy | Fast, multi-platform web server with automatic HTTPS | |
go-ipfs | IPFS implementation in go | |
nextdns | NextDNS CLI client (DoH Proxy) | |
syncthing | Open Source Continuous File Synchronization | |
traefik | The Cloud Native Application Proxy | |
v2ray-core | A platform for building proxies to bypass network restrictions |
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.