What's Changed
This release brings several major features and architectural improvements, enhancing connection flexibility, compatibility, and extensibility for developers.
🌟 Major Features
- Support UDP Port Forwarding: Fully supports UDP local and remote port forwarding. You can now route UDP traffic using the
-L udp/...or-R udp/...CLI options, or viaUdpLocalForwardandUdpRemoteForwardin your config. Forwarding viaunixgramsockets is also supported. - Support Rootshell Client & Session Attach: Removed the local listener mechanism and introduced the ability to re-attach to an existing server session after a client app relaunch or device reboot. This "attach" capability was specifically implemented to provide first-class support for the rootshell client (a free, Metal-accelerated terminal emulator for iPhone, iPad, Vision Pro, and Mac).
- Middleware Framework for Custom SSH Business Logic: Introduced a powerful middleware framework. Developers can now easily inject custom interactive logic into SSH sessions, leveraging
tsshd's underlying capabilities to quickly build custom SSH servers with built-in seamless roaming and low-latency features.
🛠 Configuration & OpenSSH Compatibility
- Priority Configuration File:
tsshdnow uses$XDG_CONFIG_HOME/tsshd/sshd_config(defaults to~/.config/tsshd/sshd_config) as the highest-priority configuration file. If present, it takes precedence over the system's OpenSSH configuration. - OpenSSH-Aligned
AcceptEnvSupport: Fully implementedAcceptEnvsupport to align with OpenSSH behavior. It now defaults to acceptingLANGandLC_*for better cross-distro compatibility. Additionally,DISPLAYandSSH_AUTH_SOCKare correctly passed to the session environment. - Honor
StreamLocalBindMaskandStreamLocalBindUnlink: Aligned Unix Socket remote forwarding behavior with OpenSSH. It now safely unlinks existing sockets before binding and utilizes an inode/dev identity check during exit cleanup to prevent accidentally deleting another process's socket.
🐛 Enhancements & Fixes
- Network & Transport:
- Added support for custom UDP MTU sizes.
- Delegated KCP crypto to the proxy layer and fixed stale packet encryption issues across rekeys.
- Implemented traffic sampling and playback to accelerate QUIC/KCP state recovery.
- Introduced proactive dummy packet injection to prevent connection deadlocks during re-authentication.
- Connection Stability:
- Supported per-session
discardPendingInputand simplified the discard callback logic.
- Supported per-session
- Observability & Refactoring:
- Improved keepalive logging to provide better diagnostics for reconnections and connection stabilization.
- Suppressed noisy logs generated upon client-initiated UDP connection closures.
- Optimized error handling and improved overall code readability.
New Contributors
- @chrisfinazzo made their first contribution in #17
- @kitknox made their first contribution in #19
- @ernie made their first contribution in #27
Full Changelog: v0.1.6...v0.1.7