Categorygithub.com/quic-go/quic-go
modulepackage
0.50.0
Repository: https://github.com/quic-go/quic-go.git
Documentation: pkg.go.dev

# README

A QUIC implementation in pure Go

Documentation PkgGoDev Code Coverage Fuzzing Status

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

In addition to these base RFCs, it also implements the following RFCs:

Support for WebTransport over HTTP/3 (draft-ietf-webtrans-http3) is implemented in webtransport-go.

Detailed documentation can be found on quic-go.net.

Projects using quic-go

ProjectDescriptionStars
AdGuardHomeFree and open source, powerful network-wide ads & trackers blocking DNS server.GitHub Repo stars
algernonSmall self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL supportGitHub Repo stars
caddyFast, multi-platform web server with automatic HTTPSGitHub Repo stars
cloudflaredA tunneling daemon that proxies traffic from the Cloudflare network to your originsGitHub Repo stars
frpA fast reverse proxy to help you expose a local server behind a NAT or firewall to the internetGitHub Repo stars
go-libp2plibp2p implementation in Go, powering Kubo (IPFS) and Lotus (Filecoin), among othersGitHub Repo stars
gostA simple security tunnel written in GoGitHub Repo stars
HysteriaA powerful, lightning fast and censorship resistant proxyGitHub Repo stars
MercureAn open, easy, fast, reliable and battery-efficient solution for real-time communicationsGitHub Repo stars
OONI ProbeNext generation OONI Probe. Library and CLI tool.GitHub Repo stars
reverstReverse Tunnels in Go over HTTP/3 and QUICGitHub Repo stars
RoadRunnerHigh-performance PHP application server, process manager written in Go and powered with pluginsGitHub Repo stars
syncthingOpen Source Continuous File SynchronizationGitHub Repo stars
traefikThe Cloud Native Application ProxyGitHub Repo stars
v2ray-coreA platform for building proxies to bypass network restrictionsGitHub Repo stars
YoMoStreaming Serverless Framework for Geo-distributed SystemGitHub Repo stars

If you'd like to see your project added to this list, please send us a PR.

Release Policy

quic-go always aims to support the latest two Go releases.

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.

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Package logging defines a logging interface for quic-go.
No description provided by the author
No description provided by the author
No description provided by the author
Package testutils contains utilities for simulating packet injection and man-in-the-middle (MITM) attacker tests.

# Functions

ConnectionIDFromBytes interprets b as a Connection ID.
Dial establishes a new QUIC connection to a server using a net.PacketConn.
DialAddr establishes a new QUIC connection to a server.
DialAddrEarly establishes a new 0-RTT QUIC connection to a server.
DialEarly establishes a new 0-RTT QUIC connection to a server using a net.PacketConn.
Listen listens for QUIC connections on a given net.PacketConn.
ListenAddr creates a QUIC server listening on a given address.
ListenAddrEarly works like ListenAddr, but it returns connections before the handshake completes.
ListenEarly works like Listen, but it returns connections before the handshake completes.
NewLRUTokenStore creates a new LRU cache for tokens received by the client.

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
Version1 is RFC 9000.
Version2 is RFC 9369.

# Variables

ConnectionTracingKey can be used to associate a ConnectionTracer with a Connection.
Err0RTTRejected is the returned from: * Open{Uni}Stream{Sync} * Accept{Uni}Stream * Stream.Read and Stream.Write when the server rejects a 0-RTT connection attempt.
ErrServerClosed is returned by the Listener or EarlyListener's Accept method after a call to Close.
ErrTransportClosed is returned by the Transport's Listen or Dial method after it was closed.
QUICVersionContextKey can be used to find out the QUIC version of a TLS handshake from the context returned by tls.Config.ClientHelloInfo.Context.

# Structs

ClientHelloInfo contains information about an incoming connection attempt.
A ClientToken is a token received by the client.
Config contains all configuration data needed for a QUIC server or client.
ConnectionState records basic details about a QUIC connection.
DatagramTooLargeError is returned from Connection.SendDatagram if the payload is too large to be sent.
An EarlyListener listens for incoming QUIC connections, and returns them before the handshake completes.
A Listener listens for incoming QUIC connections.
A StreamError is used for Stream.CancelRead and Stream.CancelWrite.
StreamLimitReachedError is returned from Connection.OpenStream and Connection.OpenUniStream when it is not possible to open a new stream because the number of opens streams reached the peer's stream limit.
The Transport is the central point to manage incoming and outgoing QUIC connections.

# Interfaces

A Connection is a QUIC connection between two peers.
A ConnectionIDGenerator is an interface that allows clients to implement their own format for the Connection IDs that servers/clients use as SrcConnectionID in QUIC packets.
An EarlyConnection is a connection that is handshaking.
OOBCapablePacketConn is a connection that allows the reading of ECN bits from the IP header.
A ReceiveStream is a unidirectional Receive Stream.
A SendStream is a unidirectional Send Stream.
Stream is the interface implemented by QUIC streams In addition to the errors listed on the Connection, calls to stream functions can return a StreamError if the stream is canceled.
No description provided by the author

# Type aliases

No description provided by the author
No description provided by the author
A ConnectionID is a QUIC Connection ID, as defined in RFC 9000.
ConnectionTracingID is the type of the context value saved under the ConnectionTracingKey.
No description provided by the author
No description provided by the author
No description provided by the author
StatelessResetKey is a key used to derive stateless reset tokens.
No description provided by the author
The StreamID is the ID of a QUIC stream.
TokenGeneratorKey is a key used to encrypt session resumption tokens.
No description provided by the author
No description provided by the author
A Version is a QUIC version number.
No description provided by the author