Sync files between a local folder and a remote server over SFTP (SSH) or FTP/FTPS, right from VS Code. Edit locally in a familiar environment and mirror your changes to a web server, staging box, or embedded device — on every save, on demand, or continuously. The most basic setup is a few lines of config; a wide range of options covers multi-server, profile, and bastion-hop workflows.
- Website: https://jmwerk.github.io/SFTPresso/
- Install: VS Code Marketplace · Open VSX — see Installation
- Docs: project wiki
- Repository: https://github.com/jmwerk/SFTPresso
Actively maintained by @jmwerk. Forked from Natizyskunk's vscode-sftp, which continued liximomo's original SFTP plugin after it went unmaintained. Issues and pull requests welcome.
Maintenance status: As of 2026 this fork is where fixes and updates land. Recent work includes a migration to the
basic-ftpclient, secure password storage, a Transfers view with per-file progress, guided config setup, and a modernized esbuild/TypeScript 5 toolchain — see the CHANGELOG for the full list.
- Browse remote files in the Remote Explorer, with multi-select download/upload
- Filter the Remote Explorer (
SFTP: Filter Remote Explorer/SFTP: Clear Filter) — live substring search across the whole remote tree, including collapsed folders you haven't opened yet. (VS Code's ownworkbench.list.keyboardNavigation: filtersetting is a handy complement for searching within a folder you've already expanded.) - Diff a local file against its remote copy, or Compare Folders for a recursive diff
- Sync in either or both directions, with an optional dry-run preview (
syncConfirm) - Upload/Download files, folders, or the whole project — optionally to all profiles at once
- Upload on save — with a one-click
SFTP: Toggle Upload on Savecommand and a status-bar indicator — and a file watcher for changes made outside the editor - Server-side rename and move — a single remote
rename()call regardless of size, from the Remote Explorer context menu, by dragging within the Remote Explorer (remoteExplorer.enableDragAndDrop), or automatically viawatcher.autoRename, instead of a full re-upload - Add to Ignore from the file-explorer right-click menu — appends a file or folder to
ignorewithout hand-editingsftp.json - Conflict check (
conflictCheck) to catch uploads that would overwrite a remote changed by someone else - Transfers view with byte-level per-file progress, live speed/ETA, cancellation, and retry — cancelling stops the directory scan too, not just the queued files
- Test Connection from a command or a CodeLens on
sftp.json, plus a connection-status indicator in the status bar - Secure password storage backed by the OS keychain (
SFTP: Save Password/Clear Password), plus one-clickSFTP: Migrate Plaintext Passwordto move a password out ofsftp.json - SSH host key verification (
strictHostKeyChecking) — reads your own~/.ssh/known_hostsso trusted hosts never prompt, and refuses to connect if a server's key ever changes SFTP: Run Remote Command— run a shell command on the server over the existing SSH connection, no re-authentication; save common ones (remoteCommands) as a quick pick- Multiple configurations, switchable profiles, SSH connection hopping, and temp-file/atomic uploads
- Legacy-extension conflict detection — warns on startup if an older
sftpextension from@liximomoor@Natizyskunkis also enabled, since both claim the samesftp.*commands
See the command reference for the full list.
As of v1.20.2, each tagged release is published automatically to both the VS Code Marketplace and Open VSX, so you can install from within your editor and get updates automatically.
- Open the Extensions view (
Ctrl+Shift+X/Cmd+Shift+X). - Search for SFTPresso and install it — or run
ext install jmwerk.sftpressofrom the Command Palette. - If you still have an older
sftpextension installed (from@liximomoor@Natizyskunk), SFTPresso detects it on startup and prompts you to disable it — both register commands under the samesftp.*namespace, so only one can run at a time.
Listings: VS Code Marketplace (VS Code, VSCodium, and other VS Code–based editors) · Open VSX (VSCodium, Gitpod, Eclipse Theia, …).
Prefer to sideload a specific build? Grab a .vsix from Releases (or build one with npm run package), then open the ⋯ (More Actions) menu at the top of the Extensions view, choose Install from VSIX…, select the file, and reload VS Code.
Prefer a guided tour? Run
Welcome: Open Walkthrough…from the Command Palette and pick Get started with SFTPresso for a native, checklist-style walkthrough of the steps below.
-
Open the local folder you want to sync (
File → Open Folder…). -
Open the Command Palette (
Ctrl+Shift+P/Cmd+Shift+P) and runSFTP: Config. -
When no
sftp.jsonexists yet, choose how to create it:- Quick setup — a guided wizard prompts for protocol, host, port, username, authentication, and remote path, then writes
sftp.jsonand runsSFTP: Test Connectionto confirm it works. - Edit JSON — a starter
sftp.jsonopens under.vscode/; fill in your server details.
A minimal config:
passwordis optional — leave it out to be prompted on connect (with an offer to remember it in the OS keychain).sftp.jsonis read as JSONC, so comments and trailing commas are allowed. - Quick setup — a guided wizard prompts for protocol, host, port, username, authentication, and remote path, then writes
-
To pull an existing remote project into an empty folder, run
SFTP: Download Project. -
Edit locally — with
uploadOnSaveon, every save syncs to the remote.
Full setup, all configuration options, usage examples, troubleshooting, and FAQ live in the project wiki:
- Installation and setup
- Command reference
- Configuration reference (
sftp.json) - Usage examples and common workflows
- Troubleshooting and known issues
- FAQ
Development requires Node 22+ (see .nvmrc). See CONTRIBUTING.md for the build, test, and pull-request workflow.
This project builds on the work of @Natizyskunk and @liximomo. If their earlier work helped you, their original donation links are in the upstream README.



{ "host": "server.example.com", "protocol": "sftp", "username": "user1", "remotePath": "/var/www/project", "uploadOnSave": false }