yyyar/gobetween
yyyar/gobetween has 1,985 GitHub stars and 218 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-07 23:58 UTC. Last push 2025-08-16.
:cloud: Modern & minimalistic load balancer for the Сloud era
What you can do
- TCP - with optional The PROXY Protocol support
- TLS - TLS Termination + ACME & TLS Proxy
- UDP - with optional virtual sessions and transparent mode
- File - read configuration from the file
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Original
gobetween - modern & minimalistic load balancer and reverse-proxy for the :cloud: Cloud era.
Current status: Maintenance mode, accepting PRs. Currently in use in several highly loaded production environments.
Features
-
- TCP - with optional The PROXY Protocol support
- TLS - TLS Termination + ACME & TLS Proxy
- UDP - with optional virtual sessions and transparent mode
Clear & Flexible Configuration with TOML or JSON
- File - read configuration from the file
- URL - query URL by HTTP and get configuration from the response body
- Consul - query Consul key-value storage API for configuration
-
- System Information - general server info
- Configuration - dump current config
- Servers - list, create & delete
- Stats & Metrics - for servers and backends including rx/tx, status, active connections & etc.
-
- Static - hardcode backends list in the config file
- Docker - query backends from Docker / Swarm API filtered by label
- Exec - execute an arbitrary program and get backends from its stdout
- JSON - query arbitrary http url and pick backends from response json (of any structure)
- Plaintext - query arbitrary http and parse backends from response text with customized regexp
- SRV - query DNS server and get backends from SRV records
- Consul - query Consul Services API for backends
- LXD - query backends from LXD
-
- Ping - simple TCP ping healthcheck
- Exec - execute arbitrary program passing host & port as options, and read healthcheck status from the stdout
- Probe - send specific bytes to backend (udp, tcp or tls) and expect a correct answer (bytes or regexp)
Balancing Strategies (with SNI and MaxConnections support)
- Weight - select backend from pool based relative weights of backends
- Roundrobin - simple elect backend from pool in circular order
- Iphash - route client to the same backend based on client ip hash
- Iphash1 - same as iphash but backend removal consistent (clients remain connecting to the same backend, even if some other backends down)
- Leastconn - select backend with least active connections
- Leastbandwidth - backends with least bandwidth
Integrates seamlessly with Docker and with any custom system (thanks to Exec discovery and healthchecks)
Single binary distribution
Architecture

Usage
- Install with snap: https://snapcraft.io/gobetween
- Other Installation Options
- Read Configuration Reference
- Execute
gobetween --helpfor full help on all available commands and options.
Hacking
- Install Go 1.24+ https://golang.org/
$ git clone [email protected]:yyyar/gobetween.git$ make$ make run
Debug and Test
Run several web servers for tests in different terminals:
$ python -m SimpleHTTPServer 8000$ python -m SimpleHTTPServer 8001
Instead of Python's internal HTTP module, you can also use a single binary (Go based) webserver like: https://github.com/udhos/gowebhello
gowebhello has support for SSL sertificates as well (HTTPS mode), in case you want to do quick demos of the TLS+SNI capabilities of gobetween.
Put localhost:8000 and localhost:8001 to static_list of static discovery in config file, then try it:
$ gobetween -c gobetween.toml$ curl http://localhost:3000
Enable profiler and debug issues you encounter
[profiler]
enabled = true # false | true
bind = ":6060" # "host:port"
Performance
It's Fast! See Performance Testing
The Name
It's a play on words: gobetween ("go between").
Also, it's written in Go, and it's a proxy so it's something that stays between 2 parties :smile:
License
MIT. See LICENSE file for more details.
Authors & Maintainers
All Contributors
- See AUTHORS
Community
- Join gobetween Telegram group here.
Logo
Logo by Max Demchenko
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,072 starspublic-apis/public-apis
A collective list of free APIs
497,313 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
443,622 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,216 stars