Skip to main content

Installation

lplex has three binaries with different platform support:

BinaryLinuxmacOSNotes
lplex (server)amd64, arm64NoRequires SocketCAN
lplex-cloudamd64, arm64NoCloud receiver
lplexdump (client)amd64, arm64amd64, arm64CLI tool only

Debian/Ubuntu (.deb package)

The .deb package bundles lplex, lplex-cloud, and lplexdump with a systemd unit file.

# Download the latest release
curl -LO https://github.com/sixfathoms/lplex/releases/latest/download/lplex_amd64.deb

# Install
sudo dpkg -i lplex_amd64.deb

# The service is not started automatically. Configure first:
sudo vim /etc/lplex/lplex.conf

# Then enable and start
sudo systemctl enable lplex
sudo systemctl start lplex

For ARM64 (Raspberry Pi, etc.):

curl -LO https://github.com/sixfathoms/lplex/releases/latest/download/lplex_arm64.deb
sudo dpkg -i lplex_arm64.deb

Homebrew (lplexdump only)

The Homebrew formula installs only the lplexdump client. Available on macOS and Linux.

brew install sixfathoms/tap/lplexdump

Docker

The Docker image runs on Linux (amd64 and arm64). It includes both lplex and lplex-cloud.

# lplex (boat server)
docker run --rm --network=host \
--device /dev/net/tun \
ghcr.io/sixfathoms/lplex \
lplex -interface can0 -port 8089

# lplex-cloud
docker run --rm -p 9443:9443 -p 8080:8080 \
-v /data/lplex:/data/lplex \
-v /etc/lplex-cloud:/etc/lplex-cloud:ro \
ghcr.io/sixfathoms/lplex \
lplex-cloud -data-dir /data/lplex
note

The boat server needs --network=host to access the SocketCAN interface on the host.

Build from source

Requires Go 1.25 or later.

git clone https://github.com/sixfathoms/lplex.git
cd lplex

# Build all binaries
go build -o lplex ./cmd/lplex
go build -o lplex-cloud ./cmd/lplex-cloud
go build -o lplexdump ./cmd/lplexdump

# Run tests
go test ./... -v -count=1

# Lint
golangci-lint run

Protobuf regeneration

Only needed if you modify .proto files:

# Install protoc plugins
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

make proto

PGN code generation

Only needed if you modify .pgn definition files:

go generate ./pgn/...