Open-source SSH connection manager for Windows, macOS, and Linux.
- Multi-tab SSH terminal with xterm.js
- SFTP file browser (upload, download with progress bar, rename, delete)
- Connection manager with folder grouping & drag-drop
- Password and SSH key authentication (PPK & PEM supported)
- Import/export connections as JSON
- .ini / .mxtsessions session import (PuTTY, MobaXterm)
- Local terminal (PowerShell / zsh / bash)
- Keyboard-interactive auth (password prompt in terminal)
- File date & size display in file browser
- Configurable font sizes (terminal & sidebar)
- Resizable panels (sidebar & file browser)
- Splash screen with animated logo
- Cross-platform: Windows, macOS, Linux
- Dark theme (Tokyo Night)
- Node.js 18+ (LTS recommended)
- npm 9+
- Windows: No additional requirements
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux:
build-essential,libsecret-1-dev,rpm(for AppImage)
# Install dependencies
npm install
# Build and launch the app
npm start# Watch mode — Vite dev server + TypeScript watcher + Electron
npm run dev
# Build only (no launch)
npm run build
# Launch after build
npm startnpm run package:winOutput: release/win-unpacked/NexTerm.exe — portable, no installation needed. Double-click to run.
npm run package:macOutput: release/ — DMG installer and ZIP archive.
Note: Build on a Mac for macOS packages. Code signing and notarization require an Apple Developer account for distribution.
npm run package:linuxOutput: release/ — AppImage and tar.gz.
Note: Build on a Linux machine for Linux packages.
npm run packageCreates an unpacked directory build for the OS you're running on.
npm install→npm start(development)- Or run the packaged
release/win-unpacked/NexTerm.exe - Local terminal uses PowerShell by default
npm install→npm start(development)- Or open the packaged
.appfrom DMG - Uses native window frame with system traffic light buttons
- Local terminal uses your default shell (zsh on macOS Catalina+)
- Data stored in
~/Library/Application Support/NexTerm/ - Logs stored in
~/Library/Application Support/NexTerm/logs/
npm install→npm start(development)- Or run the AppImage:
chmod +x NexTerm-*.AppImage && ./NexTerm-*.AppImage - Uses native window frame
- Local terminal uses your
$SHELLor/bin/bash - Data stored in
~/.config/NexTerm/ - Logs stored in
~/.config/NexTerm/logs/
All data is stored in the OS user data directory under NexTerm/:
| Platform | Path |
|---|---|
| Windows | %APPDATA%\NexTerm\ |
| macOS | ~/Library/Application Support/NexTerm/ |
| Linux | ~/.config/NexTerm/ |
Files:
connections.json— saved SSH connectionssettings.json— app settings (font size, default key, etc.)logs/nexterm.log— application log (5MB max, auto-rotated)
- Export: Settings → Export → saves all connections as a
.jsonfile - Import JSON: Settings → Import → select a previously exported
.json - Import Sessions: Settings → Import .ini/.mxtsessions (PuTTY, MobaXterm)
| Command | Description |
|---|---|
npm start |
Build + launch Electron |
npm run dev |
Development mode with hot-reload |
npm run build |
Compile TypeScript + bundle renderer |
npm run package |
Package for current platform |
npm run package:win |
Package for Windows (unpacked dir) |
npm run package:mac |
Package for macOS (DMG + ZIP) |
npm run package:linux |
Package for Linux (AppImage + tar.gz) |
Electron · React · TypeScript · xterm.js · ssh2 · Tailwind CSS · Vite · Lucide Icons
Windows Defender real-time scanning can block electron-builder's cache operations. Solutions:
- Run the terminal as Administrator
- Add
%LOCALAPPDATA%\electron-builder\Cacheto Defender exclusions
For unsigned builds: xattr -cr /path/to/NexTerm.app
Make it executable: chmod +x NexTerm-*.AppImage
Install a Nerd Font or one of: JetBrains Mono, Cascadia Code, Fira Code
MIT