Overview Version History Q & A Rating & Review
rfsx — Remote File System eXtensions
A lightweight VS Code extension that exposes remote servers as a virtual filesystem using the FileSystemProvider API.
Open and edit remote files directly in VS Code without downloading them to disk .
Quick Start
Remote Window (Recommended)
Open the Remote Window (bottom-left corner of VS Code)
Select "Connect to FTP/FTPS/FTPeS/SFTP…"
Enter host → username → password
The remote filesystem opens as a workspace
Files are streamed directly from the server. No implicit local copies are created.
Supported Protocols
URI Scheme
Protocol
Encryption
Status
Notes
ftp://
FTP
None
Stable
Full feature set
ftps://
FTPS
TLS
Stable
Full feature set
ftpes://
FTPES
Explicit TLS
Stable
Full feature set
sftp://
SFTP
SSH
Experimental (works, but incomplete)
Password auth only (no SSH key support yet)
Example URIs
ftp://example.com/
ftps://example.com/
ftpes://example.com/
sftp://user@example.com/
FTP is plaintext. Use FTPS or SFTP for secure connections.
Commands
Command
Description
rfsx.connectToFtp
Interactive FTP connect
rfsx.connectToFtps
Interactive FTPS connect
rfsx.connectToFtpes
Interactive FTPES connect
rfsx.connectToSftp
Interactive SFTP connect
rfsx.manageCredentials
List / test / remove saved credentials
Features
Virtual filesystem (no auto-downloads)
Secure credential storage via VS Code SecretStorage
Interactive QuickPick connect flow
Anonymous & username-only login where server allows (FTP/FTPS)
SFTP password authentication
Atomic uploads (temp file → rename)
Credential manager (list / test / delete)
Works as workspace folders (ftp://, sftp:// URIs)
Security
Credentials stored in VS Code SecretStorage (platform-encrypted)
Password saving is opt-in
No plaintext config files
Connect Flow
Try stored credentials from SecretStorage
Try username-only / empty password (if server allows)
Prompt for password
Optionally save credentials
Mount remote root as workspace folder
Implementation Notes
FTP/FTPS/FTPeS provider: src/ftp/ using basic-ftp
SFTP provider: src/sftp/ using ssh2-sftp-client
Uploads: temp filename + atomic rename when supported
Streaming: files streamed to editor; avoid full memory buffering
Concurrency: per-connection queue to avoid race conditions
Errors: mapped to vscode.FileSystemError
Limitations & Non-Goals
No directory sync or mirroring
No deployment automation
No background sync/watch
No WebDAV support (by design)
Large files may be streamed in chunks depending on provider behavior
Contributing
Fork the repo
npm install
npm run compile
Add tests where possible
Submit a PR with clear description
Open issues for bugs, UX feedback, or feature requests.
Troubleshooting
Verify host, port, protocol (FTPS vs FTPES)
Clear stale credentials via rfsx.manageCredentials
If you see "(control socket)" errors, retry. This is usually a server-side issue.
License
MIT License © 2025 Mubarrat