FTPS Upload/Download
Upload and download files from VSCode directly to FTPS servers (FTP over TLS), with multi-server support and runtime server selection.
Built to fill a gap: extensions like vscode-sftp use ssh2-sftp-client, which does not support TLS over FTP — the protocol used by many enterprise and government servers.
Features
- Upload / Download — single file, from the editor or the Explorer context menu
- Multi-server — define as many servers as you need (dev, homologa, prod…)
- Server Quick Pick — choose the target server at runtime; last choice is remembered
- Automatic path mapping — preserves your local folder structure on the remote server
- Implicit and explicit TLS — both modes supported via
basic-ftp
- Self-signed certificates — per-server
rejectUnauthorized flag
- Auto mkdir — creates remote subdirectories automatically if they don't exist
- Diff — compare local file with remote version before uploading
Getting Started
1. Open a workspace in VSCode.
2. Run FTPS: Open Config from the Command Palette (Ctrl+Shift+P). This creates .vscode/ftps.json with a template.
3. Fill in your server details:
{
"localRoot": "${workspaceFolder}",
"servers": {
"dev": {
"host": "dev.example.com",
"port": 21,
"user": "username",
"password": "secret",
"remotePath": "/public_html",
"secure": "explicit",
"rejectUnauthorized": true
},
"homologa": {
"host": "homologa.example.com",
"port": 990,
"user": "username",
"remotePath": "/public_html",
"secure": "implicit",
"rejectUnauthorized": false
}
},
"defaultServer": "dev"
}
Tip: add .vscode/ftps.json to your .gitignore if it contains passwords.
4. Open a file and press Ctrl+Alt+U to upload. Done.
Configuration
Server fields
| Field |
Type |
Default |
Description |
host |
string |
— |
Server address |
port |
number |
21 (explicit) / 990 (implicit) |
FTP port |
user |
string |
— |
Username |
password |
string |
— |
Password (optional — prompted if omitted) |
remotePath |
string |
"/" |
Root path on the server |
secure |
"explicit" | "implicit" | false |
"explicit" |
TLS mode |
rejectUnauthorized |
boolean |
true |
Set to false for self-signed certificates |
connectTimeout |
number |
30000 |
Connection handshake timeout (ms) |
idleTimeout |
number |
60000 |
Inactivity timeout before closing the connection (ms) |
Global fields
| Field |
Type |
Default |
Description |
localRoot |
string |
${workspaceFolder} |
Local root folder mapped to each server's remotePath |
defaultServer |
string |
first server |
Pre-selected server in Quick Pick |
ignore |
string[] |
[] |
Glob patterns to ignore (used in folder upload — v0.2) |
Commands
| Command |
Keybinding |
Description |
FTPS: Upload File |
Ctrl+Alt+U |
Upload the active or selected file |
FTPS: Download File |
Ctrl+Alt+D |
Download the remote counterpart of the active or selected file |
FTPS: Diff File |
Ctrl+Alt+I |
Compare local file with the remote version (no upload) |
FTPS: Open Config |
— |
Create or open .vscode/ftps.json |
FTPS: Set Active Server |
— |
Change the active server without uploading |
Commands are also available in the Explorer and editor context menus.
Path Mapping
The remote path is derived from the file's position relative to localRoot:
localRoot: /home/user/project/wwwroot
remotePath: /public_html
file: /home/user/project/wwwroot/src/app/index.php
→ uploads to: /public_html/src/app/index.php
Remote subdirectories are created automatically if they don't exist.
Requirements
- VSCode
^1.85.0
- Network access to your FTPS server