Deploy git-changed files to remote servers — directly from VSCode's Explorer panel and Source Control panel. If you came from PhpStorm and miss its deployment workflow, FileFerry gives you exactly that experience: right-click changed files in the SCM panel, press Features
Quick Start
Or press Settings UIDeployment Settings (
|
| Local Path | Remote Path | Result |
|---|---|---|
/ |
html |
src/app.php → /var/www/html/src/app.php |
/public |
public_html |
public/index.php → /var/www/public_html/index.php |
More specific paths (longer prefix) take priority. If no mappings are configured, all files map directly to the server root. Excluded Paths accepts comma-separated glob patterns — e.g. node_modules, *.log, .env.
SSH Credentials (Ctrl+Shift+P → FileFerry: Manage SSH Credentials)
| Auth Method | Extra Fields | Secret Storage |
|---|---|---|
| Password | — | Password → OS keychain |
| Private Key | Key file path | Passphrase (if any) → OS keychain |
| SSH Agent | — | Uses ssh-agent / Pageant — no storage |
Passwords are never written to disk. Leave the password field blank when editing a credential to keep the existing stored value.
Project Binding
Each project stores its server selection and path mappings in .vscode/fileferry.json. This file contains no secrets — it only stores server IDs, path mappings, and exclusion patterns.
{
"defaultServerId": "a1b2c3d4-...",
"servers": {
"a1b2c3d4-...": {
"mappings": [
{ "localPath": "/", "remotePath": "html" }
],
"excludedPaths": ["node_modules", "*.log", ".env"]
}
}
}
It is safe to commit .vscode/fileferry.json to git. SSH credentials are global and stored separately.
Keyboard Shortcuts
| Key | Action | When |
|---|---|---|
Alt+U |
Upload selected files | Source Control panel focused |
Alt+P |
Compare with Remote | Source Control panel focused |
Configurable via Preferences → Keyboard Shortcuts → search fileferry.
Commands
| Command | Description |
|---|---|
FileFerry: Upload |
Upload selected files (SCM panel or Explorer right-click) |
FileFerry: Compare with Remote |
Diff local file against the server version |
FileFerry: Deployment Settings |
Open server and mapping configuration |
FileFerry: Manage SSH Credentials |
Add, edit, or delete SSH credentials |
FileFerry: Switch Server |
Change the default server for this project |
FileFerry: Reset Upload Confirmations |
Re-enable upload prompts suppressed by "don't ask again" |
Deploying Deleted Files
When you delete a file it appears in the Source Control panel as deleted. Select it and press Alt+U (or right-click → FileFerry: Upload). FileFerry will:
- Detect that the file no longer exists on disk
- Show a confirmation listing what will be uploaded and what will be deleted — always shown for deletions, regardless of "don't ask again"
- Remove the file from the remote server after confirmation
Troubleshooting
"No project binding found" Open Deployment Settings, configure a server and path mappings for this project.
"Default server not found"
The server saved in .vscode/fileferry.json no longer exists. Open Deployment Settings and save the server configuration again.
"Authentication failed" Your saved credential may be stale. Open SSH Credentials Manager, edit the credential, and re-enter the password.
"No such file" on upload FileFerry creates missing remote directories automatically. If this still fails, check that your username has write permission on the remote path.
Upload or compare goes to the wrong path Check the path mappings in Deployment Settings. The most specific (longest) matching local path wins. If no mappings are set, all files map directly to the server root.
SSH key not working
Key file permissions must be 600: chmod 600 ~/.ssh/id_rsa. SSH rejects keys with loose permissions. FileFerry will warn you when saving a key credential with wrong permissions.
Security
- All secrets (passwords, passphrases) stored in the OS native keychain — never on disk
.vscode/fileferry.jsoncontains no secrets and is safe to commit- Webview panels receive credential lists without secret fields — passwords only travel to the extension on explicit Save/Test actions
- Private key file permission check warns when key is world-readable (
644instead of600)
Requirements
- VSCode 1.85 or later
- An SFTP-capable remote server
- For private key auth: an SSH key pair (
ssh-keygen) - For agent auth:
ssh-agentrunning with your key added (ssh-add)
License
GPL-3.0-or-later — see LICENSE
