Skip to content

Latest commit

 

History

History

electron

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Entangled VPN — Electron client

Linux-first Electron shell around the existing Go vpncore. The classic Wails Windows client under client/ is unchanged.

Layout

Path Role
electron/main.mjs Electron main — spawns Go sidecar, hosts UI
electron/preload.cjs Exposes window.go.main.App + window.runtime (Wails-compatible)
electron/sidecar/ Go process: same App API over NDJSON stdin/stdout
electron/ui-dist/ Vite build of client/frontend with base: ./ (does not overwrite Wails dist)

Requirements

  • Go 1.23+
  • Node 20+
  • Linux: permission to create a TUN (CAP_NET_ADMIN or run with sudo). Without it, connect/signaling works but joining a room fails when creating entangled.
# optional: grant TUN without full root
sudo setcap cap_net_admin,cap_net_raw+ep electron/sidecar/entangled-sidecar

Package / install (Linux)

cd electron
npm install
npm run pack:linux      # builds AppImage + unpacked dir
npm run install:linux   # installs to ~/.local and adds app menu entry

Then run entangledvpn or open Entangled VPN from your app menu.

Artifacts:

  • electron/dist-electron/EntangledVPN-1.4.0-x86_64.AppImage
  • electron/dist-electron/linux-unpacked/

TUN needs CAP_NET_ADMIN (install script prompts via pkexec). AppImage copies the sidecar into user data on first run and may ask again for setcap.

Package

npm run pack:linux     # AppImage + unpacked dir
npm run pack:win       # Windows NSIS installer (needs Wine on Linux, or use CI)
npm run pack:win:dir   # Windows unpacked dir (no installer)

CI (.github/workflows/release.yml) builds the NSIS installer on windows-latest. The installer requests Administrator (Wintun), same as the classic Wails app.

Protocol

Sidecar NDJSON:

{"id":1,"method":"Connect","params":["host:8080","nick"]}
{"id":1,"result":{"connected":true,...}}
{"event":"status_changed","data":{...}}