Native viewing, images, a real browser and Vespyr Arcade. NMSh still runs your real zsh, Bash or Fish in one persistent session. v0.22.0 is the next stable release after v0.20.0; it includes the v0.21.0 candidate, which was never published separately.
What’s new
- Reviewed multiline pastes run three ways: One at a time (the default), Queue all (shell and NMSh commands, stopping on a failure) or Run as block (shell commands only, with a warning). Quotes, loops and heredocs stay whole.
- Real images:
/view image.png(PNG, JPEG, GIF first frame, WebP through a converter already installed) and images in Markdown and HTML, drawn with the Kitty graphics protocol where the terminal confirms it, otherwise as character art. Nothing is assumed from the terminal’s name; Zed and multiplexers get character art. - Larger headings where the terminal scales text (OSC 66, detected rather than assumed). Saved documents, the clipboard and transcripts never contain the sequences.
- One workspace for Markdown and HTML:
/viewopens the source,hpreviews,eedits the same buffer,Ctrl+Ssaves. The preview shows unsaved text. With Chrome, Chromium or Edge installed the preview is a real Chromium page (scripts off unless you trust the file); otherwise NMSh’s own renderer. /browser: a real browser in the terminal, started only when you open it, in an isolated throwaway profile, with tabs, address bar, find, zoom, forms and mouse.- Vespyr Arcade:
/games(/game,/arcade): Vespyr Run, Flight and Dash, Classic Sudoku and Vespyr Doku, with local scores and no accounts. Only the open game reads the keyboard; it never starts over a running command. - Native
/viewand/edit, Semantic Output (first phase),/track, safer typing while a command runs (passwords are never shown, queued or run as commands), history browsing with its position, Ask command suggestions from your local model, Bun, Nix shell and container modules,/modules explainandtimings, and five more theme families.
Full details, upgrade notes and compatibility are in the changelog.
How this release was verified, and what was not
- Automated: hosted CI on the exact release commit (unit and real-PTY suites on macOS and Ubuntu, Node 22 and 26, a Fedora portability subset and the timing smokes), in a pull-request run and a dispatched run. The maintainer accepted hosted CI in place of a local
npm run verify:releaseon an 8 GB machine. The one local full run made had 3,730 of 3,741 tests passing; the 11 other tests are load-sensitive live-terminal tests that passed when rerun alone. - Physical terminals: not performed for the nine required passes and for the final additions (multiline modes, images, text sizing, the document workspace,
/browser, the arcade). The maintainer decided to release without them and accepted that risk; that is an acceptance, not a test result. Kitty graphics, OSC 66 and Chromium frames have not been seen in a real Ghostty or Kitty.
Known limitations
- Hosted macOS live-terminal tests are intermittent (about 4 in 10 hosted CI runs passed first time over the two days before release). Two causes were found and fixed; the rest are unexplained and not shown to be harmless.
- A line entered in the few milliseconds around a queued command’s approval can be attributed to the wrong command in the transcript (nothing is lost, repeated or run unapproved).
- Ghostty accepts text sizing sequences but is not known to draw scaled glyphs, so Auto leaves it off there. Images are never fetched from the network, animated images show their first frame, and WebP needs a converter that is already installed.
- The package is private; nothing is published to npm. Install with Homebrew (
brew upgrade raiseCatError/tap/nmsh) or from source.