A tiny menu bar app that uploads files to your own servers over SFTP, FTP, or S3 — instantly. No clouds, no accounts, no upload buttons. Your servers, your keys, your files.
No cloud accounts, no abstractions. Throwit uses your existing SSH keys, your hostnames, and your file paths.
Click your paperplane icon. Drop. Done. No window juggling.
⌘N opens a desktop window with host sidebar, local files, and remote files. Drag between panes.
Green / red dot updates every 30 seconds. Latency in milliseconds. Know before you drag.
Right-click any remote file: Quick Look (preview in place) or Download to ~/Downloads. Streamed in 256KB chunks.
~/.throw/settings.json watches itself. Edit with vim, commit to dotfiles, hot-reload.
No analytics, no auto-update beacon, no accounts. Pure SwiftUI, native, sandboxed.
SCP for the speed-of-CLI crowd. SFTP for App Store users. FTPS for the legacy NAS in the corner. S3 — including MinIO, R2, B2 — for everything cloud.
/usr/bin/scp subprocess. Fastest for LAN. Direct-distribution build only.
Pure-Swift via Citadel + swift-nio-ssh. Sandbox-compatible. Same SSH server as SCP.
App StoreNetwork.framework RFC 959. Implicit TLS on port 990 for FTPS.
AWS SigV4 manual signing. Virtual-hosted (AWS) and path-style (MinIO, R2, B2, Wasabi).
Throwit stays out of your way: no cloud accounts, no shortlink generation, no built-in file browser bloat. Settings live in a single JSON file you can git-commit. Targets the developer/homelab use case — LAN servers and mac minis — instead of being a generalist SFTP client.
No remote anything. Keys stay on disk. Passwords are stored only in ~/.throw/settings.json in plain text (App Store builds use the macOS sandbox container). For passwordless use, point Throwit at your existing ~/.ssh/id_ed25519.
The macOS app sandbox forbids spawning /usr/bin/scp. Direct downloads keep SCP. App Store builds use SFTP via Citadel — same SSH server, same auth, slightly different protocol on the wire.
Not yet — passphrase-protected keys require an additional decrypt step. Either use an unencrypted Ed25519 key (modern recommendation), or wait for v0.5. Encrypted keys: ssh-keygen -p -f ~/.ssh/id_ed25519 removes the passphrase if you want it now.
Yes — edit ~/.throw/settings.json directly. The app watches the file with DispatchSourceFileSystemObject and reloads on change. Vim, Emacs, or your dotfiles repo are first-class clients.
Yes. Settings → Launch at login. Memory footprint stays under 50 MB idle. Network probes hit each host every 30 seconds.