Files
NetMesh/docs/designs/native-mosh-client.md
zhaolei 3c72efcb7f
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
[Init] Initial commit - NetMesh terminal manager
2026-09-13 18:24:01 +08:00

3.3 KiB

Native Cross-Platform Mosh Client

Status: shipped via MoshCatty Related: #2025, #2072

Canonical repository

https://github.com/binaricat/MoshCatty

Netcatty only consumes moshcatty-* release binaries into resources/mosh/ via scripts/fetch-mosh-binaries.cjs / scripts/resolve-mosh-bin-release.cjs (default MOSH_BIN_REPO=MoshCatty).

There is no in-tree Rust source, no Cygwin packaging path, and no FluentTerminal / mosh-bin-* fallback.

Integration contract

MOSH_KEY=<key> mosh-client <host> <port>

Netcatty owns SSH bootstrap (moshHandshake + PTY), then swaps to the bundled MoshCatty binary under node-pty.

Concern Owner
SSH auth / MOSH CONNECT parse Netcatty Electron
UDP Mosh data plane MoshCatty binary
Packaging / fetch / electron-builder Netcatty scripts → MoshCatty releases

Why

Windows Cygwin mosh-client + partial runtime + ConPTY sandwich was architecturally broken. MoshCatty is a pure Rust, wire-compatible client with one code path on Linux / macOS / Windows (static CRT on Windows).

Linux compatibility floors

MoshCatty Linux release binaries must target the same glibc floors as Netcatty package jobs (not bare ubuntu-latest):

Target Netcatty package image Max GLIBC
linux-x64 almalinux:8 2.28
linux-arm64 debian:bullseye 2.31

Enforced upstream from moshcatty-0.1.2 via MoshCatty release CI (scripts/assert-max-glibc.sh). Do not pin packaging to pre-0.1.2 Linux assets (they require GLIBC 2.34).

MoshCatty compatibility floor

Netcatty requires moshcatty-0.1.7+. That release reconstructs each numbered remote state from its declared base before display, preventing duplicate characters when parallel updates share a base on high-latency links. It builds on the 0.1.6 speculative local echo hardening, the 0.1.5 Diff path, and the 0.1.4 ConPTY fixes. Packaging must not resolve or accept an older MoshCatty release.

Decision log

  • 2026-07-10: Feasibility accepted; client extracted to binaricat/MoshCatty.
  • 2026-07-10: Netcatty defaults packaging to MoshCatty releases.
  • 2026-07-10: Removed legacy Cygwin build pipeline, FluentTerminal fallback, mosh-bin-* tags, dll/terminfo runtime helpers. Pure MoshCatty only (moshcatty-0.1.1: ConPTY Ctrl+C + static MSVC CRT).
  • 2026-07-10: Require moshcatty-0.1.2+ for Linux glibc floors matching Netcatty (x64 ≤ 2.28, arm64 ≤ 2.31).
  • 2026-07-11: Require moshcatty-0.1.4+ for Windows ConPTY shortcut input; keep Mosh sessions on Netcatty's primary terminal screen so highlighting and scrollback remain available.
  • 2026-07-11: Speculative local echo (prediction underlines) lives in MoshCatty (DisplayPipeline, MOSH_PREDICTION_DISPLAY). Version 0.1.6 introduced prediction hardening for Netcatty #2121; Netcatty does not implement prediction in the renderer.
  • 2026-07-12: Require moshcatty-0.1.6+ for #2121 prediction; handshake failure messaging when MOSH CONNECT is missing (#2128).
  • 2026-07-15: Require moshcatty-0.1.7+ for #2121 numbered-state reconstruction, which fixes duplicate display on high-latency links.