A modern, secure multi-tab SSH client built with Tauri 2 + React, designed for developers who need seamless SSH connection management with cross-machine configuration portability.
- Multi-Tab Interface - Manage multiple simultaneous SSH sessions in a clean tabbed interface with drag-to-reorder support
- Split View Workspace - Switch between left-right, top-bottom, and four-pane layouts without interrupting active terminal connections
- Comprehensive Configuration - Full server, authentication, and proxy management with WebDAV sync
- Proxy & Jumphost Support - Connect through HTTP/SOCKS5 proxies or SSH jumphosts
- Port Forwarding - Easy local-to-remote port forwarding configuration per connection
- Frameless UI - Modern frameless window with embedded controls and custom drag regions
- Single-Instance Mode - Re-launching the app focuses the existing main window instead of opening another process
- Cross-Machine Sync - WebDAV-based configuration sync with conflict resolution
- SSH Key Management - Store SSH key content (not paths) for true portability
- Auto-Execute Commands - Run commands automatically after connection
- Environment Variables - Set custom environment variables per connection
- Connection Cloning - Quickly duplicate existing SSH sessions
- Keep-Alive - Configurable keep-alive intervals to maintain connections
Frontend:
- React 19 with TypeScript
- React Compiler enabled in Vite build (babel-plugin-react-compiler)
- xterm.js for terminal emulation
- Vite for build tooling
- Tailwind CSS v4 for styling
Backend:
- Rust with Tauri 2 framework
- russh for SSH protocol implementation
Storage:
- WebDAV protocol for sync
- Node.js 18+ and npm
- Rust 1.60+ (for building from source)
- Windows 10+ (current version targets Windows x64)
- Clone the repository:
git clone https://github.com/fonlan/resh.git
cd resh- Install dependencies:
npm install- Run in development mode:
npm run tauri-devResh stores configuration in %AppData%\Resh\:
%AppData%\Resh\
├── local.json # Local-only config (overrides)
└── logs\ # Connection logs
Both sync.json and local.json support:
- Servers - SSH server configurations with connection details
- Authentications - SSH keys and password credentials
- Proxies - HTTP/SOCKS5 proxy configurations
Only local.json support:
- General Settings - Theme, language, terminal preferences, WebDAV settings
- Synced Items - Stored in
sync.json, synced via WebDAV across machines - Local-Only Items - Stored in
local.json, machine-specific overrides - Merge Logic - Items in
local.jsonoverride matching UUIDs insync.json
# Frontend development
npm run dev # Run Vite dev server
npm run build # Build frontend (TypeScript + Vite)
# Tauri commands
npm run tauri-dev # Run Tauri in development mode
npm run tauri-build # Build production Tauri app
npm run tauri # Direct access to Tauri CLI
# SFTP performance harness (pass args after --)
npm run sftp:baseline -- -ServerHost <host> -User <user>
npm run sftp:fairness -- -ServerHost <host> -User <user>
npm run sftp:perf-suite -- -ServerHost <host> -User <user>SFTP harness outputs are written under artifacts/ by default. Use script flags (for example -PrivateKeyPath, -Port, -OutputDir) to adapt runs for your environment.
Frontend:
- Add components in
src/components/ - Use TypeScript for type safety
- Follow React hooks pattern
- Use Tailwind CSS v4 for styling (CSS-first configuration)
Backend:
- Add Tauri commands in
src-tauri/src/commands/ - Implement business logic in appropriate modules
- Use
#[tauri::command]macro for frontend-callable functions
npm run tauri-buildOutput: src-tauri/target/release/Resh.exe (portable executable)
- Portable Mode - Single
.exefile, no installer required - No Admin Rights - Runs from any location
- AppData Storage - All data in
%AppData%\Resh\
- Build the application
- Distribute the
Resh.exefile - Users run the exe - no installation needed
- Click the + button in the tab bar
- Select a configured server
- Or use Quick Connect for one-time connections
- Open Settings (gear icon or menu)
- Navigate through tabs:
- Servers - Add/edit SSH server configurations
- Authentications - Manage SSH keys and passwords
- Proxies - Configure HTTP/SOCKS5 proxies
- General - Theme, terminal, and WebDAV settings
- Configure WebDAV in Settings > General
- Use "Sync Now" for manual sync
- Default auto-sync when application startup
- Multi-tab SSH terminal interface
- Server/authentication/proxy management
- WebDAV configuration sync
- Jumphost and proxy support
- Port forwarding
- Frameless window with custom controls
Contributions are welcome! Please feel free to submit issues and pull requests.
Please report security vulnerabilities privately to the maintainers rather than using public issues.
- Built with Tauri
- Terminal emulation by xterm.js
- SSH implementation via russh
- Styling by Tailwind CSS
For issues and questions:
- GitHub Issues: Report a bug or request a feature
This project is licensed under the MIT License. See the LICENSE file for details.