Skip to content
A QUIC implementation in pure go
Go Other
  1. Go 99.5%
  2. Other 0.5%
Branch: master
Clone or download
Pull request Compare This branch is 56 commits behind lucas-clemente:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
.travis
benchmark
docs
example
fuzzing
http3
integrationtests
internal
interop
quictrace
.editorconfig
.gitignore
.golangci.yml
.travis.yml
Changelog.md
LICENSE
README.md
appveyor.yml
buffer_pool.go
buffer_pool_test.go
client.go
client_test.go
closed_session.go
closed_session_test.go
codecov.yml
conn.go
conn_id_generator.go
conn_id_generator_test.go
conn_id_manager.go
conn_id_manager_test.go
conn_test.go
crypto_stream.go
crypto_stream_manager.go
crypto_stream_manager_test.go
crypto_stream_test.go
frame_sorter.go
frame_sorter_test.go
framer.go
framer_test.go
go.mod
go.sum
interface.go
mock_ack_frame_source_test.go
mock_crypto_data_handler_test.go
mock_crypto_stream_test.go
mock_frame_source_test.go
mock_multiplexer_test.go
mock_packer_test.go
mock_packet_handler_manager_test.go
mock_packet_handler_test.go
mock_quic_session_test.go
mock_receive_stream_internal_test.go
mock_sealing_manager_test.go
mock_send_stream_internal_test.go
mock_session_runner_test.go
mock_stream_getter_test.go
mock_stream_internal_test.go
mock_stream_manager_test.go
mock_stream_sender_test.go
mock_token_store_test.go
mock_unknown_packet_handler_test.go
mock_unpacker_test.go
mockgen.go
mockgen_private.sh
multiplexer.go
multiplexer_test.go
packet_handler_map.go
packet_handler_map_test.go
packet_packer.go
packet_packer_test.go
packet_unpacker.go
packet_unpacker_test.go
quic_suite_test.go
receive_stream.go
receive_stream_test.go
retransmission_queue.go
retransmission_queue_test.go
send_queue.go
send_queue_test.go
send_stream.go
send_stream_test.go
server.go
server_test.go
session.go
session_test.go
stream.go
stream_test.go
streams_map.go
streams_map_generic_helper.go
streams_map_incoming_bidi.go
streams_map_incoming_generic.go
streams_map_incoming_generic_test.go
streams_map_incoming_uni.go
streams_map_outgoing_bidi.go
streams_map_outgoing_generic.go
streams_map_outgoing_generic_test.go
streams_map_outgoing_uni.go
streams_map_test.go
token_store.go
token_store_test.go
window_update_queue.go
window_update_queue_test.go

README.md

A QUIC implementation in pure Go

Godoc Reference Travis Build Status CircleCI Build Status Windows Build Status Code Coverage fuzzit

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.

Guides

We currently support Go 1.13+, with Go modules support enabled.

Installing and updating dependencies:

go get -u ./...

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.

You can’t perform that action at this time.