BGP message <-> MIDI message, for times when you want to broadcast your music instead of your IP packets.


Point to Point

The GoBGP library we use does not support customizing peer TCP port. Thus, you are stuck with port 179 and would (in most cases) need root privilege to listen on that port.

Instrument (MIDI sender) side:

sudo bgpiano-send --bgp-port=179 --bgp-peer-ip=<peer-ip>

Synthesizer (MIDI receiver) side:

sudo bgpiano-recv --bgp-port=179 --bgp-peer-ip=<peer-ip>


Reflector side: gobgp or equivalent software required. Any RFC-compliant BGP daemon configured as an RR or RS can be used.

sudo gobgpd --log-plain --config-file=contrib/rr-gobgp/gobgpd.toml

Instrument (MIDI sender) side:

bgpiano-send --bgp-peer-ip=<reflector-ip>

Synthesizer (MIDI receiver) side:

bgpiano-recv --bgp-peer-ip=<reflector-ip>




  • $GOPATH environment variable is set
  • $GOBIN is in $PATH
  • GCC is installed (for CGO)
  • Dependencies: libasound2-dev

go install[email protected]
goreleaser build --snapshot --rm-dist


  • Check PIE: checksec --dir=dist

Windows Support

GoBGP does not support Windows natively. To build this project under Windows with a little hack, use the following method:

  1. Clone somewhere outside this directory
  2. Apply contrib\windows\gobgp-windows.patch to the GoBGP source directory
  3. Append replace => ../relative/path/to/gobgp to go.mod in BGPiano project directory
  4. Build the application you need with go build ./cmd/<executable_name>


View Github