A cross-platform terminal client for BBS, MUD, and SSH connections, written in Rust. Built around an address book of saved hosts, with a real VT/xterm-compatible emulator so colored ANSI art and full-screen apps render correctly.
- Telnet with proper IAC negotiation (ECHO, SUPPRESS-GO-AHEAD, NAWS auto-resize, TERMINAL-TYPE →
XTERM-256COLOR). - SSH via russh: key-based auth from
~/.ssh/id_ed25519,id_ecdsa,id_rsa, falling back to a masked password prompt. Host keys are verified against a TOFUknown_hostsstore with an explicit trust prompt on first connect and a hard-fail prompt on key mismatch. - Address book persisted as TOML (
~/Library/Application Support/nerdterm/address_book.tomlon macOS,$XDG_CONFIG_HOME/nerdterm/on Linux). Add / edit / delete entries from the UI. - Two input modes when connected — line-buffered (with command history, good for MUDs) and character-at-a-time (raw keys + ANSI escapes, good for full-screen apps like vim or BBS doors).
- Scrollback buffer of 1000 lines.
- Session suspend:
Escreturns to the address book without dropping the connection; resume withEnteron the highlighted entry. - Session capture: hotkey-toggled raw-byte transcript of inbound server data to a self-describing
.logfile in the user's config dir. Activate withCtrl+] l; help viaCtrl+] ?. ANSI is preserved socatreplays the session in color.
Pre-built binaries for the current release live on the Releases page. Pick the archive for your platform:
| Platform | File |
|---|---|
| Linux (x86_64) | nerdterm-x86_64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | nerdterm-aarch64-apple-darwin.tar.gz |
| macOS (Intel) | nerdterm-x86_64-apple-darwin.tar.gz |
| Windows (x86_64) | nerdterm-x86_64-pc-windows-msvc.zip |
Extract and run. On Linux/macOS:
tar -xzf nerdterm-<target>.tar.gz
./nerdtermOn Windows, unzip and run nerdterm.exe from a modern terminal (Windows Terminal or PowerShell 7+ recommended — cmd.exe won't render ANSI art reliably).
Optionally drop the binary into your PATH (~/.local/bin, /usr/local/bin, %USERPROFILE%\bin, etc.).
Each archive ships with a .sha256 companion. Verify before running:
shasum -a 256 -c nerdterm-<target>.<ext>.sha256macOS Gatekeeper: the binaries are unsigned. The first launch will be blocked — either right-click the binary in Finder → Open and confirm, or strip the quarantine attribute from the terminal:
xattr -d com.apple.quarantine nerdtermWindows SmartScreen: the binary is unsigned. SmartScreen may warn on first launch; click More info → Run anyway.
Requires a Rust toolchain (1.85+).
git clone https://github.com/damonLL/nerdterm.git
cd nerdterm
cargo build --release
./target/release/nerdtermOr run directly with cargo run --release.
| Key | Action |
|---|---|
↑/↓ or k/j |
Move selection |
Enter |
Connect (or resume if already connected) |
A |
Add entry |
E |
Edit selected entry |
D |
Delete selected entry |
Ctrl+D |
Disconnect active session |
S |
Open settings popup |
Q / Esc |
Quit (disconnects first) |
| Key | Action |
|---|---|
Tab |
Toggle line-buffered ↔ character mode |
Esc |
Suspend session, return to address book |
Ctrl+D |
Disconnect |
Shift+PgUp / Shift+PgDn |
Scroll back/forward through scrollback |
In line mode: ↑/↓ browse command history, Enter sends the line.
In character mode: arrows, function keys, and Ctrl+<x> are sent raw.
Tab/Shift+Tab move between fields. Space toggles Telnet/SSH (port auto-flips between 23 and 22). Enter saves, Esc cancels.
The Term: field cycles with Space through (default) → xterm-256color → xterm → ansi → vt100 → vt220 → dumb. (default) falls back to the global terminal type from Settings; any other value overrides it for this entry only — useful when individual servers expect different terminal types.
First launch ships with a few public hosts you can connect to without configuration: CoffeeMUD, a Star Wars ASCII stream, Aardwolf MUD, Legend of the Red Dragon, and the Synchronet BBS.
Press S from the address book to open the settings popup. Three knobs are exposed:
| Setting | Description | Default |
|---|---|---|
| Scrollback (lines) | Off-screen history depth per session | 1000 |
| Default input mode | Initial input mode for new connections (line or character) |
line |
| Terminal type | Global fallback reported during telnet/SSH negotiation. Space cycles xterm-256color → xterm → ansi → vt100 → vt220 → dumb. Per-entry overrides (set in the address-book Edit popup's Term: field) take precedence over this. Telnet uppercases on the wire (e.g. XTERM-256COLOR); SSH passes through unchanged. Hand-edit settings.toml for values outside the list. |
xterm-256color |
Settings persist to <config_dir>/nerdterm/settings.toml (~/.config/nerdterm/settings.toml on Linux, ~/Library/Application Support/nerdterm/settings.toml on macOS) and apply to the next connection. The active session and any suspended session keep the values they were started with.
If the file becomes unparseable (e.g. hand-edited badly), nerdterm renames it to settings.toml.corrupt-<timestamp> on startup, falls back to defaults, and surfaces a warning on the address-book status line.
Telnet, SSH (key + password + known_hosts TOFU), address book persistence, session suspend, and session capture all ship. Multi-tab sessions are planned for a future v2.