Skip to content

0.5.0 - TCP tunnel adding (+ private mode)

Choose a tag to compare

@LEADBERG-studio LEADBERG-studio released this 02 Aug 14:50
· 15 commits to main since this release

Tunnellio v0.5.0

Summary

  • This release adds native TCP bridge password support, a fully self-sufficient pure-Python TCP bridge client, and a keyless public launch endpoint.
  • The client now works on Windows, Linux, and macOS without any external binaries — the bridge is implemented natively inside the package.

Highlights

  • Native TCP bridge client (src/tunnellio/bridge.py) — pure Python, no external binaries, bore-compatible wire protocol with HMAC-SHA256 auth
  • Keyless bridge commandtunnellio bridge --local-port 3000 --run works without API token, without SSH key, without any external binary
  • TCP bridge password--tcp-bridge-password flag, passwordRequired and clientProtocol in connection profile, automatic password in hello/accept frames
  • Native Tunnellio wire format{"type":"hello","hostname":"...","password":"..."} when clientProtocol.hello is present, bore-format fallback otherwise
  • Public keyless endpointPOST /v1/tcp-bridge/launch without Bearer auth
  • Auto-fallback--transport auto tries SSH first, falls back to TCP bridge on quick failure
  • Cleaned repository — removed stray nested clone and obsolete bootstrap script

Artifacts

  • tunnellio.exe — standalone Windows binary (Python not required on target machine)
  • tunnellio-source-v0.5.0.zip — universal source archive (Python 3.11+ required)

Usage notes

Simplest tunnel (no token, no key, no external binary)

.\tunnellio.exe bridge --local-port 3000 --run --name my-bridge

With a chosen subdomain

.\tunnellio.exe bridge --domain new:my-app --local-port 3000 --run --name my-bridge

With TCP bridge password

.\tunnellio.exe --token YOUR_TOKEN connect --domain new:my-app --local-port 3000 --transport tcp-bridge --tcp-bridge-password demo-secret --run --name my-bridge

In a Unix sandbox

unzip tunnellio-source-v0.5.0.zip -d tunnellio && cd tunnellio
pip install .
tunnellio bridge --local-port 3000 --run --name my-bridge

Transport comparison

Command Token SSH key External binary Platform
bridge no no no Windows, Linux, macOS
connect --transport tcp-bridge yes no no Windows, Linux, macOS
connect --transport ssh yes yes OpenSSH any
connect --transport auto yes yes OpenSSH any

Changelog

  • Added TCP bridge password support (tcpBridgePassword, passwordRequired, clientProtocol)
  • Added --tcp-bridge-password CLI flag for plan, connect, and bridge commands
  • Added TcpBridgeClientProtocol model with hello template from server
  • Added passwordRequired and clientProtocol fields to TcpBridgeProfile
  • Added tcpBridgePassword field to DomainSummary
  • Updated bridge.py to send native Tunnellio wire format when clientProtocol.hello is provided
  • Updated bridge.py to send {"type":"accept","connectionId":"...","password":"..."} for connection accept
  • Updated cli.py to pass hello_template, password, password_required to launch_bridge()
  • Updated planner.py to pass tcpBridgePassword in launch-spec domain block and keyless bridge payload
  • Updated config template and config example with tcpBridgePassword field
  • Added tests for password flow, hello template, and CLI flag parsing
  • Backward compatible: bore-protocol mode still works when clientProtocol is absent
  • Implemented native TCP bridge client in pure Python (tunnellio/bridge.py) — no external binaries needed
  • Wire protocol: null-delimited JSON frames, bore-compatible control handshake, HMAC-SHA256 auth
  • cli.py runs the bridge natively via launch_bridge() instead of subprocess.Popen for tcp_bridge transport
  • TcpBridgeProcess provides the same pid/poll/terminate/kill/wait interface as subprocess.Popen
  • Bidirectional TCP copy via select for connection forwarding
  • Client is now fully self-sufficient on Windows, Linux, and macOS — only Python 3.11+ required
  • Added bridge CLI command for one-shot keyless TCP bridge tunnels — no API token, no SSH key required
  • Added public keyless endpoint POST /v1/tcp-bridge/launch (no Bearer auth) in ApiClient
  • Added Planner.build_keyless_bridge_plan() that skips meta/capabilities/launch-spec and calls the public endpoint directly
  • Added requiresApiToken field to ConnectionProfile and TcpBridgeProfile
  • Added is_tokenless property to ConnectionProfile
  • Made PlanResult.meta and PlanResult.domain optional (None for keyless bridge flow)
  • Made bridge command exempt from the API token requirement
  • Added TCP bridge transport (connectionMode = tcp_bridge) as a keyless alternative to reverse SSH
  • Added --transport CLI flag (ssh, tcp-bridge, auto) for explicit transport selection
  • Added automatic fallback from SSH to TCP bridge when --transport auto is used and SSH fails quickly
  • Removed stray nested clone and obsolete bootstrap script from repository

Notes for GitHub publication

  • Upload tunnellio.exe and tunnellio-source-v0.5.0.zip from this release subfolder.
  • Version: 0.5.0 (verified in pyproject.toml and src/tunnellio/__init__.py).
  • Commit: 813d289
  • Changelog matches CHANGELOG.md.