Rod Hynes 15ceeb6cfa Update quic-go and its dependencies há 3 anos atrás
..
http3 c1e6807d1c Upgrade quic-go há 3 anos atrás
internal 15ceeb6cfa Update quic-go and its dependencies há 3 anos atrás
logging c1e6807d1c Upgrade quic-go há 3 anos atrás
quicvarint c1e6807d1c Upgrade quic-go há 3 anos atrás
.gitignore 8a972ef75d Use Go modules há 3 anos atrás
.golangci.yml 8a972ef75d Use Go modules há 3 anos atrás
Changelog.md 86379faa8a Update vendored Psiphon-Labs/quic-go há 4 anos atrás
LICENSE 32917dfb51 Vendor Psiphon-Labs/quic-go há 6 anos atrás
README.md 15ceeb6cfa Update quic-go and its dependencies há 3 anos atrás
buffer_pool.go e5058296d5 Update vendored quic-go há 4 anos atrás
client.go c1e6807d1c Upgrade quic-go há 3 anos atrás
closed_conn.go c1e6807d1c Upgrade quic-go há 3 anos atrás
codecov.yml c1e6807d1c Upgrade quic-go há 3 anos atrás
config.go c1e6807d1c Upgrade quic-go há 3 anos atrás
conn_id_generator.go c1e6807d1c Upgrade quic-go há 3 anos atrás
conn_id_manager.go c1e6807d1c Upgrade quic-go há 3 anos atrás
connection.go 15ceeb6cfa Update quic-go and its dependencies há 3 anos atrás
connection_timer.go 15ceeb6cfa Update quic-go and its dependencies há 3 anos atrás
crypto_stream.go c1e6807d1c Upgrade quic-go há 3 anos atrás
crypto_stream_manager.go 9b6aef8cec Updated vendored dependencies for IETF-draft-29 há 5 anos atrás
datagram_queue.go e5058296d5 Update vendored quic-go há 4 anos atrás
errors.go b3a4e9bc4a Update vendored quic-go há 4 anos atrás
frame_sorter.go c1e6807d1c Upgrade quic-go há 3 anos atrás
framer.go e5058296d5 Update vendored quic-go há 4 anos atrás
interface.go c1e6807d1c Upgrade quic-go há 3 anos atrás
mockgen.go c1e6807d1c Upgrade quic-go há 3 anos atrás
mockgen_private.sh 8a972ef75d Use Go modules há 3 anos atrás
mtu_discoverer.go c1e6807d1c Upgrade quic-go há 3 anos atrás
multiplexer.go c1e6807d1c Upgrade quic-go há 3 anos atrás
packet_handler_map.go c1e6807d1c Upgrade quic-go há 3 anos atrás
packet_packer.go c1e6807d1c Upgrade quic-go há 3 anos atrás
packet_unpacker.go c54981560c Update vendored quic-go há 4 anos atrás
receive_stream.go c1e6807d1c Upgrade quic-go há 3 anos atrás
retransmission_queue.go 9b6aef8cec Updated vendored dependencies for IETF-draft-29 há 5 anos atrás
send_conn.go c1e6807d1c Upgrade quic-go há 3 anos atrás
send_queue.go 86379faa8a Update vendored Psiphon-Labs/quic-go há 4 anos atrás
send_stream.go c1e6807d1c Upgrade quic-go há 3 anos atrás
server.go c1e6807d1c Upgrade quic-go há 3 anos atrás
stream.go b3a4e9bc4a Update vendored quic-go há 4 anos atrás
streams_map.go c1e6807d1c Upgrade quic-go há 3 anos atrás
streams_map_incoming.go c1e6807d1c Upgrade quic-go há 3 anos atrás
streams_map_outgoing.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_df.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_df_linux.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_df_windows.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_helper_darwin.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_helper_freebsd.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_helper_linux.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_no_oob.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_oob.go c1e6807d1c Upgrade quic-go há 3 anos atrás
sys_conn_windows.go c1e6807d1c Upgrade quic-go há 3 anos atrás
token_store.go 32917dfb51 Vendor Psiphon-Labs/quic-go há 6 anos atrás
tools.go c1e6807d1c Upgrade quic-go há 3 anos atrás
window_update_queue.go 9b6aef8cec Updated vendored dependencies for IETF-draft-29 há 5 anos atrás
zero_rtt_queue.go c1e6807d1c Upgrade quic-go há 3 anos atrás

README.md

A QUIC implementation in pure Go

PkgGoDev Code Coverage

quic-go is an implementation of the QUIC protocol (RFC 9000, RFC 9001, RFC 9002) in Go, including the Unreliable Datagram Extension (RFC 9221). It has support for HTTP/3 (RFC 9114), including QPACK (RFC 9204).

In addition to the RFCs listed above, 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.18.x and Go 1.19.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 GitHub Repo stars
caddy Fast, multi-platform web server with automatic HTTPS GitHub Repo stars
go-ipfs IPFS implementation in go GitHub Repo stars
syncthing Open Source Continuous File Synchronization GitHub Repo stars
traefik The Cloud Native Application Proxy GitHub Repo stars
v2ray-core A platform for building proxies to bypass network restrictions GitHub Repo stars
cloudflared A tunneling daemon that proxies traffic from the Cloudflare network to your origins GitHub Repo stars
OONI Probe The Open Observatory of Network Interference (OONI) aims to empower decentralized efforts in documenting Internet censorship around the world. GitHub Repo stars
YoMo Streaming Serverless Framework for Geo-distributed System GitHub Repo stars

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.