Releases: ThienNg65/ferry
Releases · ThienNg65/ferry
Release list
v0.14.7
v0.14.6
0.14.6 - 2026-07-23
Added
- Detailed connection progress dialog matching WinSCP UX and "Happy Eyeballs" socket implementation for faster connection speeds.
Changed
- Shrink the packaged installer by ~21% (118MB -> 93.5MB) by no longer bundling renderer-only packages' (and their build-tool dependency trees) raw source into the app, and by dropping unused Chro[...]
- File transfers from remote to local now intuitively target the active local directory rather than the OS Downloads folder, complete with a new conflict resolution modal to prevent silent overwri[...]
Fixed
- Prevent app crash on unhandled ssh client error events
- Live Tail log panel navigation and immediate output: Clicking "Live Tail" now immediately navigates to the log panel, and the log state is managed globally so initial history is never missed.
- Prevent remote-to-local path traversal vulnerabilities by enforcing strict filename sanitization prior to enqueuing transfers.
0.14.4
- Confirm before deleting a folder (hover trash button, context menu, or the keyboard Delete/Backspace shortcut); file deletes via the trash button or context menu now confirm too, while the keyboard shortcut still deletes files instantly.
0.14.3
0.14.3
0.14.2
Fixed
- FilePane.vue: scope keydown shortcuts away from text inputs (fixes data-loss on Delete/Ctrl+A while typing), fix Ctrl+A vs active filter, stuck rename state, and multi-select-aware row delete.
- RemoteShell: reject unsafe SFTP entry names (path traversal) and destroy the exec/execLines stream on abort instead of leaking it.
- TransferQueue/SyncService: defense-in-depth root-boundary check on joinLocal.
- SessionManager: scope host-key-mismatch trust to the exact hop/target that was confirmed, instead of force-trusting every hop on retry; fix proxy socket leak on failed connect.
- EditSessionManager: add closeEdit() + edit:close IPC channel.
- tailStreams/sessions store: dedup tails per-session, close them on tab close, and await an in-flight connect before detaching a closing tab.
- CompressService: guard remote zip source arg against option injection.
- SiteStore/AppSettingsStore: guard decrypt() against unavailable/failed OS encryption.
- TerminalView/App.vue: fix stale-session reattach races and avoid double term.open() by keeping the connected view mounted via v-show.
0.14.1
0.14.1
0.14.0
New features:
- Edit in external editor — double-click (or right-click → Edit) any file, local or remote, to open it in the OS's default app; a remote file downloads in full first (unlike the existing capped preview), then re-uploads automatically on every save via a debounced file watcher. An edit session survives the SSH connection dropping (stops syncing, keeps the temp file) and survives app quit (a pending, never-uploaded edit is never silently deleted).
- One-way directory sync (mirror) — push (local → remote) or pull (remote → local) a whole folder tree, diffing by size and a tolerant mtime comparison (SFTP's whole-second precision vs. local ms precision). An optional "delete extras" mode mirrors the destination exactly; a mandatory preview step (counts + bytes) is the only safety net before that destructive option runs, and the diff is recomputed fresh at run time rather than trusting the previewed plan.
- Multi-hop jump-host (bastion) chaining — a saved site can now tunnel through an ordered chain of jump hosts instead of just one, with per-hop host-key verification kept correctly isolated across the chain.
- SSH key generation — generate a new ed25519 keypair from the site form, preferring the system
ssh-keygen(supports a passphrase) and falling back to a pure-JSopenssh-key-v1encoder when it's not installed, cross-validated against a realssh-keygen -y/-lduring development. - SOCKS5 / HTTP CONNECT proxy support — a global default proxy (Settings) or a per-site override (inherit/none/custom), for connecting through a corporate proxy with no bastion host available; layers onto the jump-host chain as hop 0's transport only.
- Persisted transfer/operation history — a searchable, filterable log of every completed transfer and long-running operation (previously only visible live in the Activity dock), with a debounced disk write so a large sync's burst of completions doesn't hammer the main process.
- Directory bookmarks — quick-jump bookmarks per local/remote folder, independent of saved-site groups; cascade-deleted when their site is deleted.
- In-listing search/filter — type-to-filter within either pane's file listing, entirely client-side.
- Custom accent color — curated presets or a full color picker in Settings, replacing the fixed brand blue.
Bug fixes (found doing the gap review, not new-feature regressions):
- Remote symlinked directories showed up as plain files (SFTP
readdirreports lstat-style attrs); local broken symlinks were silently dropped from the listing instead of shown with a broken indicator. Both fixed, plus a visible symlink badge/tooltip on both panes. - WinSCP/PuTTY session import only scanned the top level of the registry, silently dropping every session organized into a folder group. Fixed with a recursive walk — which in turn uncovered and fixed a real latent infinite-recursion bug in the registry-subkey parser (a recursive query's own echoed header line was being mistaken for a child of itself).
- SSH-agent/Pageant authentication shipped previously without ever being verified end-to-end; it now pre-flight-checks the agent is reachable and has identities loaded, with actionable error messages instead of a generic handshake failure, plus a documented manual QA checklist for the parts that can't be scripted (a real Windows OpenSSH Agent / Pageant).