Rsync Upload
A VS Code extension that replaces the painfully slow built-in SSH file upload with rsync — fast, compressed, and resumable.
Client-side only. This extension runs entirely on your local Mac. Nothing needs to be installed on the remote server — it just needs rsync and sshd, which are available on virtually all Linux/Unix servers by default.
| Client (local) |
Server (remote) |
| macOS (officially supported) |
Any Linux/Unix with rsync + SSH |
Windows and Linux client support is not yet available. The extension uses native macOS file picker dialogs (AppleScript).
Features
- Fast uploads via rsync — compression (
-z), delta transfers, and parallel I/O blow away VS Code's built-in copy
- Resume interrupted transfers —
--partial flag preserves partial files; re-uploading picks up where it left off
- Auto-detect SSH connection — reads your
~/.ssh/config and VS Code Remote SSH session to configure host, port, user, and key automatically
- Progress bar — real-time notification showing file name, percentage, total size, speed, and ETA
- Upload on save — optionally auto-upload files whenever you save
- Stop transfer — cancel mid-transfer and keep partial files for resume, or stop and delete remote files
- Right-click to upload — upload from Explorer context menu, editor context menu, or editor title bar
- Keyboard shortcut —
Cmd+Shift+U to upload instantly
Installation
Download the .vsix from Releases and install:
code --install-extension rsync-upload-0.8.0.vsix
Or install from within VS Code: Cmd+Shift+P > Extensions: Install from VSIX...
Quick Start
- Connect to a remote server via VS Code Remote SSH
- The extension auto-detects your SSH host, port, and remote path from
~/.ssh/config
- Press
Cmd+Shift+U or right-click in the Explorer > Upload via Rsync...
- Choose Files or Folder in the quick pick
- Select local files/folder in the native Finder dialog
- Watch the progress bar as rsync transfers your files
Commands
| Command |
Shortcut |
Description |
| Upload via Rsync... |
Cmd+Shift+U |
Pick local files or folder to upload |
| Upload Workspace via Rsync |
— |
Upload the entire workspace |
| Toggle Upload on Save |
— |
Enable/disable auto-upload on file save |
| Stop Transfer (Keep Partial) |
Cmd+Shift+Escape |
Cancel transfer, keep partial for resume |
| Stop Transfer & Delete Remote Files |
— |
Cancel and remove uploaded files from server |
| Show Rsync Log |
— |
Open the output log for debugging |
Settings
Search rsyncUpload in VS Code Settings, or add to settings.json:
| Setting |
Default |
Description |
rsyncUpload.autoDetect |
true |
Auto-detect host/port/path from Remote SSH. Disable for manual config only. |
rsyncUpload.remoteHost |
"" |
SSH host, e.g. user@hostname (auto-detected if empty) |
rsyncUpload.remotePath |
"" |
Remote absolute path (auto-detected if empty) |
rsyncUpload.sshPort |
22 |
SSH port (auto-detected from ~/.ssh/config) |
rsyncUpload.sshKeyPath |
"" |
Path to SSH private key (falls back to ~/.ssh/id_rsa) |
rsyncUpload.flags |
"-avz --partial --progress" |
Rsync flags |
rsyncUpload.exclude |
[".git", "node_modules", ...] |
Exclude patterns for rsync |
rsyncUpload.include |
[] |
Include patterns for rsync |
rsyncUpload.uploadOnSave |
false |
Auto-upload on file save |
rsyncUpload.uploadOnSaveDelay |
500 |
Debounce delay (ms) for upload on save |
rsyncUpload.delete |
false |
Use --delete to remove remote files not present locally |
rsyncUpload.dryRun |
false |
Preview transfers without uploading |
rsyncUpload.rsyncPath |
"rsync" |
Path to rsync binary |
How It Works
The extension runs locally on your Mac (extensionKind: ["ui"]). When you trigger an upload:
- It detects your Remote SSH connection from VS Code's workspace URI
- Resolves host, port, user, and identity file from
~/.ssh/config
- Opens a native macOS Finder dialog for you to pick local files
- Spawns
rsync -avz --partial --progress -e "ssh -p PORT -i KEY" <source> <user@host:path>
- Parses rsync's stdout in real-time to drive the progress bar
Since rsync uses --partial, interrupted transfers leave partial files on the server. Re-running the upload automatically resumes from where it left off.
Requirements
- macOS (client side)
- rsync — pre-installed on macOS (
openrsync)
- SSH key authentication configured in
~/.ssh/config
- VS Code Remote SSH extension (for auto-detection; or configure manually)
License
MIT