Skip to content

SFTP Browser

ZestSSH includes a built-in SFTP file browser that lets you navigate, upload, download, rename, delete, and manage files on your remote server through an encrypted SSH connection. The interface adapts to your platform: a single-pane browser on mobile with touch-friendly controls, and a dual-pane file manager on desktop with drag-and-drop support.


From an active SSH session, tap the SFTP icon in the session toolbar. ZestSSH opens an SFTP channel over the existing SSH connection and navigates to your home directory on the server.


The mobile SFTP browser is a single-pane view optimized for phones and tablets.

  • Breadcrumb bar: Displayed at the top of the file list, showing the current path as tappable segments. Tap any segment to jump directly to that directory.
  • Parent directory: Tap the up-arrow icon in the app bar to go up one level. The browser tracks your navigation history, so going up returns to exactly where you came from.
  • Go to path: Use the overflow menu to type an absolute path and jump to it directly (useful when you know the exact location).

Files and directories are displayed in a scrollable list. Each entry shows:

  • Icon: Directories get a folder icon in the app’s accent color. Files get type-specific icons based on their extension — code files, config files, images, archives, key files, and logs each have distinct icons and color hints.
  • Name: The file or directory name.
  • Details: File size (formatted as KB, MB, GB), Unix permissions string, and last modified timestamp. Directories show permissions and modification date.

The footer bar at the bottom shows a count of folders and files in the current directory.

Tap the sort icon in the app bar to sort by name, size, date modified, or file type. Tap the same sort option again to reverse the order. Directories always appear before files regardless of the sort field.

Toggle hidden file visibility from the overflow menu. When hidden, files and directories whose names begin with . are filtered from the display.

Tap any file to open an action sheet with options:

  • Edit in Editor: Downloads the file and opens it in ZestSSH’s built-in text editor. When you save, the file is uploaded back to the same remote path. This is ideal for quick config file edits.
  • Download: Downloads the file to your device’s Downloads folder (Android) or the app’s documents directory (iOS, visible in the Files app). A progress bar shows transfer status with percentage.
  • Download & Share: Downloads the file to a temporary location and opens the system share sheet, so you can send it via email, messaging, AirDrop, or any other sharing target.
  • Copy Path: Copies the full remote path to your clipboard.
  • Rename: Opens a dialog to enter a new name for the file or directory.
  • Properties: Shows detailed information including name, full path, type, size, permissions, and last modified date.
  • Delete: Deletes the file (or recursively deletes a directory) after a confirmation dialog.

Tap the orange floating action button (upload icon) to pick a file from your device using the system file picker. ZestSSH streams the file to the remote server and shows a progress indicator. The file is uploaded to the current remote directory. The upload uses disk-based streaming, so large files do not consume excessive memory.

Use the overflow menu and select New Folder. Enter a name in the dialog and the directory is created in the current remote path.

Long-press any file to enter multi-select mode. The interface changes:

  • Checkboxes appear next to each entry.
  • A count of selected items shows in the app bar.
  • Select All Files selects all files (not directories) in the current view.
  • Download Selected downloads all selected files with aggregate progress tracking.
  • Delete Selected deletes all selected items after confirmation.

Tap the X button to exit multi-select mode.

Pull down on the file list to refresh the current directory listing.


On desktop platforms (Windows, macOS, Linux), ZestSSH provides a dual-pane SFTP interface modeled after traditional file managers like Total Commander or Midnight Commander.

The screen is divided into three areas:

  • Left pane: Your local filesystem. Browse directories, see file sizes, permissions, and modification dates. On Windows the last column is Attributes instead: a small badge for each Windows attribute that is set (R read-only, H hidden, S system), or a dash when none is. Windows has no Unix permissions, so no rwx string is shown there.
  • Right pane: The remote SFTP filesystem. Same column layout with name, size, permissions, and modification date.
  • Bottom panel: The Activity panel, showing every transfer, folder sync, and delete as it runs, with progress, speed, and status. A remote delete waits in a short hold window here first, with Undo and Delete now.

The panes use a resizable split view. Drag the divider to adjust the proportions.

The remote pane includes:

  • Header bar with buttons for navigating up, refreshing, and creating new directories.
  • Breadcrumb path with clickable segments for quick navigation.
  • Sortable column headers: Click Name, Size, Permissions (Attributes in a Windows local pane), or Modified to sort. Click again to reverse. The active sort column is highlighted in the accent color with a direction indicator.
  • Right-click context menu on any entry: Download to local, Copy path, New folder, Rename, Change permissions (chmod; not offered in a Windows local pane, where it could change nothing), Properties, Delete.
  • Right-click empty space in a pane for actions on the current folder: New folder, New file, Refresh, Copy path, and, in the local pane, Sync folder to server (see Folder Sync).
  • Chmod dialog: A visual permissions editor. Checkboxes for Read/Write/Execute across Owner/Group/Other, with a live octal display (e.g., 755). Apply to update permissions on the server.
  • Selection: Click a file to select it, click again to deselect. Selected files highlight in the accent color. Use the header download button to download all selected files. The pane’s footer counts the selection; with folders in it, the size shown is labelled as the selected files’ alone (for example “2 folders and 1 file selected (files: 333 B)”), because a folder’s size is only known once the transfer dialog walks it and states the real total.
  • Drag and drop between panes: Drag a file from the local pane to the remote pane to upload it, or drag from the remote pane to the local pane to download it. The receiving pane highlights with a colored border when a valid drop target is detected.
  • Double-click: Double-click a remote file to download it to the current local directory.
  • Folders: Drag a folder between panes to transfer its full contents. Files that are already identical on the other side are skipped, and you answer once for the files that differ. To push only what changed with a preview first, use Folder Sync.

Copying between two servers (server to server)

Section titled “Copying between two servers (server to server)”

The two panes do not have to be one local and one remote. The source picker in each pane’s rail header lists This PC and every saved host: a host with a live SFTP session switches instantly, an offline host connects when you pick it. Point one pane at the first server and the other pane at the second, then drag files or folders across, or select them and press the pane’s toolbar transfer button (labelled Download on a remote pane). The pre-transfer confirmation shown for folders and multi-file selections reads Copy, and the usual folder preview and overwrite prompts apply.

What happens to the bytes: there is no direct server-to-server link. For each file, ZestSSH downloads it from the source host to a temporary file on your device, uploads that file to the destination host, then deletes the temporary file; the progress bar shows the download as the first half and the upload as the second. Copying from one folder to another on the same server through two panes works the same way (a download and an upload, not a server-side copy). Both hosts must therefore be reachable from your device, the data crosses your connection twice, the temp folder needs room for the files in flight (up to three at once), and the post-transfer checksum verification is skipped for server-to-server copies. For a large tree between two servers, scp or rsync run in a terminal on one of them is faster.

”Not readable” in the overwrite dialog

Section titled “”Not readable” in the overwrite dialog”

When a transfer would overwrite a file that already exists, the conflict dialog shows the size and modification date of both sides. If the server side reads Not readable instead, ZestSSH asked the server for that file’s attributes (an SFTP stat) and got back neither a size nor a modification time. That is a server-side condition, not a problem with your local file: usually the user you connected as has no read permission on the file or its folder, or the server does not return stat attributes (some chrooted or hardened servers strip them). The file list shows the same words for an entry whose permissions and date could not be read, and for a symbolic link whose target cannot be resolved.

Because ZestSSH cannot see what it would overwrite, the dialog changes: Skip becomes the recommended primary action, Replace and Keep both stay available as secondary choices, and in a batch Replace if newer is disabled because it needs both dates to compare (its tooltip says so). To fix it, check the file’s owner and permissions on the server (ls -l, then chmod or chown as the right user), or connect as a user that can read it, then run the transfer again.

All transfers flow through a managed queue with a configurable concurrency limit (default: 3 simultaneous transfers). The Activity panel at the bottom of the screen shows:

  • File name and direction (upload or download indicator).
  • Progress bar with bytes transferred and percentage.
  • Status: Pending, Active, Completed, Failed, or Cancelled.
  • Actions: Cancel an active or pending transfer with the red stop square, retry a failed one, remove a finished one from the list with the grey x, or clear all completed entries. The two look different on purpose: the stop square halts work in flight, the x only tidies the list.
  • Held deletes: on desktop, deleting on the server first waits in a hold window (the length is a setting) with Undo and Delete now, so a mis-click costs nothing. Folder Sync deletions use the same window.
  • Local deletes go to the Recycle Bin or Trash: a delete in the local pane is recoverable from the Recycle Bin (Windows), the Trash (macOS) or the desktop’s trash (Linux, through GLib). When the system cannot recycle something (a network drive, a drive with the bin turned off, a folder larger than the bin allows) ZestSSH says so and asks before deleting it permanently; nothing is ever deleted permanently without that question.

When all transfers finish, both panes automatically refresh to show the updated file listings.

The dual-pane SFTP screen can be embedded inline alongside a terminal in desktop split-pane mode. In this configuration, it renders without its own app bar, fitting seamlessly into the desktop shell layout.

Each pane remembers where it was. When the app restarts with Auto-restore previous sessions on, or when you launch a saved workspace, every SFTP pane comes back to the folder it was in, not to the home directory; three panes on one host in three folders come back to three folders. That memory is per pane and per device, and it is never synced.

Separately, each host remembers the last folder any pane settled in on it (the host default), so a new SFTP pane on that host starts there. The host default rides on the connection record, so it follows you to your other devices through Cloud Sync. When a pane opens, the order is: its own restored folder, then the host default, then home.

The pane opens at home immediately and resolves the remembered folder in the background. If that folder is gone, the pane walks up to the nearest folder that still exists (at most four levels) and says so in one line under the path bar; if it exists but cannot be listed, or nothing above it works either, the line says that instead. The line disappears on your next navigation. A folder remembered under a different username is only a suggestion: the pane tries it and falls back quietly.

Folders are stored in their real, absolute form (symbolic links resolved). Writes are debounced: ten quick navigations are one write, nothing is written while a transfer is running, and closing the pane or backgrounding the app flushes what is pending.

To clear a host’s memory, right-click the host and choose Forget last folder (also under the connection editor’s advanced options). That clears the host default everywhere it synced, this device’s pane memory for the host, and the pin-suggestion counters.

When the same folder is opened on a host several times, the pane offers once to pin it (Pin it / Not now); declining stops the offer for that folder.

Recording mode masks the path bar, the breadcrumb and these notices like any other identifier. The terminal’s working directory is deliberately not remembered: it would have to be injected as a cd, which ZestSSH never does.


ZestSSH sanitizes all remote filenames before writing to the local filesystem. Path traversal characters (/, \, .., null bytes) are stripped from file names to prevent a malicious server from writing files outside the intended download directory. This applies to both single-file downloads and batch operations.