Go Networking

Open-source Go projects categorized as Networking

Top 23 Go Networking Projects

  • fasthttp

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

    Project mention: Go Framework: No Framework? | news.ycombinator.com | 2022-11-29

    "You also get to implement stuff like CSRF protection, cookie signing, anti session fixation, etc. You also lose out on community contributions because you are your own community now."

    In Go, not necessarily, because net/http actually is what many languages would call a "minimalist framework".

    There's a sense in which pretty much everyone here is right. You do need a framework in the general sense; you can't expect to just throw someone a TCP socket and get reasonable work out of them because the web is very complicated nowadays. But the reason why you can "do without a framework" in Go is that it is already a minimal one of its own, and in particular, that "minimality" focuses on providing a mechanism for composing various bits of HTTP code together.

    So, do you need CSRF protection? Go grab this: https://pkg.go.dev/github.com/gorilla/csrf It operates with the integrated net/http Go framework to provide CSRF protection. You are objectively not abandoning the ability to have community-written CSRF protection when you go "frameworkless" in Go. Gorilla in general provides lots of mix-and-match pieces: https://www.gorillatoolkit.org/ , like cookie signing: https://pkg.go.dev/github.com/gorilla/securecookie

    I think calling Go "no framework" is kind of misleading, because I get what you're saying, but the standard library is not the "no framework" option. The "no framework" option is more like using https://github.com/valyala/fasthttp , which is its own server implementation with an incompatible API that does in fact remove you from the community code, other than the code that works only with that server.

    Don't over-read my post. I am merely saying that Go essentially ships with a minimal framework and so it is misleading to say or think of it as being "frameworkless", not that it is mandatory to use it and all other things on top of it are a bad idea. There are times and places to want large, preconfigured packages of additional functionality. But if there are times and places where it is not desirable, Go does come with a minimalist option by default. It is a pretty good, not-very-opionated option suitable for a standard library, where development is slow and there's not much room for experimentation in what a "full" web framework should look like.

    The standard library minimalist framework even makes the other frameworks pluggable. You can, for instance, write an API website, then realize that if you need a conventional HTML website, you can plug in a framework for that part, but leave the API part as-is, simply by routing the API URLs to the existing API code while routing the HTML website to the http.Handler provided by the framework. Even "not using an additional framework" is not the commitment it may be in other environments, because the net/http foundation is still there.

  • cilium

    eBPF-based Networking, Security, and Observability

    Project mention: Go based eBPF projects | reddit.com/r/golang | 2022-11-27

    Cilium : Container networking based. It is the torch-bearer of eBPF

  • Zigi

    Delete the most useless function ever: context switching.. Zigi monitors Jira and GitHub updates, pings you when PRs need approval and lets you take fast actions - all directly from Slack! Plus it reduces cycle time by up to 75%.

  • kcptun

    A Stable & Secure Tunnel based on KCP with N:M multiplexing and FEC. Available for ARM, MIPS, 386 and AMD64。KCPプロトコルに基づく安全なトンネル。KCP 프로토콜을 기반으로 하는 보안 터널입니다。

  • quic-go

    A QUIC implementation in pure go

    Project mention: Blockchain : Création de réseaux privés décentralisés avec EdgeVPN et application à l’opérateur… | dev.to | 2022-11-20

    [email protected]:~# 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") [email protected]:~# 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/ /ip4/ /ip4/ /ip4/ /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

  • gnet

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

  • dns

    DNS library in Go

    Project mention: Book recommendations for network programming | reddit.com/r/golang | 2022-06-07

    For the DNS i wrote a PiHole clone, which on the core it uses github.com/miekg/dns, to upstream queries and also to handle the custom entries, i've been wanting to publish that project but haven't done so cause the code is a bit messy since i did it as a PoC mostly, when comparing it to pihole it has the advantage that its really resource light mostly on the admin features, the dns resolving performs pretty much the same.

  • httpstat

    It's like curl -v, with colours.

  • SonarQube

    Static code analysis for 29 languages.. Your projects are multi-language. So is SonarQube analysis. Find Bugs, Vulnerabilities, Security Hotspots, and Code Smells so you can release quality code every time. Get started analyzing your projects today for free.

  • Netmaker

    Netmaker makes networks with WireGuard. Netmaker automates fast, secure, and distributed virtual networks.

    Project mention: 0.17.0 in Pre-Release | reddit.com/r/netmaker | 2022-11-30
  • evio

    Fast event-loop networking for Go

  • gopacket

    Provides packet processing capabilities for Go

    Project mention: [Go] Try capturing TCP packets | dev.to | 2022-10-12

    I will capturing TCP packets by gopacket/pcap.

  • serving

    Kubernetes-based, scale-to-zero, request-driven compute (by knative)

    Project mention: Building functions with Knative and Tekton | dev.to | 2022-04-17
  • cni

    Container Network Interface - networking for Linux containers

    Project mention: Minikube now supports rootless podman driver for running Kubernetes | news.ycombinator.com | 2022-06-22

    um, they aren't missing anything (but see below). they are k8s.

    so if you want to get the genuine original mainline experience you go to the project's github repo, they have releases, and mention that the detailed changelog has links to the binaries. yeey. (https://github.com/kubernetes/kubernetes/blob/master/CHANGEL... .. the client is the kubectl binary, the server has the control plane components the node binaries have the worker node stuff), you then have the option to set those up according to the documentation (generate TLS certs, specify the IP address range for pods (containers), install dependencies like etcd, and a CNI compatible container network layer provider -- if you have setup overlay networking eg. VXLAN or geneve or something fancy with openvswitch's OVN -- then the reference CNI plugin is probably sufficient)

    at the end of this process you'll have the REST API (kube-apiserver) up and running and you can start submitting jobs (that will be persisted into etcd, eventually picked up by the scheduler control loop that calculates what should run where and persists it back to etcd, then a control loop on a particular worker will notice that something new is assigned to it, and it'll do the thing, allocate a pod, call CNI to allocate IP, etc.)

    of course if you don't want to do all this by hand you can use a distribution that helps you with setup.

    microk8s is a low-memory low-IO k8s distro by Canonical (Ubuntu folks) and they run dqlite (distributed sqlite) instead of etcd (to lower I/O and memory requirements), many people don't like it because it uses snaps

    k3s is started by Rancher folks (and mostly still developed by them?),

    there's k0s (for bare metal ... I have no idea what that means though), kind (kubernetes in docker), there's also k3d (k3s in docker)

    these distributions work by consuming/wrapping the k8s components as go libraries - https://github.com/kubernetes/kubernetes/blob/master/staging...


    then there's the whole zoo of various k8s plugins/addons/tools for networking (CNI - https://github.com/containernetworking/cni#3rd-party-plugins), storage (CSI - https://kubernetes-csi.github.io/docs/drivers.html), helm for package management, a ton of security-related things that try to spot errors in all this circus ... and so on.

  • HTTPLab

    The interactive web server

  • kcp-go

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

  • emitter-io

    High performance, distributed and low latency publish-subscribe platform.

  • netpoll

    A high-performance non-blocking I/O networking framework, which focused on RPC scenarios, developed by ByteDance.

    Project mention: Open Source 101: My First PR to Hertz | reddit.com/r/golang | 2022-11-02

    By contributing back to the upper source - only if you know how to put the network lib into Gin or FastHTTP.

  • kubefwd

    Bulk port forwarding Kubernetes services for local development.

    Project mention: Interesting tools? | reddit.com/r/kubernetes | 2022-05-23

    kubefwd bulk port forward: https://github.com/txn2/kubefwd

  • gobgp

    BGP implemented in the Go Programming Language

    Project mention: BGP Implemented in Go | reddit.com/r/hackernews | 2022-03-19
  • kuma

    🐻 The multi-zone service mesh for containers, Kubernetes and VMs. Built with Envoy. CNCF Sandbox Project.

    Project mention: Gotta love Kuma, thank you kind stranger making it ! | reddit.com/r/selfhosted | 2022-07-20

    And not just "Kuma" : https://github.com/kumahq/kuma

  • req

    Simple Go HTTP client with Black Magic (by imroc)

  • ssh

    Easy SSH servers in Golang

    Project mention: Create SSH tunnel & get welcome message | reddit.com/r/golang | 2022-10-04

    I’ve done very nearly this exact same thing using https://github.com/gliderlabs/ssh

  • fortio

    Fortio load testing library, command line tool, advanced echo server and web UI in go (golang). Allows to specify a set query-per-second load and record latency histograms and other useful stats.

  • router7

    a small home internet router completely written in Go

    Project mention: Surprising result while transpiling C to Go | news.ycombinator.com | 2022-06-22
  • Scout APM

    Truly a developer’s best friend. Scout APM is great for developers who want to find and fix performance issues in their applications. With Scout, we'll take care of the bugs so you can focus on building great things 🚀.

NOTE: The open source projects on this list are ordered by number of github stars. The number of mentions indicates repo mentiontions in the last 12 Months or since we started tracking (Dec 2020). The latest post mention was on 2022-11-30.

Go Networking related posts


What are some of the best open-source Networking projects in Go? This list will help you:

Project Stars
1 fasthttp 18,720
2 cilium 13,620
3 kcptun 13,100
4 quic-go 7,530
5 gnet 7,120
6 dns 6,628
7 httpstat 6,199
8 Netmaker 5,646
9 evio 5,539
10 gopacket 5,238
11 serving 4,786
12 cni 4,536
13 HTTPLab 3,840
14 kcp-go 3,506
15 emitter-io 3,406
16 netpoll 3,212
17 kubefwd 3,200
18 gobgp 3,061
19 kuma 3,009
20 req 2,843
21 ssh 2,820
22 fortio 2,758
23 router7 2,523
Build time-series-based applications quickly and at scale.
InfluxDB is the Time Series Data Platform where developers build real-time applications for analytics, IoT and cloud-native services in less time with less code.