Cross-platform SSH and SFTP desktop client built with Tauri v2, Rust, and React.
License: GPL-3.0 | Version: 0.1.0 (beta) | Platforms: Windows, macOS, Linux
Pylon is in beta. The vault format and configuration schema may change between pre-release versions. Back up your vault before upgrading.
Windows, macOS (Apple Silicon + Intel), and Linux — all builds available on the website. No account required. Free and open source under GPL-3.0.
macOS: Not yet notarized. Right-click the
.app→ Open → confirm in the security dialog on first launch.
| Files | Terminal |
|---|---|
![]() |
![]() |
| Sync | Transfers |
|---|---|
![]() |
![]() |
| Settings | ZVault |
|---|---|
![]() |
![]() |
- Dual-pane browser: local filesystem on the left, remote SFTP on the right, resizable
- Multi-select with Shift+Click (range), Ctrl+Click (individual), Ctrl+A (all)
- Drag-and-drop upload and download between panes
- Context menu with full file operations
- Sortable columns (name, size, modified, permissions)
- Editable path bar (Ctrl+L), click-to-navigate breadcrumb, bookmarks
- File permission display (octal and rwx notation)
- Regex and fuzzy filter per pane
- Remote chmod editor
- Resume support: interrupted transfers restart from the last verified byte
- Atomic writes: files staged as
.pylon_tmp_*and renamed on completion - SHA-256 checksumming per transfer
- Real-time bytes/sec and ETA in the transfer drawer (Ctrl+T)
- Pause, resume, and retry controls per transfer
- Concurrent transfers (1–16, configurable)
- Optional per-transfer bandwidth limit (kbps)
- Recursive directory upload/download
- Overwrite policy: ask / overwrite all / skip all
- xterm.js with full VT100/ANSI, 256-color support
- Multiple terminal tabs per session, with tab rename
- Navigating the remote pane sends a
cdcommand to the active terminal - Command snippets toolbar (save frequently used commands as quick-launch buttons)
- Clickable URLs via xterm-addon-web-links
- Shell selection (bash, zsh, sh, fish) per connection
- AES-256-GCM encryption for all stored credentials
- Argon2id key derivation from master passphrase (m=64 MB, t=3, p=4)
- Unique random salt and nonce per vault; no pre-computation attacks apply
- Auto-lock after configurable idle timeout
- Decrypted credentials kept in memory only; never written to disk in plaintext
- SSH key path storage alongside passwords
- Full CRUD UI for managing stored profiles
- Watch a local directory and sync changes to a remote path over SFTP
- Powered by the
notifycrate (inotify / kqueue / ReadDirectoryChangesW) - Only changed files are uploaded; unchanged files are skipped
- 100 ms debounce window to coalesce rapid saves
- Delete propagation: remote files are deleted when local files are removed
- Optional timestamp preservation (mtime mirrored to remote)
- Optional permission mirroring (chmod applied to remote)
.syncignorefile support (gitignore syntax);.gitignoreis also respected- Keep-on-disconnect: watchers can be paused rather than stopped when a session ends
- Configurable overwrite rules: always overwrite / new files only / update existing / confirm on overwrite / confirm all
Strip privacy-sensitive metadata in-flight on upload, or on-demand via context menu.
| Format | Stripped |
|---|---|
| JPEG / PNG / WebP / GIF | EXIF data (GPS, camera, serial, timestamps, thumbnails) |
| Author, creator, producer, keywords, XMP metadata |
Enable globally in Settings → Security, or trigger per-file from the context menu.
- SSH host key verification against
~/.ssh/known_hostson every connection - Changed host keys show a blocking warning dialog (configurable policy: ask / auto-accept / strict)
- SSH keepalive prevents silent session drops
- No telemetry; no outbound connections beyond what you explicitly initiate
- Tauri CSP configured in
src-tauri/capabilities/default.json
- Command palette (Ctrl+K)
- Activity log
- Keyboard shortcuts for all major actions
- Bookmarks for local and remote paths
| Tool | Required version |
|---|---|
| Rust | stable ≥ 1.77 |
| Node.js | ≥ 20 LTS |
| pnpm | ≥ 9 |
Linux — install WebKit2GTK and related system libraries:
# Debian / Ubuntu
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
# Fedora / RHEL
sudo dnf install webkit2gtk4.1-devel libappindicator-gtk3-devel librsvg2-develmacOS — Xcode Command Line Tools:
xcode-select --installpnpm install
pnpm tauri devFrontend only (no Rust compilation, faster iteration):
pnpm devVerbose Rust logging:
RUST_LOG=debug pnpm tauri devpnpm install
pnpm tauri buildArtifacts are placed in src-tauri/target/release/bundle/.
| Shortcut | Action |
|---|---|
| Ctrl+K | Command palette |
| Ctrl+N | New connection |
| Ctrl+T | Toggle transfer drawer |
| Ctrl+D | Disconnect active session |
| Shortcut | Action |
|---|---|
| F5 | Refresh pane |
| Ctrl+A | Select all |
| Ctrl+L | Edit path bar |
| Enter | Open folder / download file |
| Backspace | Navigate up |
| Shortcut | Action |
|---|---|
| Ctrl+Shift+T | New terminal tab |
| Ctrl+Shift+C | Copy selection |
| Ctrl+Shift+V | Paste |
Frontend: React 18, TypeScript 5, Vite 5, Tailwind CSS 3, Zustand, Framer Motion, xterm.js 5, Lucide React, react-resizable-panels
Backend (Rust): tauri 2, ssh2, tokio, aes-gcm, argon2, notify, image, kamadak-exif, lopdf, sha2, ignore, rayon, flume, serde, anyhow, tracing
| Platform | Path |
|---|---|
| Linux | ~/.config/pylon/vault-default.json |
| macOS | ~/Library/Application Support/pylon/vault-default.json |
| Windows | %APPDATA%\pylon\vault-default.json |
If you forget your master password there is no recovery mechanism. The vault cannot be decrypted without the correct passphrase.
Pylon is not yet notarized by Apple. On first launch, right-click the .app and choose Open, then confirm in the security dialog.
GNU General Public License v3.0. See LICENSE.





