Skip to content

damonLL/nerdterm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NerdTerm

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.

Features

  • 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 TOFU known_hosts store with an explicit trust prompt on first connect and a hard failure on key mismatch — an on-screen banner, not an accept/override prompt; re-trusting a rotated key means removing that host's entry from known_hosts.toml.
  • Address book persisted as TOML (~/Library/Application Support/nerdterm/address_book.toml on 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, configurable (default 1000 lines; adjustable in Settings).
  • Session suspend: Esc returns to the address book without dropping the connection; resume with Enter on the highlighted entry.
  • Session capture: hotkey-toggled raw-byte transcript of inbound server data to a self-describing .log file under <config_dir>/nerdterm/sessions/ (~/.config/nerdterm/sessions/ on Linux, ~/Library/Application Support/nerdterm/sessions/ on macOS). Activate with Ctrl+] l; help via Ctrl+] ?. ANSI is preserved so cat replays the session in color.

Download

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

Windows and Intel-Mac builds are coming in a future release. The Windows binary already builds and passes a smoke test in CI but isn't attached to a release yet; the Intel-Mac target is not building reliably. On those platforms, build from source to run NerdTerm today.

Extract and run:

tar -xzf nerdterm-<target>.tar.gz
./nerdterm

Optionally drop the binary into your PATH (~/.local/bin, /usr/local/bin, etc.).

Each archive ships with a .sha256 companion. Verify before running:

shasum -a 256 -c nerdterm-<target>.<ext>.sha256

macOS 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 nerdterm

Build from source

Requires a Rust toolchain (1.85+).

git clone https://github.com/damonLL/nerdterm.git
cd nerdterm
cargo build --release
./target/release/nerdterm

Or run directly with cargo run --release.

Keybindings

Address book

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)

Connected session

Key Action
Tab Toggle line-buffered ↔ character mode
Esc Suspend session, return to address book (connection stays live)
Ctrl+D Disconnect (line mode only — in character mode ^D is sent to the host)
Ctrl+C Quit nerdterm from line mode / address book; in character mode ^C is sent to the host
Ctrl+] q Quit nerdterm (works in either mode; disconnects first)
Ctrl+] l Toggle session capture on/off
Ctrl+] ? Show the Ctrl+] chord help
Shift+PgUp / Shift+PgDn Scroll back/forward through scrollback (any mode)
PgUp / PgDn Scroll scrollback (line mode only — sent to the host in character mode)
Mouse wheel Scroll scrollback
Paste Bracketed paste into the line buffer, character stream, or password popup

In line mode: / browse command history, Enter sends the line. In character mode: arrows, function keys, and Ctrl+ACtrl+Z (including ^C / ^D) are sent raw. Only Ctrl+] is reserved as the local-command chord prefix.

Edit/Add popup

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.

Default entries

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.

Settings

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.

Status

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.

About

A TUI client for BBS, MUD, and SSH connections, written in Rust.

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors