A powerful cross-platform SSH terminal application built with Electron + React
δΈζ | Download | Features | Development
SimpleShell is a modern, feature-rich SSH terminal application that combines the power of Electron's desktop capabilities with React's intuitive development experience. Designed for developers and system administrators who need efficient remote server management.
- Multi-Protocol Support: SSH, Telnet, Serial (COM), Mosh, and local PowerShell terminals
- Connection Pooling: Intelligent connection reuse to minimize resource usage
- OpenSSH Config Import: Parse
~/.ssh/configand batch-import hosts in one click (supports HostName/Port/User/IdentityFile/ForwardAgent, Host wildcard & negation patterns, and global defaults; hosts using ProxyJump/ProxyCommand are flagged for manual jump configuration) - SSH Agent Forwarding: Enable forwarding with password, private-key, or agent login. Password/private-key connections keep their login methods when forwarding is enabled; imported
ForwardAgent yesapplies to those connections too. The local agent path is configurable; reconnect after changing this setting. - Serial Console: Direct serial/COM connections with configurable baud rate, data bits, stop bits, parity, and flow control; each tab holds an exclusive session per port
- Mosh Support: Weak-network/roaming-friendly sessions via a locally hosted mosh client (SSH bootstrap; interactive authentication happens in the terminal). On Windows, run through WSL or point to an MSYS2/Cygwin mosh binary; prediction mode (adaptive/always/never/experimental) and a custom mosh-server port are configurable.
- Mosh Roaming Status: The connection indicator follows the focused pane and displays running, waiting for recovery, or exited. Waiting follows the stock Mosh client's network notice; keep the tab open during an outage or network change so the client can recover the existing session. This is a display hint, not a UDP latency measurement; SSH probes do not restart Mosh sessions.
- Smart Tabs: Drag-drop tab reordering, merging, and split-screen support
- Split Terminal: Drag a tab onto the middle of another tab (stack-merge) or into the terminal area to merge it into a split view (up to 2Γ2 panes); right-click the merged tab β "Unsplit & Restore Tabs" to restore panes back to standalone tabs β sessions and terminal content are preserved on both merge and unsplit; each pane an independent session that can connect to a different host; drag pane headers to swap, drag dividers to resize; panes compose with sync-input groups for batch ops (
Ctrl+Shift+Wcloses the focused pane) Closing a pane ends only that session, including the root pane; closing other panes retains exactly the selected session. Split tabs must be restored to standalone tabs before they can be merged into another tab. - Group Synchronization: Execute commands across multiple connections simultaneously
- Active Session Tools: Resource monitoring, file management, AI, and quick commands follow the focused pane. File navigation and AI conversations/drafts stay separate for each session; switching SSH panes keeps the file sidebar open.
- Visual Server Map: Geographic visualization of server locations worldwide
- Full SFTP Browser: Intuitive file browsing with drag-drop operations
- Native SFTP Operations: Directory browsing, file reads/writes, and transfers run in the Rust service. Uploads have no file-count cap. Dragged upload conflict checks submit the complete path list and use eight concurrent metadata reads on one session; JavaScript owns task scheduling, retries, and resume manifests.
- Follow Terminal Directory: A persistent global option in Settings β General lets SFTP follow the focused SSH terminal, with directory state isolated per tab or split session. Enabled by default.
- Bulk Transfers: Upload/download entire folders with progress tracking
- Resumable SFTP Transfers: Pause, reconnect, or restart the app and resume retained files from the transfer panel; files of 128 MiB or larger resume by completed segments
- Integrity Verification: Optional SHA-256 by default or MD5 per task, streamed over SFTP without shell access; a mismatch triggers exactly one full-file retransmission and reports both hashes if it fails again
- Zero-Copy Engine: High-performance file transfers with minimal memory usage
- Smart Caching: Multi-level cache for improved file access speed
- File Preview: Built-in viewer for text, images, code, and PDFs
- Intelligent Command Helper: AI assistant for command suggestions and explanations
- Multi-Model Support: Configurable AI providers and models
- Streaming Responses: Real-time AI responses with context awareness
- Worker Thread Processing: Non-blocking AI operations for smooth performance
- Modern UI: Material-UI v7 with smooth animations and transitions
- Theme Support: Dark and light modes with system preference detection
- Command History: Intelligent command suggestions and auto-completion
- Multi-Language: Full internationalization (English and Chinese)
- Shortcut Management: Custom command shortcuts and macros
- Resource Monitor: Real-time CPU, memory, and network statistics
- Remote System Info: Monitor remote server performance via SSH
- Network Diagnostics: IP address lookup with geolocation
- Security Tools: Built-in password generator with customizable rules
- Lazy Loading: Components loaded on-demand for faster startup
- Backpressure Control: Stable file transfers with flow control
- Memory Management: Active memory pool with leak detection
- Connection Health Monitoring: Automatic reconnection and failover
curl -fsSL https://raw.githubusercontent.com/funkpopo/simpleshell/main/scripts/install-linux.sh | shInstall a specific version:
curl -fsSL https://raw.githubusercontent.com/funkpopo/simpleshell/main/scripts/install-linux.sh | SIMPLESHELL_VERSION=0.4.39 shThe script detects Debian/Ubuntu .deb and Fedora/RHEL/openSUSE .rpm systems, then downloads the matching latest package for the current CPU architecture from GitHub Releases.
Download the latest release for your platform from the Releases page.
- Windows:
.exeinstaller - Linux:
.debor.rpmpackage
If you prefer to build from source, follow the development instructions below.
Vitest suites under tests/unit cover contracts, architecture boundaries and application behavior. tests/integration covers Electron rendering, production bundles and real Rust services. All verification runs locally: npm run check runs lint and unit tests; npm run test:integration runs the native/Electron suites.
- Node.js 22.22.2+ (22 LTS) or 24.15.0+ and npm
- Git
- Python (for node-gyp compilation)
- Build tools for your platform:
- Windows: Visual Studio Build Tools or Visual Studio
- macOS: Xcode Command Line Tools
- Linux: build-essential package
# Clone the repository
git clone https://github.com/funkpopo/simpleshell.git
cd simpleshell
# Install dependencies
npm install# Start development server with hot reload
npm run startThis will:
- Start the Webpack dev server on port 3001
- Launch Electron in development mode
- Enable hot module replacement for React components
# Format code with Prettier
npm run format
# Run unit, contract and architecture tests
npm test
# Run only Node unit tests
npm run test:unit
# Compile the native host for local integration tests
cargo build --locked --manifest-path native-services/desktop-host/Cargo.toml
# Run Electron, native service and production bundle integration tests
npm run test:integration
# Run all local checks and integration tests
npm run test:all
# Lint application code, scripts and unit tests
npm run lint
# Package application for current platform
npm run package
# Build distributable installers
npm run make
# Publish application (requires configuration)
npm run publishPreload contracts use JSDoc and shared declarations in src/shared/contracts/preload.d.ts.
npm run check parses exposed methods and IPC calls with TypeScript, then checks
all src/preload/**/*.js modules against their annotations using
tsconfig.preload.json, with full strict checking enabled (including
noImplicitAny and strictFunctionTypes). The editor-discoverable
src/preload/tsconfig.json inherits the same configuration. Raw IPC
responses that have no detailed contract remain unknown and must be narrowed
by callers; this check does not type-check the renderer or main-process handlers.
# Build for current platform
npm run make
# Build for specific platform
npm run make -- --platform=win32
npm run make -- --platform=darwin
npm run make -- --platform=linuxsimpleshell/
βββ src/
β βββ main/ # Electron lifecycle, IPC, sessions, storage, native clients
β βββ preload/ # contextBridge API and subscriptions
β βββ renderer/ # React UI, terminal views and browser helpers
β βββ shared/ # Contracts, pure cross-runtime logic and locales
βββ native-services/ # Rust native-services crate
βββ tests/ # Unit, contract and integration suites, helpers and fixtures
βββ scripts/ # Build and release tools
βββ forge.config.js
βββ webpack.*.config.js
Source is organized by runtime. Area-specific conventions live in README files next to the code (for example src/main/file-transfer/ and src/renderer/features/).
- Electron 40.4.1 - Cross-platform desktop framework
- React 19.2.8 - UI library (React 19)
- Material UI 9.2.0 - Component library
- Electron Forge + Webpack + ESLint/Prettier - Build and code quality toolchain
- JavaScript/JSX + Babel toolchain (no TypeScript build in this repo)
- xterm.js 6.1.0-beta.167 - Terminal emulator + add-ons
@xterm/addon-fit,@xterm/addon-search,@xterm/addon-web-links,@xterm/addon-image,@xterm/addon-webgl
- ssh2 1.17.0 - SSH/SFTP client
- node-pty 1.2.0-beta.11 - Pseudo terminal support
- telnet-client 2.2.13 - Telnet client
- Rust host (
native-services/) -simpleshell-native-serviceshosts file-management and AI services behind stable subcommands
- CodeMirror 6 (
@codemirror/*,@uiw/react-codemirror) - Syntax highlighting and editors - highlight.js - Additional code highlighting
- react-markdown +
remark-gfm- Markdown rendering - react-pdf - PDF preview
- DND kit (
@dnd-kit/*) - Drag-and-drop interactions
- i18next + react-i18next - Internationalization
- react-simple-maps - World map visualization
- systeminformation - System info collection
- Proxy support:
http-proxy-agent,https-proxy-agent,socks-proxy-agent - Performance helpers:
react-window,react-window-infinite-loader
src/main/connection/ owns protocol pools, reconnection and connection orchestration; connectionManager.js composes the pools. Terminal sessions live in src/main/terminal/, SFTP task orchestration in src/main/file-transfer/, and Rust clients in src/main/native/.
Renderer accesses these capabilities through preload. IPC definitions and terminal protocols live in src/shared/contracts/; neither runtime imports the other runtime implementation.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
If you encounter any issues or have questions:
- Open an issue on GitHub Issues
- Check existing issues for solutions
- Provide detailed information about your environment and the problem
Distributed under the Apache License 2.0. See LICENSE for more information.
funkpopo - funkpopoisme@gmail.com
