Release v0.1.26
This release brings major new capabilities to SSH multiplexing and UDP session management, alongside extensive compatibility improvements, new configuration options, and a wide array of bug fixes.
🎉 Major Features
- Multiplexing & ControlMaster Support:
- Added
-Mflag to enable multiplexing master mode. - Added
-O <ctl_cmd>flag to control the multiplexing master process (#260). - Added
-S(ControlPath) support, enablingtsshto be used as the underlying SSH client for tools like Mosh. - Migrated to native
ssh.NewControlClientConnfrom upstreamgolang.org/x/cryptofor safer, native OpenSSH ControlMaster proxying.
- Added
- UDP Session Attach & Detach: Support for detaching from active UDP sessions and attaching to existing UDP sessions across different devices.
- Host Key Verification & Management:
- Host Canonicalization: Implemented support for canonical host lookups,
CanonicalizeHostname, and correctedCanonicalizeMaxDotsbehavior (#248, #251). - Protocol Overrides: Added
--tcpand--quicoptions to easily overrideUdpMode(#263).
✨ Enhancements
- Connection & Stability:
- Updated
tsshddependency with significant reconnect and diagnostics improvements. - Added configurable
UdpReconnectExitKey(e.g.,Ctrl+D) to manually exit during UDP connection loss (#244). - Increased default
UdpAliveTimeoutto 10 days and improved time formatting. - Optimized UDP preview fetching, rendering, and terminal redraws.
- Enhanced forwarding shutdown and attach error handling.
- Updated
- Configuration & DNS:
- Added
CustomDnsServerconfiguration intssh.conf(can be overridden by--dns). - Support loading both XDG and legacy SSH config files.
- Added fuzzy host selection configuration and cancel exit code (#269).
- Added
- UI & UX:
- Displays connection RTT directly in the terminal title.
- Hides the host in the "tiny" theme when empty or when it equals the alias (#252).
- Added
-n(NoStdin) flag support.
- Compatibility:
- Support for
KexAlgorithmsand unified SSH algorithm handling (#240). - Support for
ProxyCommandin UDP mode (automatically implies TCP proxy mode) (#262). - Added support for more remote OS and architecture variants (#242, #243).
- Aligned agent key matching and proxy config closer to OpenSSH specs (#247).
- Support for
🐛 Bug Fixes
- Network: honored AddressFamily settings for ambiguous connections (#256).
- File Paths: Resolved issues parsing the home directory (
~/) for identity files (#259). - Terminal Issues:
- Skipped Windows virtual terminal setup when stdout is piped (#264).
- Ignored cursor position reports during
ESC[6nfiltering.
- Routing & State:
- Fixed exit notification when a non-UDP target is behind a UDP jump host.
- Ensured the client exits properly when the remote shell ends.
- Discarded server output during connection loss to prevent terminal artifacts.
- Synced
args.Destinationwith the resolved host so config processing correctly applies Host/Match stanzas (#251).
- General Fixes:
- Ensured atomic binary installation via temporary files to prevent corruption (#245).
- Prevented duplicate host aliases from being incorrectly parsed (#249).
- Fixed macOS default
ssh-sk-helperpath resolution (#241). - Replaced
strings.ToLowercomparisons withstrings.EqualFoldfor safer case-insensitivity.
🔨 Under the Hood (Build & Docs)
- Added automatic pre-release deployment via CI.
- Refined README formatting, table layouts, website URLs, and installation guides.
- Moved the Debian package section from
utilstonet. - Updated package metadata and bumped dependencies.
New Contributors
- @p3ddd made their first contribution in #241
- @shoaly made their first contribution in #244
- @mvanhorn made their first contribution in #260
Full Changelog: v0.1.25...v0.1.26