quiche VS quic-go

Compare quiche vs quic-go and see what are their differences.

quiche

🥧 Savoury implementation of the QUIC transport protocol and HTTP/3 (by cloudflare)

quic-go

A QUIC implementation in pure Go (by quic-go)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
quiche quic-go
26 28
8,791 9,338
2.7% 1.9%
9.0 9.5
8 days ago 4 days ago
Rust Go
BSD 2-clause "Simplified" License MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

quiche

Posts with mentions or reviews of quiche. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-10-21.

quic-go

Posts with mentions or reviews of quic-go. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-12-06.
  • "Every time a new Go release happened, the package stopped building, and the authors had to add a new file with a new //go:build line, and then the entire ecosystem of packages with that as a dependency had to explicitly update to the new version" -- Go itself
    2 projects | /r/programmingcirclejerk | 6 Dec 2023
    Ecosystem-breaking packages happen more often than I thought possible in Go. The other one is https://github.com/quic-go/quic-go, which needs to explicitly support a Go version because it relies on some obscure internal of the language around crypto or some shit.
  • Hysteria is a powerful, fast and censorship resistant proxy
    2 projects | news.ycombinator.com | 26 Oct 2023
    One of the changes which isn't upstream yet: https://github.com/quic-go/quic-go/pull/3471
  • Hertz supports HTTP3 Interpretation of v0.5.0 version
    3 projects | dev.to | 15 Jan 2023
    At the same time, we have added an auxiliary function that can convert with the Golang standard Handler in the general layer, so as to quickly port the implementation based on the Golang standard Handler to Hertz. The QUIC & HTTP/3 extension based on quic-go provided later /pull/1), the capabilities provided by this function are used.
  • New to ubuntu and stumped by my cloudflare tunnels suddenly no longer working...
    2 projects | /r/selfhosted | 14 Jan 2023
    2023-01-14T21:40:45Z INF Starting metrics server on 127.0.0.1:34243/metrics 2023/01/14 21:40:45 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details. 2023-01-14T21:40:45Z INF Connection a42de43d-f3f5-xxxxxxxxxxxxx registered with protocol: quic connIndex=0 ip=198.41.192.7 location=LHR 2023-01-14T21:40:46Z INF Connection bc3c09bd-3f4c-xxxxxxxxxxxxx 1 registered with protocol: quic connIndex=1 ip=198.41.200.73 location=MAN 2023-01-14T21:40:47Z INF Connection 381ce22c-f5e1-xxxxxxxxxxxxx registered with protocol: quic connIndex=2 ip=198.41.200.193 location=MAN 2023-01-14T21:40:48Z INF Connection 38bde5a9-b5b9-xxxxxxxxxxxxx registered with protocol: quic connIndex=3 ip=198.41.192.47 location=LHR 2023-01-14T21:46:58Z INF Updated to new configuration config="{\"ingress\":[{\"service\":\"http://192.168.1.64:13378\",\"hostname\":\"apachetomcat.crispybegs.com\"},{\"service\":\"http_status:404\"}],\"warp-routing\":{\"enabled\":false}}" version=1 2023-01-14T21:48:59Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:5055: i/o timeout" cfRay=7899937bxxxxx-LHR ingressRule=1 originService=http://192.168.1.64:5055 2023-01-14T21:48:59Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:5055: i/o timeout" connIndex=0 dest=https://overseer.crispybegs.com/ ip=198.41.192.7 type=http 2023-01-14T21:49:19Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:13378: i/o timeout" cfRay=789993fa1xxxxx-LHR ingressRule=0 originService=http://192.168.1.64:13378 2023-01-14T21:49:19Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:13378: i/o timeout" connIndex=0 dest=https://apachetomcat.crispybegs.com/ ip=198.41.192.7 type=http 2023-01-14T21:49:30Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:5055: i/o timeout" cfRay=7899943a9xxxxx-LHR ingressRule=1 originService=http://192.168.1.64:5055 2023-01-14T21:49:30Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:5055: i/o timeout" connIndex=0 dest=https://overseer.crispybegs.com/favicon.ico ip=198.41.192.7 type=http 2023-01-14T21:49:50Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:13378: i/o timeout" cfRay=789994b8cexxxxx-LHR ingressRule=0 originService=http://192.168.1.64:13378 2023-01-14T21:49:50Z ERR Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:13378: i/o timeout" connIndex=0 dest=https://apachetomcat.crispybegs.com/favicon.ico ip=198.41.192.7 type=http 2023-01-14T22:00:16Z INF Updated to new configuration config="{\"ingress\":[{\"service\":\"https://192.168.1.64:13378\",\"hostname\":\"apachetomcat.crispybegs.com\",\"originRequest\":{\"noTLSVerify\":true}},{\"hostname\":\"overseer.crispybegs.com\",\"originRequest\":{},\"service\":\"http://192.168.1.64:5055\"},{\"service\":\"http_status:404\"}],\"warp-routing\":{\"enabled\":false}}" version=3 2023-01-14T22:00:59Z ERR error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: dial tcp 192.168.1.64:13378: i/o timeout" cfRay=7899a50d3axxxxx-LHR ingressRule=0 originService=https://192.168.1.64:13378
  • Blockchain : Création de réseaux privés décentralisés avec EdgeVPN et application à l’opérateur…
    12 projects | dev.to | 20 Nov 2022
    root@edgevpn1:~# edgevpn api --help NAME: api - Starts an http server to display network informations USAGE: edgevpn api DESCRIPTION: Start listening locally, providing an API for the network. A simple UI interface is available to display network data. OPTIONS: --config value Specify a path to a edgevpn config file [$EDGEVPNCONFIG] --timeout value Specify a default timeout for connection stream (default: "15s") [$EDGEVPNTIMEOUT] --mtu value Specify a mtu (default: 1200) [$EDGEVPNMTU] --bootstrap-iface Setup interface on startup (need privileges) [$EDGEVPNBOOTSTRAPIFACE] --packet-mtu value Specify a mtu (default: 1420) [$EDGEVPNPACKETMTU] --channel-buffer-size value Specify a channel buffer size (default: 0) [$EDGEVPNCHANNELBUFFERSIZE] --discovery-interval value DHT discovery interval time (default: 720) [$EDGEVPNDHTINTERVAL] --ledger-announce-interval value Ledger announce interval time (default: 10) [$EDGEVPNLEDGERINTERVAL] --autorelay-discovery-interval value Autorelay discovery interval (default: "5m") [$EDGEVPNAUTORELAYDISCOVERYINTERVAL] --autorelay-static-only Use only defined static relays [$EDGEVPNAUTORELAYSTATICONLY] --ledger-syncronization-interval value Ledger syncronization interval time (default: 10) [$EDGEVPNLEDGERSYNCINTERVAL] --nat-ratelimit-global value Rate limit global requests (default: 10) [$EDGEVPNNATRATELIMITGLOBAL] --nat-ratelimit-peer value Rate limit perr requests (default: 10) [$EDGEVPNNATRATELIMITPEER] --nat-ratelimit-interval value Rate limit interval (default: 60) [$EDGEVPNNATRATELIMITINTERVAL] --nat-ratelimit Changes the default rate limiting configured in helping other peers determine their reachability status [$EDGEVPNNATRATELIMIT] --max-connections value Max connections (default: 0) [$EDGEVPNMAXCONNS] --ledger-state value Specify a ledger state directory [$EDGEVPNLEDGERSTATE] --mdns Enable mDNS for peer discovery [$EDGEVPNMDNS] --autorelay Automatically act as a relay if the node can accept inbound connections [$EDGEVPNAUTORELAY] --autorelay-v1 Enable autorelay v1 circuits [$EDGEVPNAUTORELAYV1] --concurrency value Number of concurrent requests to serve (default: 2) --holepunch Automatically try holepunching when possible [$EDGEVPNHOLEPUNCH] --natservice Tries to determine reachability status of nodes [$EDGEVPNNATSERVICE] --natmap Tries to open a port in the firewall via upnp [$EDGEVPNNATMAP] --dht Enable DHT for peer discovery [$EDGEVPNDHT] --low-profile Enable low profile. Lowers connections usage [$EDGEVPNLOWPROFILE] --mplex-multiplexer Enable mplex multiplexer. [$EDGEVPNMPLEX] --aliveness-healthcheck-interval value Healthcheck interval (default: 120) [$HEALTHCHECKINTERVAL] --aliveness-healthcheck-scrub-interval value Healthcheck scrub interval (default: 600) [$HEALTHCHECKSCRUBINTERVAL] --aliveness-healthcheck-max-interval value Healthcheck max interval. Threshold after a node is determined offline (default: 900) [$HEALTHCHECKMAXINTERVAL] --log-level value Specify loglevel (default: "info") [$EDGEVPNLOGLEVEL] --libp2p-log-level value Specify libp2p loglevel (default: "fatal") [$EDGEVPNLIBP2PLOGLEVEL] --discovery-bootstrap-peers value List of discovery peers to use [$EDGEVPNBOOTSTRAPPEERS] --autorelay-static-peer value List of autorelay static peers to use [$EDGEVPNAUTORELAYPEERS] --blacklist value List of peers/cidr to gate [$EDGEVPNBLACKLIST] --token value Specify an edgevpn token in place of a config file [$EDGEVPNTOKEN] --limit-file value Specify an limit config (json) [$LIMITFILE] --limit-scope value Specify a limit scope (default: "system") [$LIMITSCOPE] --limit-config Enable inline resource limit configuration [$LIMITCONFIG] --limit-enable Enable resource manager. (Experimental) All options prefixed with limit requires resource manager to be enabled [$LIMITENABLE] --limit-config-streams value Streams resource limit configuration (default: 200) [$LIMITCONFIGSTREAMS] --limit-config-streams-inbound value Inbound streams resource limit configuration (default: 30) [$LIMITCONFIGSTREAMSINBOUND] --limit-config-streams-outbound value Outbound streams resource limit configuration (default: 30) [$LIMITCONFIGSTREAMSOUTBOUND] --limit-config-conn value Connections resource limit configuration (default: 200) [$LIMITCONFIGCONNS] --limit-config-conn-inbound value Inbound connections resource limit configuration (default: 30) [$LIMITCONFIGCONNSINBOUND] --limit-config-conn-outbound value Outbound connections resource limit configuration (default: 30) [$LIMITCONFIGCONNSOUTBOUND] --limit-config-fd value Max fd resource limit configuration (default: 30) [$LIMITCONFIGFD] --peerguard Enable peerguard. (Experimental) [$PEERGUARD] --peergate Enable peergating. (Experimental) [$PEERGATE] --peergate-autoclean Enable peergating autoclean. (Experimental) [$PEERGATE_AUTOCLEAN] --peergate-relaxed Enable peergating relaxation. (Experimental) [$PEERGATE_RELAXED] --peergate-auth value Peergate auth [$PEERGATE_AUTH] --peergate-interval value Peergater interval time (default: 120) [$EDGEVPNPEERGATEINTERVAL] --debug --listen value Listening address. To listen to a socket, prefix with unix://, e.g. unix:///socket.path (default: ":8080") root@edgevpn1:~# EDGEVPNCONFIG=vpn.yaml edgevpn api --listen :10000 {"level":"INFO","time":"2022-11-20T13:04:37.466Z","caller":"cmd/util.go:333","message":" \tedgevpn Copyright (C) 2021-2022 Ettore Di Giacinto\nThis program comes with ABSOLUTELY NO WARRANTY.\nThis is free software, and you are welcome to redistribute it\nunder certain conditions."} {"level":"INFO","time":"2022-11-20T13:04:37.466Z","caller":"cmd/util.go:335","message":"Version: v0.18.0 commit: 042b7b2d3037670da9cea9d2d3eae52d559016e6\n"} {"level":"INFO","time":"2022-11-20T13:04:37.466Z","caller":"node/node.go:118","message":" Starting EdgeVPN network"} 2022/11/20 13:04:37 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details. {"level":"INFO","time":"2022-11-20T13:04:37.485Z","caller":"node/node.go:172","message":" Node ID: 12D3KooWJZz5MiSL9LQMt96mCufYBs2q9jXaNDyfFBsEX5NNDz2C"} {"level":"INFO","time":"2022-11-20T13:04:37.507Z","caller":"node/node.go:173","message":" Node Addresses: [/ip6/2a01:4f9:c012:5f57::1/udp/55208/quic /ip6/::1/udp/55208/quic /ip4/65.21.189.254/tcp/45321 /ip4/127.0.0.1/tcp/45321 /ip4/65.21.189.254/udp/43275/quic /ip4/127.0.0.1/udp/43275/quic /ip6/2a01:4f9:c012:5f57::1/tcp/43219 /ip6/::1/tcp/43219]"} {"level":"INFO","time":"2022-11-20T13:04:37.508Z","caller":"discovery/dht.go:104","message":" Bootstrapping DHT"} ⇨ http server started on [::]:10000
  • Do y'all use HTTPS DNS records?
    2 projects | /r/selfhosted | 10 Oct 2022
  • Caddyhttp: Enable HTTP/3 by Default
    16 projects | news.ycombinator.com | 8 Sep 2022
    I opened an issue with quic-go to get ideas for a better metric: https://github.com/lucas-clemente/quic-go/issues/3549
    16 projects | news.ycombinator.com | 8 Sep 2022
    See https://github.com/golang/go/issues/47840

    Yeah I agree this is a edge case, 99,99% of Caddy users don't push so much data ;)

    But Caddy can't be used as a big files download server for instance, unless sticking with HTTP/1.1 (that and sendfile + kTLS not been supported last time I checked?) (at least with a single http instance).

    Another issue for HTTP/3 is https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-B...

  • anyone able to get the new HTTP3/quic of v2.6 working?
    2 projects | /r/Traefik | 3 Feb 2022
    You could try to open an issue for https://github.com/lucas-clemente/quic-go which is the library used by traefik. I can reproduce them same tesr result on my caddy instance which uses the same lib.
  • HTTP/3 Is Fast
    4 projects | news.ycombinator.com | 15 Dec 2021
    Caddy maintainer here - we still have it marked experimental, not turned on by default. There's still some bugs. The actual HTTP/3 implementation comes from https://github.com/lucas-clemente/quic-go which essentially just has one maintainer at the moment. I'm hoping the Go HTTP team throws some effort on HTTP/3 sooner rather than later.

What are some alternatives?

When comparing quiche and quic-go you can also consider the following projects:

quinn - Async-friendly QUIC implementation in Rust

kcp-go - A Crypto-Secure, Production-Grade Reliable-UDP Library for golang with FEC

fasthttp - Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http

v2ray-core - A platform for building proxies to bypass network restrictions.

msquic - Cross-platform, C implementation of the IETF QUIC protocol, exposed to C, C++, C# and Rust.

udp2raw - A Tunnel which Turns UDP Traffic into Encrypted UDP/FakeTCP/ICMP Traffic by using Raw Socket,helps you Bypass UDP FireWalls(or Unstable UDP Environment)

ftp - FTP client package for Go

kcptun - A Stable & Secure Tunnel based on KCP with N:M multiplexing and FEC. Available for ARM, MIPS, 386 and AMD64。N:M 多重化と FEC を備えた KCP に基づく安定した安全なトンネル。 N:M 다중화 및 FEC를 사용하는 KCP 기반의 안정적이고 안전한 터널입니다. Un tunnel stable et sécurisé basé sur KCP avec multiplexage N:M et FEC.

gnet - 🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go./ gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。

Socket.io - Realtime application framework (Node.JS server)

shadowsocks-rust - A Rust port of shadowsocks

neqo - Neqo, an implementation of QUIC in Rust