Fsync — Remote Sync Extension (SFTP & Rsync)
简体中文 | English
Introduction
Fsync is a remote file sync extension for individual developers, built on SFTP and Rsync. It keeps local and remote files in sync with save-triggered uploads, one-click full sync, a remote file explorer, and multi-server profile switching.
Features
- Save-Upload: Automatically uploads the saved file to the remote server via SFTP.
- Rsync Full Sync: One-click full rsync sync with automatic SFTP fallback.
- Remote Explorer: Browse, create, rename, and delete remote files.
- Multi-Profile: Switch between dev, staging, prod and other server profiles.
- File Watch: Watches local file changes and syncs automatically.
- Status Bar: Connection state and sync progress shown in the status bar.
Usage
Getting Started
- Run
Fsync: Init Config to generate .vscode/fsync.json in the workspace.
- Fill in your server profile (see Configuration below).
- Click the status bar or run
Fsync: Connect to connect.
Manual Upload
Fsync: Upload File: Uploads the active editor file; also available from the Explorer context menu.
Fsync: Upload Folder: Right-click a folder in the Explorer to upload it to remoteRoot/<relative path>; from the command palette it uploads the whole localRoot.
- In the Remote Explorer, right-click a remote directory and pick Upload to here... to upload local files into it.
Other Commands
Fsync: Download File, Fsync: Sync All, Fsync: Watch, Fsync: Switch Profile, Fsync: Show Output, etc.
Configuration
Project Config File
The workspace config file is .vscode/fsync.json (path configurable via fsync.configPath). See docs/modules/config.md for the full schema. Core structure:
{
"activeProfile": "dev",
"localRoot": ".",
"profiles": {
"dev": {
"host": "your-server.com",
"port": 22,
"username": "root",
"privateKeyPath": "${HOME}/.ssh/id_rsa",
"remoteRoot": "/var/www/project",
"syncMode": "auto",
"uploadOnSave": true,
"watch": false,
"ignore": ["node_modules", "dist", ".git"],
"rsync": { "args": ["-avz"] }
}
}
}
Key points:
- Values support
${VAR} environment variable references, e.g. ${SSH_PASSWORD}.
- Plaintext
password triggers a warning; prefer SSH key auth or environment variables.
- If the config contains credentials, add it to
.gitignore.
VSCode Settings
| Setting |
Default |
Description |
fsync.configPath |
.vscode/fsync.json |
Config file path relative to the workspace root |
fsync.defaultSyncMode |
auto |
Fallback sync mode when a profile omits syncMode (sftp / rsync / auto) |
fsync.confirmDelete |
true |
Confirm before deleting remote files |
fsync.showProgress |
true |
Show transfer progress |
fsync.logLevel |
info |
Log level for the Output panel (debug / info / warn / error) |
Output Panel
All operations log to the Fsync output panel (View → Output → Fsync): connection events, transfer progress, rsync commands and statistics. Actively triggered transfers reveal the panel; save-triggered uploads do not. Use Fsync: Show Output to open it anytime.
Acknowledgments
This extension is inspired by and built upon the following projects: