🚀 SFTP NeoSync your code to any server without leaving VS Code. 🔒 More Secure · 📦 Updated Libraries · ⭐ More Features
🎉 What's New in v3.3.0 — Keepalive, Reconnect & Watcher Ignore🔌 Stay ConnectedA new 🔄 Reconnect on Idle TimeoutIf the server closes an idle connection, the extension now detects the dead connection and reconnects automatically. Transfer retries have also been increased to 3 for connection-related errors. 👁️ Watcher Respects Ignore RulesThe file watcher now drops 🎉 Previous Releasesv3.2.0 — Remote Explorer Filter🔍 Find Remote Files InstantlyQuickly filter the Remote Explorer sidebar as you type. No more scrolling through hundreds of remote files — just click the filter icon, start typing, and only matching files and folders stay visible.
v3.1.0 — Local or Remote File Backups🛡️ Never Lose a File AgainAutomatic versioned backups on every upload & sync. Before any remote file is overwritten, SFTP Neo saves a timestamped copy — either on the server or in your local workspace. Browse, restore, or delete old versions directly from VS Code.
v3.0.5🔕 "Don't Show Again" for Plaintext Password WarningIf you choose to keep a password in 🖥️ Workspace-Scoped SSH Host KeysMultiple projects connecting to the same development server (same IP and port) — common with containers or multi-tenant setups — no longer trigger false "SSH host key has CHANGED" errors. Host keys are now stored per workspace, and existing v3.0 — Remote File BackupsIntroduced automatic versioned backups before every upload/sync, with a dedicated panel to browse, restore, and delete backup versions. 📑 Quick Links✨ Features · ⚡ Quick Start · 🔧 Config Examples · 🔐 Security · 🔑 SSH Authentication · 🐛 Debug · ❓ FAQ ✨ Features
⚡ Quick Start1. InstallGrab it from the VS Code Marketplace or install the 2. ConfigureOpen the SFTP sidebar from the activity bar. If no config exists yet, click "Create SFTP Config" in the welcome view. You can also open the Command Palette (
A
3. Go!
Right-click any file or folder in the Explorer for quick upload / download / diff options. 🔧 Config Examples🎭 ProfilesSwitch between environments on the fly:
Use 📂 Multiple ContextsSync different parts of your project to different places:
🔗 Connection HoppingReach a server through a bastion host:
🔐 SecuritySFTP Neo stores passwords & passphrases in your OS credential store (macOS Keychain, Windows Credential Manager, Linux libsecret) via VS Code's Secret Storage API — so your How to use it:
The same works for private key
🔑 SSH AuthenticationSFTP Neo supports three ways to authenticate SFTP connections. For both security and convenience, SSH keys or ssh-agent are recommended over plaintext passwords.
SSH private key (
|
| Platform | Tip |
|---|---|
| macOS | ssh-add --apple-use-keychain ~/.ssh/id_ed25519 persists the unlocked key across reboots. |
| Linux | ssh-agent exits when the shell closes. Use your distro’s user service or add the eval/ssh-add commands to your shell profile to keep it available. |
| Windows | For WSL, use the Linux instructions inside WSL. For native Windows, the OpenSSH agent pipe or Pageant are the usual choices. |
A note on Open SSH in Terminal
The sidebar command builds a plain terminal command:
ssh -t user@host -p 22 -i "/path/to/key"
It can automatically use:
- your
privateKeyPath(-i ...) - your ssh-agent (no extra flags)
It cannot auto-type a password or passphrase into the terminal. If you want a fully password-less terminal experience, use an ssh-agent.
🖥️ Remote Explorer
Browse your remote server directly in the VS Code sidebar.

Open it via:
- Command Palette →
View: Show SFTP - Or click the SFTP icon in the Activity Bar
Select multiple files with Ctrl/Shift to download or upload in batches.
🛡️ File Backups
Protect your production files. Every upload is reversible.
Before any remote file is overwritten by an upload or sync-to-remote operation, SFTP Neo automatically creates a timestamped backup copy. Choose to keep backups on the remote server or in your local workspace. Browse, restore, or delete backup versions without leaving VS Code.
🚀 How It Works
Remote backups ("location": "remote", default)
Before Upload After Upload
───────────────── ─────────────────
remote/index.php remote/index.php ← new content
remote/.vsftp-backup/
└─ index.php.20260612194215007.bak ← old content
Local backups ("location": "local")
Before Upload After Upload
───────────────── ─────────────────
remote/index.php remote/index.php ← new content
workspace/.vsftp-backup/
└─ index.php.20260612194215007.bak ← old content
The remote directory layout is preserved inside the backup folder so you can mirror the server structure locally.
⚙️ Configuration
Add the backup object to your .vscode/sftp.json:
{
"name": "Production",
"host": "example.com",
"protocol": "sftp",
"port": 22,
"username": "root",
"remotePath": "/var/www/html",
"uploadOnSave": true,
"backup": {
"enabled": true,
"location": "remote",
"folder": ".vsftp-backup",
"versions": 5
}
}
| Option | Type | Default | Description |
|---|---|---|---|
backup.enabled |
boolean |
false |
Master switch. Set to true to enable backups. |
backup.location |
string |
"remote" |
Where backups are stored. "remote" keeps them on the server under remotePath; "local" keeps them in your workspace root. |
backup.folder |
string |
".vscode/sftp-backup" |
Folder where backups are stored. Resolved relative to remotePath when location is "remote", or relative to the workspace root when location is "local". |
backup.versions |
number |
5 |
Maximum number of backup versions to keep per file. Set to 0 to disable backups even when enabled is true. |
💡 Tip: The backup folder is automatically excluded from sync operations and the Remote Explorer — you never have to worry about backups being uploaded or cluttering your file tree.
📂 Using the Backups Panel
- Enable backups in your
sftp.json(see configuration above). - Upload or sync a file — a backup is created automatically before the overwrite.
- Click any file in the Remote Explorer panel.
- The Backups panel (titled Remote Backups or Local Backups based on your setting) updates to show all backup versions for that file, sorted newest → oldest.
| Action | How |
|---|---|
| 🔄 Restore | Right-click a backup version → Restore Backup. The current live file is backed up first, then replaced. |
| 🗑️ Delete | Right-click a backup version → Delete Backup. |
| 👁️ Preview | Click any backup version to open it in a read-only preview without downloading. |
🔒 Safety Guarantees
- Upload never blocked: If a backup fails for any reason, the upload still proceeds. Your code always goes live.
- Auto-pruning: Old backups beyond your
versionslimit are cleaned up automatically after each upload. - No sync loops: The backup folder is invisible to sync, so local backups are never auto-uploaded and remote backups are never downloaded.
- Context-aware: The panel only shows backups for the file you have selected in Remote Explorer.
🐛 Debug
Need to troubleshoot?
- Open Settings (
Ctrl+,/Cmd+,). - Search for
sftp.debugand set it totrue. - Reload VS Code.
- View logs in Output → SFTP.
❓ FAQ
See FAQ.md for common questions and solutions.
Made with ☕ & 🐛 squashing by Philip Daoud
