Quick start
Fastest path: the one-line installer (rolling binaries). After install you connect with a public key. No ports to open, no VPN, no public Docker API. Alternative: run from source with Node.js ≥ 20.
1. One-line installer (recommended)
Detects OS/arch, downloads matching assets from the rolling release, and installs either a Linux systemd server or a desktop client.
curl -fsSL https://install.peardock.boats | bash
Non-interactive:
# Server on Linux (systemd → peardock.service)
curl -fsSL https://install.peardock.boats | bash -s -- --server --yes
# Desktop client (Linux or macOS)
curl -fsSL https://install.peardock.boats | bash -s -- --client --yes
# Both (Linux host that also runs the GUI)
curl -fsSL https://install.peardock.boats | bash -s -- --both --yes
curl or wget, tar.
Server install needs root/sudo, Docker installed, and Linux for systemd.
Windows: grab tarballs from the rolling release (bash installer is not for win32).
2. After server install
Default layout:
| Path | Purpose |
|---|---|
/opt/peardock/peardock-server | Bare standalone binary |
/opt/peardock/.env | Check this file for SERVER_PUBLIC_KEY and SERVER_SEED (mode 600) |
/etc/systemd/system/peardock.service | systemd unit (user peardock, group docker) |
sudo systemctl enable --now peardock
sudo systemctl status peardock
sudo journalctl -u peardock -f
Keys live in .env
After the first successful start, the server writes identity into
/opt/peardock/.env. Open that file (or grep it) before connecting:
# Preferred — both keys after first start
sudo grep -E '^(SERVER_PUBLIC_KEY|SERVER_SEED)=' /opt/peardock/.env
# or: sudo cat /opt/peardock/.env
# Also printed in the journal on boot
sudo journalctl -u peardock -n 80 --no-pager | grep -i 'public key'
| Variable | Who | In the client |
|---|---|---|
SERVER_PUBLIC_KEY |
Safe to share | Paste alone → viewer (read-only) |
SERVER_SEED |
Admins only — never give to operators | Paste with the public key → admin |
Boot log shape:
peardock server ready
Public key (viewer / read-only by default):
<64 hex characters>
Admin: paste public key + SERVER_SEED in the client.
Operators: create a pd1. invite from Access (never share SERVER_SEED).
peardock to the docker group so
/var/run/docker.sock is usable. If list/start fails with permission errors:
sudo usermod -aG docker peardock && sudo systemctl restart peardock.
Back up SERVER_SEED in .env. Rotating it changes the public key.
3. After client install
- macOS:
~/Applications/peardock.app. Open from Finder or Spotlight. - Linux:
peardock-clientonPATHif~/.local/binis configured; desktop entry under~/.local/share/applications.
Dev/source alternative (Electron):
npm run start:client
# builds electron/app.bundle.cjs then launches Electron
Pear development:
export PATH="$HOME/Library/Application Support/pear/bin:$PATH" # macOS
npm run dev
4. Connect
flowchart LR
A[Install server] --> B["Read keys from /opt/peardock/.env"]
B --> C[Install / open client]
C --> D[Add peer · key / seed / pd1 invite]
D --> E[Handshake · role · live UI]
- On the Docker host, read keys from
/opt/peardock/.env(SERVER_PUBLIC_KEY, andSERVER_SEEDif you need admin). - Open the client → Add peer.
- Paste one of the options below (optional alias).
- Handshake returns
peerIdand role; the live UI loads.
| Paste in Add peer | Access |
|---|---|
Public key only (SERVER_PUBLIC_KEY) | Viewer (read-only) |
Public key + SERVER_SEED (from the same .env) | Admin |
Full pd1.… invite (from Access → Create invite) | Role in the invite — no seed sharing |
Default peer role is viewer (public key alone). Elevate with seed proof or a
pd1. invite. Multi-operator fleets: operator guide
and threat model.
Saved peers reconnect automatically (retry every 5s if a peer drops). Last active peer is restored on client launch.
5. From source
git clone https://git.ssh.surf/snxraven/peardock.git
cd peardock
npm install # or: npm ci
npm run server # host with Docker
npm run start:client # Electron GUI
# npm run dev # Pear desktop (dev)
Production server host from source:
npm ci --omit=dev
# copy deploy/peardock.service, create user peardock, add to docker group
# or use install.sh for the binary path instead
6. Standalone binaries (local make)
64-bit only: linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64, win32-arm64.
npm run make # all server + client hosts
npm run make:server:linux-x64
npm run make:client:darwin-arm64
Outputs under out/. CI publishes tag rolling.
See Releases and Download.