Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>EditSyncNew to Visual Studio Code? Get it now.
EditSync

EditSync

Drangon-Knight

|
3 installs
| (0) | Free
Safe, backup-first remote server sync. Never overwrites without backup.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

EditSync

Safe, backup-first remote server sync for VS Code and CLI.

Stop worrying about accidental overwrites. EditSync is the only remote sync tool that automatically backs up server files before every upload, detects conflicts in real-time, and uses a recoverable trash system instead of permanent deletion.


Why EditSync?

Other remote sync tools silently overwrite server files, delete without undo, and ignore conflicts. One wrong save can destroy hours of work on a production server.

EditSync was built on a single principle: the server file must never be lost.

Other sync tools EditSync
Upload overwrites server Silently, no backup Auto-backup before every upload
Someone else edited the file Overwrites their changes Conflict detection + diff comparison
Accidentally deleted a file Gone forever Trash system — recoverable for 7 days
"Sync All" button Can nuke entire server No bulk overwrite — file-by-file only
Upload interrupted Broken file on server Atomic write — temp file, then rename
Connection dropped mid-work Uploads lost silently Auto-retry queue — 3 retries with backoff
Server install required Yes (agent/daemon) Zero install — pure SFTP/SSH
Offline work Impossible Full local copy — work offline anytime
Connection methods SFTP only SFTP, Docker, K8s, AWS SSM
Team collaboration No protection File locking — prevent simultaneous edits

Feature Comparison: Free vs Pro vs Team

Feature Free Pro Team
Upload on save O O O
Remote file explorer O O O
Auto-reconnect O O O
File create/copy detection O O O
Sync on open (auto-fetch latest) O O O
Parallel download (10 concurrent) O O O
Atomic write (safe transfer) O O O
Auto-retry (3 retries on failure) O O O
External file change detection O O O
Server connections 1 Unlimited Unlimited
Auto backup before upload — O O
Backup on sync (local file backup) — O O
Conflict detection + diff view — O O
Trash recovery (7-day retention) — O O
Server file deletion — O O
Backup history viewer — O O
Server diff comparison — O O
Change export (markdown/JSON/CSV) — O O
SSH Config auto-import — O O
Jump Host / Multi-hop SSH — O O
Docker container access — O O
Kubernetes Pod access — O O
AWS SSM Session Manager — O O
Multiple server profiles — O O
Upload hooks (before/after) — O O
CLI tool (editsync watch) — O O
Team file locking — — O
Shared team configuration — — O

Get Pro / Team

14-day free trial included. No credit card required.


Quick Start

1. Install

Search "EditSync" in VS Code Extensions sidebar, or:

ext install Drangon-Knight.editsync-vscode

2. Create Config

Open Command Palette (Ctrl+Shift+P / Cmd+Shift+P):

EditSync: Create Config File

If you have ~/.ssh/config, EditSync will show your saved hosts for one-click setup.

3. Edit Config

Fill in your server details (password):

{
  "name": "my-server",
  "connection": {
    "type": "sftp",
    "host": "your-server-ip",
    "port": 22,
    "username": "root",
    "auth": {
      "method": "password",
      "password": "your-password"
    }
  },
  "remotePath": "/var/www/html",
  "uploadOnSave": true
}

Or with private key:

{
  "name": "my-server",
  "connection": {
    "type": "sftp",
    "host": "your-server-ip",
    "port": 22,
    "username": "root",
    "auth": {
      "method": "privateKey",
      "privateKeyPath": "~/.ssh/id_rsa"
    }
  },
  "remotePath": "/var/www/html",
  "uploadOnSave": true
}

4. Connect

Click the status bar item at the bottom, or:

EditSync: Connect to Server

5. Download Server Files

After connecting, you'll be prompted:

  • Download All — download all files from server
  • Browse in Explorer — browse and download specific folders
  • Skip — start working with local files only

6. Start Working

Now just save files normally. EditSync automatically:

  1. Backs up the server version (Pro)
  2. Checks for conflicts (Pro)
  3. Uploads your saved file to the server

Images, fonts, and other binary files are auto-uploaded when you copy them into the project.


Status Bar

The status bar at the bottom shows real-time sync status:

Icon Meaning Click action
$(cloud-offline) Disconnected Not connected Connect
$(sync~spin) Connecting... Connecting to server —
$(cloud) Connected Ready Disconnect
$(sync~spin) Syncing... Uploading/downloading —
$(warning) Conflict Server file changed Disconnect

During downloads, the status bar shows real-time progress:

↓ 35% (7/20) src/index.js

Configuration Reference

Full .vscode/editsync.json schema

{
  "name": "my-server",
  "connection": {
    "type": "sftp",
    "host": "192.168.0.100",
    "port": 22,
    "username": "user",
    "auth": {
      "method": "privateKey",
      "privateKeyPath": "~/.ssh/id_rsa",
      "passphrase": ""
    },
    "jumpHost": {
      "host": "bastion.example.com",
      "port": 22,
      "username": "jump-user"
    },
    "sshConfigPath": "~/.ssh/config"
  },
  "remotePath": "/var/www/html",
  "uploadOnSave": true,
  "backup": {
    "enabled": true,
    "maxCount": 10,
    "path": ".vscode/editsync-backup"
  },
  "trash": {
    "enabled": true,
    "retentionDays": 7
  },
  "conflict": {
    "action": "warn",
    "showDiff": true
  },
  "ignore": [
    "node_modules/**",
    ".git/**",
    "*.log"
  ],
  "watcher": {
    "enabled": true,
    "delay": 300
  },
  "hooks": {
    "beforeUpload": "npm run lint",
    "afterUpload": "pm2 restart app"
  }
}

Connection Settings

Field Type Default Description
connection.type string "sftp" sftp, docker, k8s, aws-ssm
connection.host string — Server hostname or IP
connection.port number 22 SSH port
connection.username string — SSH username
connection.auth.method string — password, privateKey, agent, interactive
connection.auth.password string — SSH password (if method is password)
connection.auth.privateKeyPath string — Path to private key file (.pem, .ppk)
connection.auth.passphrase string — Private key passphrase (if encrypted)
connection.sshConfigPath string ~/.ssh/config Custom SSH config file path

Auth Methods

Method Use Case Example
password Simple password auth "password": "mypassword"
privateKey Most common — SSH key file "privateKeyPath": "~/.ssh/id_rsa"
agent SSH agent forwarding No extra config needed
interactive 2FA, OTP, keyboard-interactive Prompts appear in VS Code

Sync Settings

Field Type Default Description
remotePath string — Remote directory to sync (e.g. /var/www/html)
uploadOnSave boolean true Auto-upload when you save a file
backup.enabled boolean true Back up server file before overwrite (Pro)
backup.maxCount number 10 Max backups per file (oldest auto-deleted)
backup.path string ".vscode/editsync-backup" Local backup directory
trash.enabled boolean true Use trash instead of permanent delete (Pro)
trash.retentionDays number 7 Days before trash is permanently deleted
conflict.action string "warn" warn (show UI) or auto-backup (silent)
conflict.showDiff boolean true Show diff view on conflict (Pro)
ignore string[] [] Glob patterns to exclude from sync
watcher.delay number 300 Debounce delay in ms for upload-on-save

Upload Hooks

Field Runs on Example
hooks.beforeUpload Local machine (before upload) "npm run lint", "eslint --fix"
hooks.afterUpload Server via SSH (after upload) "pm2 restart app", "systemctl reload nginx"

Environment variables available in hooks: EDITSYNC_FILE (local path), EDITSYNC_REMOTE (remote path).


Connection Types

SFTP with Password

{
  "connection": {
    "type": "sftp",
    "host": "192.168.0.100",
    "port": 22,
    "username": "root",
    "auth": { "method": "password", "password": "your-password" }
  },
  "remotePath": "/var/www/html"
}

SFTP with Private Key

{
  "connection": {
    "type": "sftp",
    "host": "192.168.0.100",
    "port": 22,
    "username": "root",
    "auth": { "method": "privateKey", "privateKeyPath": "~/.ssh/id_rsa" }
  },
  "remotePath": "/var/www/html"
}

With passphrase-protected key:

{
  "auth": { "method": "privateKey", "privateKeyPath": "~/.ssh/id_rsa", "passphrase": "my-passphrase" }
}

SFTP with SSH Agent

{
  "connection": {
    "type": "sftp",
    "host": "192.168.0.100",
    "port": 22,
    "username": "root",
    "auth": { "method": "agent" }
  },
  "remotePath": "/var/www/html"
}

Uses your system's SSH agent. No key path needed.

SFTP with Interactive Auth (2FA / OTP)

{
  "connection": {
    "type": "sftp",
    "host": "192.168.0.100",
    "port": 22,
    "username": "root",
    "auth": { "method": "interactive" }
  },
  "remotePath": "/var/www/html"
}

Prompts appear in VS Code for each authentication step.

SFTP with SSH Config

{
  "connection": {
    "type": "sftp",
    "host": "my-server-alias",
    "port": 22,
    "username": "root",
    "auth": { "method": "privateKey", "privateKeyPath": "~/.ssh/id_rsa" },
    "sshConfigPath": "~/.ssh/config"
  },
  "remotePath": "/var/www/html"
}

Automatically parses ~/.ssh/config for host aliases, proxy settings, and identity files.

SFTP + Jump Host (Bastion)

For servers behind a firewall:

{
  "connection": {
    "type": "sftp",
    "host": "10.0.0.5",
    "port": 22,
    "username": "deploy",
    "auth": { "method": "privateKey", "privateKeyPath": "~/.ssh/id_rsa" },
    "jumpHost": {
      "host": "bastion.company.com",
      "port": 22,
      "username": "jump-user"
    }
  },
  "remotePath": "/var/www/html"
}

Docker Container

{
  "connection": {
    "type": "docker",
    "host": "my-container-name",
    "username": "root"
  },
  "remotePath": "/app"
}

Kubernetes Pod

{
  "connection": {
    "type": "k8s",
    "host": "my-pod-name",
    "username": "default"
  },
  "remotePath": "/app"
}

host = pod name, username = namespace

AWS SSM Session Manager

{
  "connection": {
    "type": "aws-ssm",
    "host": "i-0123456789abcdef0",
    "username": "ec2-user"
  },
  "remotePath": "/var/www/html"
}

No SSH keys needed. Requires AWS CLI + SSM plugin configured locally.


Commands

Command Description Tier
EditSync: Connect Connect to configured server Free
EditSync: Disconnect Disconnect from server Free
EditSync: Upload Current File Upload the active editor file Free
EditSync: Download Current File Download file from server Free
EditSync: Download Folder Download folder from Remote Explorer (right-click) Free
EditSync: Initialize Download all server files (server -> local) Free
EditSync: Create Config Generate config (with SSH config import) Free
EditSync: Refresh Explorer Refresh the remote file tree Free
EditSync: Compare with Server Diff local vs server Pro
EditSync: Show File Backups Browse and restore backup history Pro
EditSync: Export Changes Export changed files list Pro
EditSync: Switch Server Profile Switch between server profiles Pro
EditSync: Save Current as Profile Save current config as profile Pro
EditSync: Activate Pro License Enter license key —

How It Works

Upload Flow (when you save a file)

You save a file
  |
1. [hooks] Run beforeUpload command (if configured)
  |
2. Check server file mtime (last modified time)
  |
3. Compare with last synced mtime
  |
4a. Match -> Back up server file (Pro) -> Upload via temp file -> Rename
4b. Mismatch -> CONFLICT
  |
  Show diff (Pro) -> You choose:
    - Backup & Overwrite (safe -- keeps server version as backup)
    - Overwrite Server (your file wins)
    - Skip (do nothing)
  |
5. [hooks] Run afterUpload command on server (if configured)

Open File Flow (sync on open)

You open a file
  |
1. Check server mtime vs last synced mtime
  |
2a. Same -> No action
2b. Different -> Server version is newer
  |
3. Back up local file (Pro) -> Download server version
  |
4. Reload editor with latest content
  (If you have unsaved edits, asks "Reload or keep my edits?")

Delete Flow

You delete a local file
  |
Pro: "Move to trash on server too?"
  -> Yes: Server file -> .trash/ (recoverable for 7 days)
  -> No: File kept on server

Free: File deleted locally only, server untouched

Backup Structure

.vscode/editsync-backup/
+-- init-2026-04-14T10-30-00/    <- initial download backup
|   +-- src/
|       +-- index.js
+-- sync/                         <- sync-on-open backups
|   +-- src/
|       +-- index.js.2026-04-14T12-00-00.bak
+-- src/
|   +-- index.js/                 <- upload backups (per-file history)
|       +-- 20260414_10-30-00-123.bak
|       +-- 20260414_14-22-00-789.bak
+-- .trash/
    +-- 2026-04-14_15-00-00/      <- deleted files (7-day retention)
        +-- old-file.js

CLI

Install

npm install -g editsync

Usage

editsync init              # Create .vscode/editsync.json
editsync connect           # Test server connection
editsync pull              # Download all files (server -> local)
editsync pull src/index.ts # Download specific file
editsync push src/index.ts # Upload specific file
editsync watch             # Watch for changes & auto-upload
editsync status            # Show sync status of all files
editsync diff src/app.js   # Compare local vs server (Pro)
editsync backups src/app.js # List backups for a file (Pro)
editsync export today      # Export today's changes (Pro)
editsync export 2026-04-01 # Export changes from specific date (Pro)
editsync export-files 3d   # Copy changed files to folder (Pro)
editsync activate SEP-XXXX # Activate Pro license key
editsync --help            # Show all commands

Watch Mode (any editor)

Not using VS Code? Run the CLI in your terminal alongside any editor:

editsync watch

This watches your project directory and auto-uploads changed files. Works with Neovim, JetBrains, Sublime, Emacs, or any editor.


Activating Pro

From VS Code

  1. Click "Get Pro" on any Pro feature prompt — checkout page opens
  2. Complete purchase — you'll receive a license key (e.g. SEP-XXXX-XXXX-XXXX)
  3. Paste the key in the input box that appears in VS Code
  4. Done — Pro features activate immediately and connection auto-refreshes

Or manually: Command Palette -> EditSync: Activate Pro License

From CLI

editsync activate SEP-XXXX-XXXX-XXXX

License Key Prefixes

Prefix Plan
SEP- Pro
SET- Team

Pricing

Plan Monthly Yearly What you get
Free $0 $0 Basic upload/download, 1 server, no safety net
Pro $2.90 $19 Backup, conflict detection, trash, unlimited servers, diff, hooks, profiles
Team $4.90/user $39/user Everything in Pro + team file locking + shared config

All paid plans include a 14-day free trial. No credit card required for trial.

14-day money-back guarantee on all purchases.

Purchase


FAQ

Is my data sent to EditSync servers?

No. Files travel directly between your machine and your server via encrypted SSH/SFTP. EditSync has no servers that receive your data. Only license validation calls go to Polar.sh (license key + hostname only). See PRIVACY.md.

What happens when the trial expires?

Pro features (backup, conflict detection, trash, multi-server) are locked. Basic upload/download continues to work on 1 server. No data is lost — your existing backups remain on disk.

Where are backups stored?

On your local machine only, in .vscode/editsync-backup/. Not in the cloud. If your machine is lost, backups are gone. Always maintain independent backups.

Why do I need Pro for a production server?

Free tier uploads without backup or conflict detection. If you accidentally overwrite a production file, it's gone. Pro automatically backs up every server file before upload and warns you when someone else changed the file.

Does it support .ppk files (PuTTY)?

Yes. Both .pem and .ppk key formats are supported.

Can I ignore certain files/folders?

Yes. Add glob patterns to the ignore array:

{
  "ignore": [
    "node_modules/**",
    ".git/**",
    "*.log",
    "dist/**"
  ]
}

What about ~/.ssh/config?

EditSync auto-parses your SSH config. When creating a config file, your saved hosts appear for one-click selection. Custom Include directives and ProxyJump are fully supported.

Can I run commands after upload?

Yes. Use the hooks setting:

{
  "hooks": {
    "beforeUpload": "npm run lint",
    "afterUpload": "pm2 restart app"
  }
}

beforeUpload runs locally, afterUpload runs on the server via SSH.

Does it work with Docker/Kubernetes?

Yes. Set connection.type to "docker" or "k8s". No SSH required — connects directly via docker exec / kubectl exec.

What if my connection drops mid-upload?

EditSync uses atomic writes (upload to temp file, then rename) so partial files never exist on the server. Failed uploads are automatically retried 3 times. If all retries fail, the file is queued and retried on next connection.


Important Notes

  • Backups are local only — not cloud-backed. Always maintain independent backups.
  • Free tier has no safety net — no backup, no conflict detection, no trash. Use Pro for production.
  • Server is Source of Truth — Initialize always downloads from server. Misconfiguration may overwrite local files.
  • See LICENSE.txt for full terms including limitation of liability.
  • See PRIVACY.md for privacy policy.

License

Proprietary. See LICENSE.txt.

Copyright (c) 2025-2026 DkLib. All rights reserved.

Contact: eorud0713@gmail.com

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft