All notable changes to the "StackerFTP" extension will be documented in this file.
- 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