All notable changes to the "StackerFTP" extension will be documented in this file.
- Duplicate Cancel Button: Removed explicit Cancel action to prevent duplicate button with VS Code's native modal Cancel button.
- Cancelled State Reset: Automatically reset 'cancelled' flag and collision locks when starting a new transfer operation so subsequent uploads cleanly scan files and show overwrite dialogs as expected.
- Cancel / Escape Termination: Clicking Cancel or pressing Escape/closing the collision dialog now immediately aborts and clears all pending queue transfers instead of prompting repeatedly.
- Modal Action Order: Prioritized 'Overwrite All' and 'Skip All' in modal dialog for seamless directory transfers.
- Permission & Overwrite Lifecycle: Cleaned collision decision state flow, added reset command (
stackerftp.resetCollisionBehavior), and separated batch vs session overrides. - Skip All & Queue Visuals: Properly displayed skipped items with dedicated icons, eliminated false error states, and refined batch status summary.
- Skip All Handling: Fixed collision skip and skip-all logic to resolve gracefully as skipped items without throwing errors or triggering failure toasts.
- Batch vs Session Overwrite Lifecycle: Ensured batch collision decisions (Overwrite All / Skip All) automatically reset at the end of each transfer operation while preserving session overrides.
- Duplicate Upload Execution: Fixed issue where explorer folder upload ran twice sequentially due to duplicate URI arguments passed by VS Code.
- Batch vs Session Overwrite: Separated "Overwrite All" (applies only to current batch) from "Always Overwrite (Session)" (applies to whole session) and added
stackerftp.overwriteBehaviorconfiguration. - Transfer Queue Expand/Collapse Toggle: Fixed TreeView expand/collapse state caching issue with dynamic versioned IDs and consolidated duplicate toolbar buttons into a single toggle button.
- File Watcher Context Isolation: Fixed
contextpath resolution in File Watcher to only monitor the target output directory (e.g.out) and ignore external source changes. - File Watcher Auto-Connect: Added automatic connection recovery on file system change events when the active SFTP/FTP session has timed out or disconnected.
- Hierarchical & Recursive Transfer Queue Tree: Added true multi-level folder and subfolder hierarchy in the Transfer Queue panel, organizing directory transfers into collapsible folder trees.
- Per-Folder Progress Tracking: Displays live percentage, completed/total file counters, and byte transfer progress for each folder and subfolder branch.
- Expand All / Collapse All in Transfer Queue: Added toolbar buttons (
Expand AllandCollapse All) with default collapsed state for a clean and minimalist transfer queue view. - Folder-Level Batch Cancel & Retry: Added ability to cancel or retry all transfers within a specific folder/subfolder branch with a single action.
- Ignore Pattern Matching: Enhanced
matchesPatternwithminimatchand prefix path matching so patterns likenode_modules,.git,vendoror*.logproperly match files in nested subdirectories. - Multi-Server Command Routing: Fixed
deleteRemote,openRemoteFile, anddownloadcommands to use the target tree item's configuration and connection reference instead of falling back to default active server. - File Watcher Safety: Fixed
autoDeletecheck in file watcher to require explicitautoDelete: truebefore deleting remote files, preventing accidental deletions when omitted. - Remote POSIX Path Normalization: Normalized remote root and target paths with
path.posix.relativeingetLocalPathFromRemotefor robust cross-platform path resolution on Windows. - Remote Explorer Webview Context Support: Fixed file download and open actions in the Webview Remote Explorer to respect the configured local
contextdirectory. - Connection Manager State Cleanup: Cleaned up active connection key state on disconnect events.
- Local Context Path Support (
context): Added full support for thecontextsetting insftp.json. Subdirectories (e.g.out,build,dist) can now be directly mapped to the remote root or custom remote paths.
- Context Path Mapping Across Operations: Fixed relative path calculation in
upload,forceUpload,uploadProject,download,downloadProject,diff,uploadOnSave, file watcher, and quick search panel so files within the configured context folder upload/download without extraneous local folder prefixes on the remote server. - Remote to Local Path Resolution: Fixed downloads and diff inspections so remote files map back to the local
contextsubfolder when configured.
- Config Resolution During Transfers: Fixed intermittent
No SFTP configuration founderrors by resolving the workspace from the selected item and reloadingsftp.jsonwhen the in-memory config cache is empty. - SFTP Reconnect Stability: Fixed reconnect behavior after password-prompt logins by retaining runtime credentials in memory for later reconnect attempts.
- Connection State Cleanup: Improved SFTP close/end handling and keepalive settings so dropped sessions are cleaned up consistently before reconnecting.
- SCM Multi-Select Upload: Fixed Source Control
Changescontext-menu uploads so all selected files are uploaded instead of only the active item. - SCM Multi-Select Download: Fixed the matching download path for Source Control multi-selection so all selected files are processed consistently.
- Release Audit: Reviewed command and menu coverage to verify contributed actions are registered and wired correctly before the next implementation round.
- Profile Management: Implemented the
Edit Profilesflow in the config command so profiles can now be created, edited, deleted, and assigned as the default profile without hand-editing JSON. - Select All Command: Wired
stackerftp.selectAllFilesto the native tree selection flow so it now selects all visible items in the Remote Explorer tree.
- Recursive Remote Directory Creation: Fixed SFTP uploads failing with
No such filewhen intermediate remote folders do not exist. Upload, create file, duplicate/write, rename, and directmkdirflows now create missing parent directories consistently. - FTP Remote Path Safety: Fixed FTP remote directory creation and path checks so they no longer change the active working directory unexpectedly during upload/stat operations.
- FTP Transfer Stability: Serialized FTP upload/download operations on a single connection to prevent client state races during directory creation and path checks.
- Watcher Remote Delete Handling: Fixed file watcher auto-delete logic to detect remote files vs folders correctly and use recursive directory removal when needed.
- Upload to Non-Existing Folders: Fixed upload failures when parent directory doesn't exist on the server. Now all upload methods automatically create the parent directory structure before uploading files.
ftpConnection.upload()- file upload now creates parent directoriessftpConnection.upload()- file upload now creates parent directoriesftpConnection.writeFile()- file creation now creates parent directoriessftpConnection.writeFile()- file creation now creates parent directories
- Affected Operations: Single file upload, folder upload, sync to remote, copy to other remote, sync between remotes, git changed files upload, project upload, webview file create, new file, duplicate file
- Download Single File: Fixed issue where downloading a single file was downloading the entire project instead of just the selected file.
- Multiple Selection: Added support for selecting multiple files/folders for upload, download, and delete operations across all panels.
- Upload Folders: Fixed issue where folders weren't being uploaded in multiple selection mode.
- Source Control Upload: Fixed upload from Source Control sidebar to handle multiple selected files correctly.
- Remote Explorer Tree: Added multi-select support for delete and download operations.
- VS Code Explorer: Added download button for folders (was only available for files).
- WebView Download: Fixed folder download - now correctly uses downloadDirectory instead of treating folders as files.
- Delete Confirmation: Fixed delete dialog showing only one item name when multiple items are selected.
- Folder Transfer UX: Added immediate feedback when
Upload FolderorDownload Folderstarts, so users see that the command is running during initial scan/queue preparation. - Progress Visibility: Added notification progress states (
Connecting...,Scanning and queueing files...) for folder upload/download operations.
- Download Stall Protection: Added transfer timeout safeguard so stalled downloads no longer block the queue indefinitely.
- Queue Recovery: Timed-out transfer connections are now safely dropped from pool reuse to prevent repeated stuck
Pendingitems.
- Upload Queue Stall: Fixed uploads getting stuck at
0%with remaining items inPending. - SFTP Transfer Stability: Disabled pooled transfer connections for SFTP and forced primary-connection fallback when pool acquisition fails.
- Quick Search: Search now triggered by button click or Enter key (not real-time)
- Quick Search Performance: Optimized search algorithm for faster results
- Search Path Change: Fixed change path functionality
- Compare Folders Panel: New split-view WebView panel for comparing local and remote folders. Opens in a new tab with tree structure, color-coded differences, and actions.
- Quick Search: Ultra-fast file search in a new panel. Parallel directory traversal with 150ms debounce, wildcard pattern support (
*,?), and instant results. - Folder Selection: Compare Folders now allows selecting specific folders or entire workspace.
- Search Path Change: Quick Search allows changing the search location (entire remote or custom path).
- Compare Panel: Split view showing local (left) and remote (right) with tree structure
- Filters: All / Only Local / Only Remote / Different filtering
- Actions: Show Diff, Upload, Download, Reveal buttons for each file
- Export: Save comparison results as JSON or CSV
- Search: Real-time file search with debounce in Compare Panel
- Quick Search: Open file, Download, Reveal actions directly from results
- Parallel Remote Traversal: Sibling folders now scanned concurrently using Promise.all
- mtime Comparison: More accurate comparison using both size AND modification time
- Progress Streaming: Real-time progress updates during folder comparison
- Ignore Patterns: Configurable patterns to exclude files/folders (.git, node_modules, etc.)
- Search Input Focus: Fixed search input losing focus on each keystroke in Compare Panel
- Context Menu Integration: Quick Search available in Explorer and Remote Explorer context menus
- Activity Bar Transfer Badge: Added a numeric badge to the sidebar icon to show the active transfer count at a glance.
- Connection Pool: Introduced a per-server connection pool (up to 5 connections) enabling true parallel FTP/SFTP transfers. Lazy creation, automatic idle cleanup after 60s, and graceful drain on disconnect.
- Transfer Tracking Performance: Refactored
TransferManagerto track active counts incrementally, ensuring high performance even with large queues. - Promise-based Queue Completion: Replaced 100ms polling loop with event-driven promise resolution, eliminating unnecessary CPU wake-ups during transfers.
- Stat Bypass for Bulk Transfers: Directory uploads/downloads now pre-scan targets and pass metadata, skipping redundant per-file stat calls for significantly faster bulk operations.
- Increased Default Concurrency: Default
transferConcurrencyraised from 5 to 10 for better out-of-the-box performance. - Faster Directory Scanning: Scan batch size increased from 10 to 25, reducing traversal time for large directory trees.
- Log Noise Reduction: Cache invalidation messages downgraded from
infotodebuglevel, reducing output panel clutter.
- Pool Timer Leak: Fixed
waitForAvailabletimeout not being cleared when a connection becomes available, preventing a 30s timer leak. - Dead Connection Cleanup: Pool now immediately removes disconnected connections on release instead of waiting for the next acquire cycle.
- Negative Active Count on Cancel: Fixed
_activeCountgoing negative when in-flight transfers complete after a cancel operation.
- Lightning-Fast Parallel Transfers: Removed operation queue bottleneck - files now download/upload in true parallel, utilizing full concurrency settings.
- Folder Upload/Download Fix: Fixed workspace root detection - now correctly identifies selected folder's workspace instead of always using first workspace.
- Parallel Transfer Performance: Both SFTP and FTP connections now bypass sequential enqueue, enabling concurrent file transfers at maximum speed.
- Workspace Detection: Upload Folder and Download Folder commands now correctly resolve the selected folder's workspace.
- Interactive Collision Resolution: Added a modal dialog when a directory/file çakışması (collision) is detected during both single and batch transfers.
- Unified Transfer Queue: Folder downloads and uploads are now fully integrated into the global transfer queue.
- Concurrent Transfers: Improved transfer speed by processing queue items in parallel (configurable via
transferConcurrencysetting). - Universal Collision Detection: Collision prompts now trigger for both files and directories, ensuring nothing is overwritten without permission.
- Zero-Latency Metadata: Transfer queue now reuses scan data to eliminate redundant network checks, providing near-instant starts for bulk transfers.
- Parallel Directory Scanning: Major speed boost in the "Scanning" phase by traversing multiple subdirectories concurrently.
- High-Throughput SFTP: Tuned SFTP
fastPut/fastGetwith 256KB chunks and 128-parallel requests for maximum transfer speed. - Scanning Phase Status: Added real-time scanning feedback to the status bar during directory traversal.
- UI Stability: Debounced queue updates to prevent status bar flickering and provide a professional transfer experience.
- Batch Processing: Optimized directory traversal for large folders to ensure stability and low memory usage.
- Queue Deadlock Fix: Resolved a hang where multiple concurrent transfers hitting collisions would block the entire queue. Serialized collision prompts to ensure a smooth user experience.
- Single File Collision Support: Extended collision resolution to single file downloads and uploads (previously only batch).
- Tree View Directory Download: Fixed "Failure" error when downloading folders from the Remote Explorer tree. The command now correctly identifies directories and uses recursive download logic.
- Improved Error Handing: Added remote-side directory checks to prevent SFTP stream errors when a directory is treated as a file.
- Directory Collision: Resolved
EISDIR: illegal operation on a directoryerror when downloading folders where a local directory exists at a remote file's target path. - Symlink Downloads: Fixed issue where remote symlinks-to-directories were downloaded as files; they are now correctly created as local directories.
- Transfer Safety: Added defensive checks to SFTP and FTP download methods to prevent filesystem errors during concurrent or conflicting transfers.
- Performance: Bundled extension with
esbuild, reducing VSIX size from ~15MB to 1.4MB and improving activation speed. - Dependency Management: Optimized
.vscodeignoreand moved critical assets (codicons) to production dependencies to ensure reliable UI rendering in bundled environments. - Dynamic Imports: Replaced all dynamic
requirecalls with staticimports for better bundler compatibility.
- UI Icons: Fixed missing connection icons in the sidebar by correcting Codicon class usage and asset packaging.
- Binary Detection: Improved binary detection logic and added a whitelist for common text extensions (PHP, JS, SQL, etc.) to prevent incorrect "Binary file" warnings.
- Cache Synchronization: Fixed a bug where remote previews showed stale content; added automatic cache invalidation after successful file uploads.
- Activation Reliability: Fixed silent activation failures by ensuring all
ssh2sub-dependencies are correctly included in the VSIX.
- Missing Command Error: Fixed critical "command not found" error for
stackerftp.tree.openFileand other tree commands in the Native TreeView. - Registration Alignment: Ensured all commands defined in
package.jsonare correctly registered in the extension activation cycle. - Native Explorer Reliability: Improved handler logic for tree items to ensure configurations are passed accurately.
- Fixed "Converting circular structure to JSON" error when interacting with files in Remote Explorer.
- Optimized TreeItem serialization by removing internal connection references.
- Enhanced logger with safe JSON serialization for circular structures.
- Marketplace Build Fix: Fixed critical issue where the extension failed to load when installed from Marketplace (missing dependencies).
- Package Optimization: Reduced VSIX size from 42MB to 1.3MB by excluding cache files.
- Reliability: Refactored resource loading to use native VS Code FileSystem API.
- Platform Integrity: Switched to
vscode.workspace.fsfor secure file access across all environments. - Config Support: Added support for JSON with comments (JSONC) in
sftp.json. - Webview Handshake: Implemented ready-handshake to eliminate race conditions during panel initialization.
- Remote Explorer: Optimized icon rendering and ensured loading indicators are always dismissed precisely.
- Connection Panel: Fixed issue where the panel would get stuck on loading due to missing CSP and JavaScript errors during initial setup.
- Remote Explorer: Fixed stuck loading indicator when refreshing the explorer or opening connection nodes.
- UI Stability: Added safety checks for connection configurations to prevent frontend crashes.
- Config Sync: Added automatic refresh and deletion detection for
sftp.jsonconfiguration file. Manual deletions from the explorer now accurately reflect in the connections list.
- Webview Optimization: Extracted all inline HTML, CSS, and JavaScript from the connection form provider into separate modular files (
resources/webview/), improving maintainability and reducing the main provider's size by ~1000 lines.
- Status Bar: Consolidated status bar items. Transfer notifications are now non-persistent and use the standard
$(output)icon for cleaner UI.
- Connection Hopping: Support for Jump hosts in SFTP connections.
- Auto Reconnect: Automatic reconnection with backoff retry for dropped connections.
- Checksum Compare: Ability to compare remote file checksums with local files.
- MIME Type: File Info panel now displays MIME types for remote files.
- Search Navigation: Navigate directly to search results in remote files.
- Support for FTP/FTPS: "Compare Checksum" and other WebMaster tools are now available for FTP/FTPS.
- Unit Tests: Added automated unit tests for core functionality.
- Activation Fix: Commands now register correctly even when opening the extension without a workspace.
- Security & Validation: Removed non-essential files to resolve Marketplace security warnings and manifest errors.
- Package Size: Significantly reduced extension size by optimized packaging (from 24MB to ~900KB).
- Download Prompt: Large files now show a clear download prompt instead of hung previews.
- Performance: Improved responsiveness through asynchronous file operations.
- Documentation: Updated README with new features and protocol alignment.
- Package Size: Optimized extension package by excluding unnecessary cache files, reducing size from 24MB to ~2MB.
- Atomic Uploads: Implemented atomic upload logic for SFTP to prevent partial file uploads and ensure data integrity.
- Unit Testing: Integrated Vitest for robust unit testing of core components.
- Fork Compatibility: Added metadata keywords and explicit README mentions for Cursor, Antigravity, Windsurf, VSCodium, Trae, and PearAI.
- Improved Symlinks: Enhanced symlink display in Remote Explorer to show target paths more clearly.
- Maintenance: Minor bug fixes and performance improvements in Remote Explorer.
- Package Management: Improved
.gitignoreandpackage-lock.jsonhandling for better environment consistency.
- Connection Modal: Fixed bug where selecting a primary connection caused others to disappear.
- Connection Sync: Fixed issue where sidebar connections list wasn't updating when activating a connection in the modal.
- Webview Sync: Fixed connection status synchronization in the Connections webview.
- Remote Terminal: Fixed logical error in "Open Remote Terminal" to ensure correct connection usage.
- Command Visibility: Ensure SFTP commands are hidden for FTP/FTPS connections.
- TransferManager: Fixed connection reuse bug and potential data corruption issues.
- Transfer Queue Panel: Implemented FileZilla-style Transfer Queue panel below the tree view.
- Tree View Commands: Added commands to toggle hidden files and sort files in the Remote Explorer.
- Status Bar: Added transfer indicator to status bar.
- Transfer Queue TreeView panel with status bar integration
- Transfer count indicator in status bar with click-to-view functionality
- Large file warning (5MB+) with download option
- Improved symlink handling with broken symlink detection
- Binary file detection improvements
- Connect/Disconnect button visibility bug: Fixed regex pattern that caused both buttons to appear simultaneously
- Remote Explorer server list: Now always shows ALL configured servers (both connected and disconnected)
- Connection state sync: Remote Explorer and Connections panel now stay in sync when connecting/disconnecting
- Connections webview icons: Removed manual CSS overrides and fixed URI path to use official VS Code codicon assets, ensuring 100% visual consistency
- Replaced custom PNG icons with native VS Code codicons (
$(plug)and$(debug-disconnect)) - Improved error messages for file operations (ENOENT, EPERM, timeout, etc.)
- Better handling of special file types (sockets, symlinks)
- Status bar now shows active transfer count with spinning icon
- Unified icon usage across Remote Explorer and Connections panel
- Fixed README claims to match actual codebase implementation
- Clarified that Web Master Tools (chmod, checksum, etc.) are SFTP-only
- Fixed visibility of SFTP-only context menu commands on FTP connections
- Fixed TransferManager connection reuse bug
- Improved Remote Explorer tree view commands
- Added "Edit Local" button (Remote file editing with auto-save)
- Updated toolbar icons
- Initial release of StackerFTP
- FTP, FTPS, and SFTP protocol support
- Remote Explorer with native VS Code file tree
- Bi-directional file synchronization
- Upload on save functionality
- Connection profiles support
- File manager operations (upload, download, delete, rename, duplicate)
- Recursive directory operations
- Transfer queue with progress indicators
- Web Master Tools:
- Permission management (chmod)
- Checksum calculation (MD5, SHA1, SHA256)
- File information display
- Remote file search
- Backup creation
- Folder comparison
- Cache purge
- Remote terminal support (SFTP)
- Diff view for local vs remote files
- Comprehensive logging system
- Keyboard shortcuts for common operations
- Multiple configuration profiles
- Connection hopping (jump hosts)
- File watcher for automatic uploads
- Ignore patterns support
- Native VS Code look and feel
- Works with VS Code and all forks (Cursor, Antigravity, etc.)
- Minimal custom styling
- Fast and efficient file transfers
- Concurrent transfer support
- Auto-refresh after operations
- Hidden files support
- File type icons
- Status bar integration