Remote PortsRemote Ports makes TCP services on your computer or local network accessible from a Remote-SSH workspace. A remote application connects to a loopback port on the SSH host, and the extension forwards that connection to the configured target address. For example, a service at Features
Target ports may range from 1 to 65535. Remote listeners bind exclusively to InstallationRequires desktop VS Code 1.95 or later, Remote-SSH, and a trusted remote workspace. Functional verification covers a macOS client with a Linux SSH host. Compatibility with other VS Code-based IDEs is not yet established. VSIX installationFor offline installation, build the packages from source with Node.js 22.13 or later:
The packages and their SHA-256 checksums are written to
Address is resolved and connected from the local computer. Forwarded Port is the port exposed on the remote host. The row's copy button copies the port number; the context menu can also copy the complete remote address. A listening status confirms that the remote port is bound, not that the target service is available. Registry installationInstall Remote Ports from the Visual Studio Marketplace or Open VSX while connected to the SSH workspace. The extension pack installs Remote Ports Companion locally. Both components must be available in the registry used by the IDE. Remove earlier ArchitectureThe extension consists of a remote workspace component and a local UI companion. The remote component creates the loopback listeners; the companion opens connections to the configured services.
The components establish a session through VS Code commands. The remote relay is made reachable through Each TCP connection has a distinct stream identifier. Binary frames carry data, receive-window credits, half-close notifications, and resets. Per-stream receive windows are 256 KiB, with payload frames limited to 64 KiB. Flow control prevents a slow consumer from creating an unbounded application queue. A per-session challenge-response handshake authenticates the relay. The local companion accepts connection requests only for explicitly configured mappings. Credentials remain in memory. Remote loopback listeners are accessible to other users on the same remote machine; target services should retain their own application-level authentication where required. Stopping a mapping releases its listener and associated connections. Transport loss terminates existing TCP streams; application requests are not replayed. The IDE owns the auxiliary forward created by PerformanceThe following measurements were recorded on 2026-10-30. They are single-run samples, not performance guarantees. Transport overheadThe transport-only workload ran on an Apple M3 Pro with 12 logical cores, macOS ARM64, and Node.js 22.13.1. It included 300 steady-state 64-byte echo samples, 100 new-connection samples, and a 128 MiB echo transfer. The client, service, and relay ran in one Node.js process over loopback.
CPU utilization is process CPU time divided by wall time, with 100% representing one logical core. It can exceed 100% because process CPU time includes multiple threads. These measurements cover all roles in the same process and are not isolated extension-host CPU measurements. The total CPU time, rather than average utilization alone, indicates the additional work performed by the relay. Comparison with native Port ForwardA separate VS Code 1.140.0 Remote-SSH baseline used a macOS ARM64 client, a Linux SSH host, 100 steady-state echo samples, 100 new-connection samples, and a 32 MiB echo transfer.
The native baseline and the loopback results use different network paths and workloads and must not be compared numerically. The native CPU figure covers only the benchmark client, excluding the IDE and remote host. A matched comparison of native Port Forward and Remote Ports, including combined endpoint CPU consumption, is not yet available. Performance parity has not been established. |