Raven Scott e43b48e38c
CI / Build & Test (push) Successful in 1m40s
feat: rewrite installers to download from release, remove local install
Made-with: Cursor
2026-02-27 19:10:17 -05:00
2026-02-27 18:13:59 -05:00
2026-02-27 18:35:38 -05:00
2026-02-27 18:13:59 -05:00
2026-02-27 18:13:59 -05:00
2026-02-27 18:49:12 -05:00
2026-02-27 18:13:59 -05:00
2026-02-27 18:13:59 -05:00
2026-02-27 18:13:59 -05:00
2026-02-27 18:13:59 -05:00

Holesail Browser

A browser extension + native host that brings Holesail P2P tunneling into standard desktop browsers (Chrome, Edge, Firefox) without forking the browser. Open hs:// URLs as if they were normal HTTPS sites, expose local services as P2P tunnels, SSH into remote machines, and connect to remote desktops — all through the browser.

What It Does

  • Browse hs:// URLs — paste any Holesail key and navigate to it like a normal HTTPS site
  • Expose local services — share a local port as an hs:// URL that anyone with the key can reach
  • Service tunnels — forward a remote Holesail peer to a local TCP port (databases, game servers, etc.)
  • SSH in the browser — full xterm.js terminal over a Holesail tunnel, no port forwarding needed
  • Remote Desktop — VNC and RDP sessions over Holesail tunnels, rendered in the browser
  • Automatic backups — scheduled tar.gz backups of all state and certificates with configurable retention

How It Works

Browser Extension (MV3)
    │ Chrome Native Messaging (stdin/stdout)
    ▼
Native Host (Bare runtime)
    ├── Holesail tunnel manager
    ├── SSH session manager      (ports 2000021999)
    ├── Remote Desktop manager   (ports 2200023999)
    ├── Backup manager           (tar.gz, configurable retention)
    ├── HTTPS proxy  (127.0.0.1:8443)  ← TLS termination, *.hole.sail cert
    └── CONNECT proxy (127.0.0.1:8442) ← PAC script target

When you navigate to myapp.hole.sail, the extension's PAC script routes the request through the local CONNECT proxy → HTTPS proxy → Holesail tunnel → remote peer. The browser sees a valid HTTPS response with no certificate errors (once the CA is installed).

All state — tunnels, settings, SSH connections, RDP connections — is stored in a single state.json file owned by the native host.

Installation

Prerequisites

  • Bare runtime installed and on your PATH
  • Chrome 88+, Edge, or Firefox 79+

macOS / Linux

git clone https://github.com/holesail/holesail-browser.git
cd holesail-browser
./scripts/install.sh

Windows

git clone https://github.com/holesail/holesail-browser.git
cd holesail-browser
.\scripts\install.ps1

The installer builds the native host binary, registers the native messaging manifest, and packages the extension.

Load the Extension

Chrome / Edge:

  1. Go to chrome://extensions
  2. Enable Developer mode
  3. Click Load unpacked → select the extension/ folder

Firefox:

  1. Go to about:debugging#/runtime/this-firefox
  2. Click Load Temporary Add-on → select extension/manifest.json

Install the CA Certificate

Open the Holesail Dashboard (click the extension icon) → go to Proxy & CA → click Install CA. This installs the local Holesail Browser CA root certificate so *.hole.sail sites load without certificate warnings.

Quick Start

Browse an hs:// URL

  1. Click the extension icon to open the Dashboard
  2. Go to Virtual Hosts → paste an hs:// key → click Add
  3. Navigate to the assigned *.hole.sail hostname in your browser

Expose a Local Service

  1. Dashboard → Servers → enter your local port → select TCP or UDP → click Start
  2. Copy the generated hs:// URL and share it

SSH into a Remote Machine

  1. Dashboard → SSH → click Add Connection
  2. Enter the hs:// key, username, and an optional label
  3. Click Connect — an xterm.js terminal opens in the dashboard

Connect to a Remote Desktop

  1. Dashboard → Remote Desktop → click Add Connection
  2. Enter the hs:// key, select VNC or RDP, configure port and credentials
  3. Click Connect — the viewer opens in the dashboard

Take a Backup

  1. Dashboard → Backups → click Take Backup
  2. Backups are stored as tar.gz archives including all state and certificates
  3. Configure retention in SettingsBackup Retention (default: 5)

Architecture

See docs/ARCHITECTURE.md for the full system diagram and message flow.

Documentation

Document Description
docs/ARCHITECTURE.md System architecture, component breakdown, message flow
docs/INSTALLATION.md Detailed install guide for all platforms
docs/TUNNELING.md How hs:// browsing, virtual hosts, and service tunnels work
docs/SSH.md SSH tunnel feature
docs/REMOTE-DESKTOP.md VNC and RDP remote desktop feature
docs/BACKUP.md Backup and restore feature
docs/SECURITY.md CA trust model, encryption, threat mitigations
docs/NATIVE-HOST.md Native messaging protocol and host command reference

Technologies

Technology Role
Holesail P2P TCP tunneling
Bare Lightweight JS runtime for the native host
node-forge TLS/PKI for CA and certificate generation
xterm.js Terminal emulator for SSH sessions
noVNC Browser-side VNC client (RFB protocol)
node-rdpjs-2 Server-side RDP client for Remote Desktop

Build Commands

npm run build:host          # Generate bare launcher script (requires bare on PATH)
npm run build               # Same as build:host
npm run pack                # Package extension as .zip / .xpi

# Standalone distributable binaries (no bare runtime required at runtime)
npm run build:dist          # Build for current host only
npm run build:dist:all      # Build for all platforms (mac + linux + windows)
npm run build:dist:mac      # darwin-arm64 + darwin-x64
npm run build:dist:linux    # linux-arm64 + linux-x64
npm run build:dist:win      # win32-x64
npm run build:dist:package  # All platforms + create .zip archives

Distributable binaries are written to releases/. They are self-contained — no bare runtime, no node_modules, no dependencies needed on the target machine.

File Layout

holesail-browser/
├── extension/                  # Browser extension (Manifest V3)
│   ├── manifest.json
│   ├── background.js           # Service worker, native messaging, PAC proxy
│   ├── content.js              # Content script, event relay
│   ├── dashboard.html/js       # Management UI (10 pages)
│   └── vendor/                 # Bundled xterm.js, noVNC
├── native-host/                # Native messaging host (Bare runtime)
│   ├── index.mjs               # Entry point
│   ├── host.js                 # Command handler (30+ commands)
│   ├── holesail-manager.js     # Tunnel lifecycle + state.json persistence
│   ├── https-proxy.js          # HTTPS reverse proxy (port 8443)
│   ├── connect-proxy.js        # HTTP CONNECT proxy (port 8442)
│   ├── certificate-authority.js
│   ├── ssh-manager.js          # SSH sessions (ports 2000021999)
│   ├── rdp-manager.js          # Remote Desktop sessions (ports 2200023999)
│   ├── backup-manager.js       # tar.gz backup/restore
│   └── holesail-browser-storage/
│       ├── state.json          # All persistent state
│       └── backups/            # Backup archives
├── holesail-browser-certs/     # Generated CA and domain certs (also backed up)
├── scripts/                    # Install and build scripts
└── com.holesail.browser.json   # Native messaging manifest

Troubleshooting

"Native host has exited" — Re-run ./scripts/install.sh. The manifest needs absolute paths to bare.

"Access to the specified native messaging host is forbidden" — Extension ID mismatch. Run ./scripts/update-native-manifest-extension-id.sh YOUR_EXTENSION_ID.

*.hole.sail sites show certificate errors — Install the CA via Dashboard → Proxy & CA → Install CA.

PAC proxy not active — Another extension may be controlling proxy settings. Check Dashboard → Proxy & CA for proxy status.

VNC/RDP "bare-tcp not available" — Rebuild the native host: npm run build:host.

Backup "tar failed" — Ensure tar is available on PATH (standard on macOS/Linux; install via WSL or Git Bash on Windows).

Security

The native host runs with your user privileges. Only install from sources you trust.

All Holesail connections use the Noise protocol for end-to-end encryption. See docs/SECURITY.md for the full security model.

Compatibility

  • Chrome 88+, Edge 88+, Firefox 79+
  • macOS, Linux, Windows
  • Desktop only (native messaging is not available on mobile browsers)

License

MIT

S
Description
No description provided
Readme
223 MiB
Languages
JavaScript 76.6%
HTML 13.8%
CSS 6.7%
Shell 1.8%
PowerShell 1.1%