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
79 lines
3.3 KiB
Markdown
79 lines
3.3 KiB
Markdown
# Native Cross-Platform Mosh Client
|
|
|
|
Status: **shipped via [MoshCatty](https://github.com/binaricat/MoshCatty)**
|
|
Related: [#2025](https://github.com/binaricat/Netcatty/issues/2025), [#2072](https://github.com/binaricat/Netcatty/issues/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
|
|
|
|
```text
|
|
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.
|