A modern SSH/SCP/SFTP client built with Rust, Tauri 2, and Svelte 5.
SlopSSH/
├── crates/
│ ├── slopssh-core/ # Pure Rust library (SSH engine, sessions, config)
│ ├── slopssh-tauri/ # Tauri app binary (IPC commands, menus, tray)
│ └── slopssh-plugins/ # Example WASM plugins
├── frontend/ # Svelte 5 + xterm.js UI
├── scripts/ # Bundled remote shell scripts
└── .github/workflows/ # CI/CD
Key principle: All business logic lives in slopssh-core. The Tauri layer is a thin IPC bridge. The Svelte frontend handles all UI.
cargo install tauri-cli --version "^2"sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libappindicator3-dev \
librsvg2-dev \
patchelf \
libssl-dev \
libgtk-3-dev \
libayatana-appindicator3-dev
No additional system dependencies required beyond Rust and Node.js.
# 1. Clone the repository
git clone https://github.com/slop-ops/SlopSSH.git
cd SlopSSH
# 2. Install frontend dependencies
cd frontend && npm install && cd ..
# 3. Build production binaries
cd crates/slopssh-tauri && cargo tauri build
Output artifacts:
crates/slopssh-tauri/target/release/bundle/deb/slopssh_0.1.0_amd64.deb — Debian packagecrates/slopssh-tauri/target/release/bundle/appimage/slopssh_0.1.0_amd64.AppImage — AppImage# 1. Clone the repository
git clone https://github.com/slop-ops/SlopSSH.git
cd SlopSSH
# 2. Install frontend dependencies
cd frontend && npm install && cd ..
# 3. Build production binaries
cd crates\slopssh-tauri && cargo tauri build
Output artifacts:
crates\slopssh-tauri\target\release\bundle\nsis\SlopSSH_0.1.0_x64-setup.exe — NSIS installercrates\slopssh-tauri\target\release\bundle\msi\SlopSSH_0.1.0_x64_en-US.msi — MSI installer# Development mode (hot reload)
cd crates/slopssh-tauri && cargo tauri dev
# Run Rust tests
cargo test --workspace
# Lint
cargo clippy --workspace --all-targets -- -D warnings
cargo fmt --check
# Frontend
cd frontend && npm run build
cd frontend && npm run check
cd frontend && npm run test
cd frontend && npm run test:e2e
Cargo.toml and crates/slopssh-tauri/tauri.conf.jsongit tag v0.1.0 && git push origin v0.1.0.deb + .AppImage) and Windows (.exe + .msi) artifacts| Layer | Tech | Role |
|---|---|---|
| Core | Rust | SSH engine, session management, file transfers, config |
| Desktop | Tauri 2 | Native packaging, IPC bridge, menus, tray |
| Frontend | Svelte 5 + xterm.js | All UI, communicates via Tauri invoke() and events |
app.emit() events (terminal output, transfer progress, plugin events)invoke() commands (connect, list files, save settings)Config lives in ~/.config/slopssh/ (XDG on Linux) or %APPDATA%\slopssh\ (Windows):
| File | Purpose |
|---|---|
settings.toml |
App settings |
sessions.json |
Saved sessions tree |
snippets.json |
Command snippets |
window_bounds.json |
Window position/size |
plugins/ |
WASM plugin files |
plugin_settings.json |
Per-plugin settings |
.slopssh files are JSON containing a SessionInfo struct:
{
"id": "uuid",
"name": "My Server",
"host": "example.com",
"port": 22,
"username": "user",
"auth_type": "PublicKey",
"private_key_path": "~/.ssh/id_ed25519"
}
See crates/slopssh-plugins/README.md for the plugin API.
GPL-3.0