Skip to content

Releases: ThienNg65/ferry

v0.14.7

Choose a tag to compare

@github-actions github-actions released this 24 Jul 14:48

0.14.7 - 2026-07-24

Changed

  • Massively improved app startup time (to <500ms) by lazy-loading stores, adding DevTools extension guards, enabling V8 bytecode caching, and implementing renderer bundle splitting.

v0.14.6

Choose a tag to compare

@github-actions github-actions released this 23 Jul 11:32

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

Choose a tag to compare

@github-actions github-actions released this 21 Jul 02:15
  • 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

Choose a tag to compare

@github-actions github-actions released this 20 Jul 16:26
v0.14.3

Changelog

0.14.3

Choose a tag to compare

@github-actions github-actions released this 20 Jul 16:26
v0.14.3

Changelog

0.14.2

Choose a tag to compare

@github-actions github-actions released this 20 Jul 14:28

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

Choose a tag to compare

@github-actions github-actions released this 20 Jul 06:38
v0.14.1

remove ci step

0.14.1

Choose a tag to compare

@github-actions github-actions released this 20 Jul 06:38
v0.14.1

remove ci step

0.14.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 16:27

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-JS openssh-key-v1 encoder when it's not installed, cross-validated against a real ssh-keygen -y/-l during 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 readdir reports 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).