Cross-platform SSH manager desktop app (Tauri + React) focused on fast host management and clean terminal workflows.
Repository: github.com/d0dg3r/NoSuckShell
- Split workspace — Start with one full-size panel; split recursively (e.g. left / bottom) with a default 60/40 ratio; resizable dividers; drag-and-drop panel reorder (swap).
- Layout profiles — Save, load, and delete layouts with hosts (geometry + host/session mapping) or layout only (geometry).
- SSH integration — Hosts from
~/.ssh/config, embedded terminals (xterm), local shell sessions, quick connect. - Encrypted backups — Export/import is password-protected; plain legacy JSON backups are rejected on purpose.
- Cross-platform — Linux, macOS, and Windows builds via GitHub Releases.
More sizes (Flathub downscales, Microsoft/Snap 1920×1080), captions for AppStream, video notes, and regeneration commands: docs/media/screenshots/README.md.
Download the latest Release or Pre-release asset for your platform from the Releases page.
Arch Linux / CachyOS (AUR) — Install the pre-built package with an AUR helper:
yay -S nosuckshell-binThe AUR PKGBUILD is maintained in aur/nosuckshell-bin/; see aur/README.md for maintainer setup.
Arch Linux / CachyOS (manual .pkg.tar.zst) — Releases may include nosuckshell-….pkg.tar.zst. Install or upgrade locally:
sudo pacman -U ./nosuckshell-<version>-1-x86_64.pkg.tar.zstTo build that package yourself after a local npm run tauri:build (or npm run tauri:build:linux-appimage on rolling distros), set pkgver in apps/desktop/src-tauri/PKGBUILD (Arch pkgver cannot contain -; map prerelease hyphens to .), then run makepkg -f from apps/desktop/src-tauri. The PKGBUILD repackages the Tauri .deb under target/release/bundle/deb/.
Requirements
- Node.js and npm (for the desktop app under
apps/desktop) - Rust stable, Cargo, and Tauri 2 prerequisites for your OS
From the repository root, the first npm run tauri:dev / desktop:build can install dependencies under apps/desktop automatically if they are missing. You can still install explicitly:
npm run desktop:install
npm run tauri:devOn Wayland, the app sets WEBKIT_DISABLE_DMABUF_RENDERER=1 by default when that variable is not already in the environment (it avoids blank or unstable WebKitGTK webviews on some stacks). On X11 it leaves the variable unset. You can still export WEBKIT_DISABLE_DMABUF_RENDERER yourself before launch to force a specific value.
AppImage (npm run tauri:build) on rolling distros (Arch, CachyOS, …) may fail with failed to run linuxdeploy. From the repo root use npm run tauri:build:linux-appimage instead, or see CONTRIBUTING.md for APPIMAGE_EXTRACT_AND_RUN and NO_STRIP.
Or from apps/desktop:
cd apps/desktop
npm install
npm run tauri:devPassing extra arguments to the desktop binary requests a one-shot layout after startup (the app still restores saved workspaces from the previous run first, then applies the profile).
Help:
nosuckshell --help
# or: nosuckshell -hPrints options to stdout and exits (no window). With -h / --help, other flags are ignored.
Launch modes (use at most one):
| Mode | Short | Long | Deprecated alias |
|---|---|---|---|
| NSS-Commander workspace (dual local file panes at home); host sidebar collapsed | -c |
--local-commander |
--commander |
| Single Main workspace, one local terminal; host sidebar collapsed | -t |
--local-terminal |
--single-shell |
Do not combine --local-commander / -c and --local-terminal / -t (or their aliases); the app reports an error and applies neither.
Installed binary (Arch package, .deb, etc.):
nosuckshell --local-commander
nosuckshell -c
nosuckshell --local-terminal
nosuckshell -tDevelopment (repo root): pass flags after npm run tauri:dev --. The root script forwards them so they reach the app (Tauri requires an extra -- between runner and app args; the wrapper adds that for you):
npm run tauri:dev -- --local-terminal
npm run tauri:dev -- -cFrom apps/desktop directly, include the Tauri separators yourself (tauri dev -- [runner] -- [app]; with an empty runner section that is three -- tokens before your flag):
cd apps/desktop
npm run tauri:dev -- -- -- --local-commander
npm run tauri:dev -- -- -- -tFlatpak (and similar launchers) usually need an extra -- before these flags, for example: flatpak run … dev.nosuckshell.NoSuckShell -- --local-terminal.
cd apps/desktop
npm test
npm run build
cd src-tauri
cargo test
cargo checkFrom the repo root you can run npm run desktop:test for the desktop package tests.
- Backup export/import is password protected and encrypted.
- Unencrypted legacy JSON backups are intentionally rejected.
- Backup path handling supports
~expansion and cross-platform path normalization.
Details: docs/backup-security.md
GitHub releases are created by pushing a SemVer tag. Full checklist: docs/releases.md. User-facing history: docs/CHANGELOG.md.
- Final:
vMAJOR.MINOR.PATCH(example:v0.2.1,v1.2.3) - Pre-release:
vMAJOR.MINOR.PATCH-<suffix>(example:v1.2.4-rc.1,v0.1.0-beta.11)
Before tagging, use the same version string in:
apps/desktop/package.jsonapps/desktop/src-tauri/Cargo.tomlapps/desktop/src-tauri/tauri.conf.json
The release workflow still overwrites those files from the tag at build time; keeping them aligned locally avoids drift while developing.
git tag v0.2.1
git push origin v0.2.1If the workflow rejects the tag, use vMAJOR.MINOR.PATCH or vMAJOR.MINOR.PATCH-prerelease (example: v2.0.0 or v2.0.0-rc.1).
| Resource | Description |
|---|---|
| docs/README.md | Documentation index |
| docs/CHANGELOG.md | Release notes |
| docs/architecture.md | App architecture (Tauri, React, Rust, IPC) |
| docs/STYLE_GUIDE.md / docs/CODE_GUIDE.md | Style and implementation guides |
| AGENTS.md | IDE / agent entry point |
| CONTRIBUTING.md | Setup, validation, pull requests |
| SECURITY.md | Reporting vulnerabilities |
| CODE_OF_CONDUCT.md | Community standards |
The source code is under the MIT License. A few built-in plugins can be unlocked in official binaries with a signed license token after a small purchase (for example via Ko-fi); see docs/licensing.md and the maintainer template docs/terms-of-sale.md.
If NoSuckShell is useful to you:
- Star the repository so others can find it.
- Sponsor d0dg3r on GitHub Sponsors if you want to support maintenance.
- Contribute via issues and pull requests.











