Your files and your shell. One window.

FileFerry speaks FTP, FTPS, SFTP, WebDAV, SMB and S3, and it opens a real SSH terminal on the same connection. Native macOS, no Electron, no cloud account, nothing phoning home.

macOS 14.6 or later · free while in beta · requires the TestFlight app

Session log · FTP · port 21
220 (vsFTPd 3.0.5)USER kjm331 Please specify the password.PASS ******230 Login successful.PWD257 "/home/kjm"PASV227 Entering Passive Mode (192,168,0,72,201,44)LIST150 Here comes the directory listing.226 Directory send OK.— every line, every session. Nothing hidden.
transfer

Seven protocols, one list of servers

Group your servers, keep several connections per server, and move files between the two panes the way you already do in Finder.

FTPplain, for servers on your own network
FTPSexplicit AUTH TLS on port 21
SFTPEd25519 and ECDSA P-256 keys
SSHfull terminal, not a command box
WebDAVHTTP and HTTPS
SMBshares appear as folders
S3Amazon, Cloudflare R2, MinIO, Garage

Object storage that behaves like a folder

S3 has no directories. An object is called photos/2026/house.jpg — that is one single name, and the slashes are ordinary characters. FileFerry still shows you a tree you can click through, exactly as everywhere else.

The endpoint is yours to set. That covers Amazon, but equally Cloudflare R2, Backblaze, MinIO, or a Garage instance you run yourself. Credentials are an access key and a secret key; the secret lives in the Keychain, not in a configuration file.

Files above 5 GB are sent in parts, because S3 requires it. If the connection drops, FileFerry remembers which parts already arrived and picks up there on the next attempt instead of starting over. And because unfinished transfers stay on the server, appear in no listing and still take up space, FileFerry checks after connecting and asks whether they should go.

FileFerry main window: server sidebar on the left, local files in the middle, remote files on the right.
Local on the left, remote on the right, servers and groups in the sidebar. The Log button opens the session log shown above.

Copy, move, delete — including folders

Cut and paste moves a folder server-side in one step. Copying whole directory trees works across every protocol.

Edit files on the server

Open a remote file in the built-in editor, or hand it to any app on your Mac. Saving writes it straight back.

Permissions

Set file modes with checkboxes or octal, on FTP, FTPS, SFTP and SSH.

Auto-refresh

Watch a remote directory while a build or an upload is running.

sync

Two folders, one look

Syncing a folder starts with looking. FileFerry compares the local directory with the remote one and hands you a list — both sizes, both timestamps and the proposal, line by line. Nothing is transferred until you tick it.

FileFerry with the sync pane open: the local and the remote file list on top, below them the comparison pane with a direction switch, toggles for subfolders, creating and deleting, and a list showing a checkbox, both sizes, both timestamps and the proposal for each row.
The sync pane sits at the bottom of the window, not in a sheet in front of it. Both file lists stay visible — and usable, as long as no run is active.

Nothing happens unasked

Only the safe rows are ticked. If the copy on the other side is the newer one, it is shown but left unticked. Deletions are never preselected, and there is a confirmation before anything is removed.

A timestamp is not proof

Across protocols they are unreliable — time zone, minute granularity, the server’s own clock. On SFTP a checksum decides instead. And FileFerry remembers the state after each run, so a file you just uploaded is not treated as the newer one next time.

The direction is switchable, subfolders can be included, and anything deleted is deleted for good — locally too, not moved to the Trash. A delete that ends up in the bin on one disk and gone forever on another would be worse than one that always means the same thing. Only what you ticked and then confirmed is deleted. While a run is active, the actions in the browser that would get in its way are disabled — looking and navigating stay open. Sync is new in this beta and accordingly little tested; feedback on it is especially welcome.

recovery

When the line drops

Copy 500 files, lose the connection after 200, and the hard part begins: working out where it stopped. FileFerry keeps that list for you — and it survives quitting the app.

FileFerry settings, Recovery tab: a list of unfinished transfers with server, connection and path, and a retry and a discard button per row.
What is still open, with the server and the path it belongs to. One button to transfer it again, one to drop it from the list.

Three attempts, then the list

Most failures are brief — a connection that blinked, a server that was busy. Each file is retried three times before it counts as failed.

Measured, not assumed

After an upload the file size on the server is compared with the local one. A server answering "226 Transfer complete" is its opinion, not proof.

One detail that matters: before a retry, the local file is checked against its size and date from the moment it failed. If you have edited it since, FileFerry stops and says so instead of quietly sending a different version.

shell

A terminal, in the same app

Most transfer apps stop at the file list. FileFerry opens a real SSH session on the server you are already connected to — no second app, no retyping the host.

FileFerry with an open SSH terminal session to a Raspberry Pi.
SSH session with colour theme, saved per connection.

Snippets

Keep the commands you always retype, sorted into categories. Click one to insert it, or to run it right away.

Terminal that behaves

Terminal type, character set, carriage return mode and an optional command to run after login — per connection.

trust

Strict about who answers

On first contact FileFerry shows you the fingerprint and asks. After that it checks silently. If it changes, the connection is refused — there is no "connect anyway" button.

FileFerry settings, Security tab: list of known hosts with SHA-256 fingerprints and a remove button per entry.
Every fingerprint you have confirmed, in one place. Removing an entry is the deliberate way back in after a server is rebuilt or a certificate is renewed — there is no shortcut at connect time.

Host keys

SHA-256 fingerprint on first connect, stored in the keychain, verified on every session for SSH and SFTP.

Certificates

Self-signed certificate on your NAS? Confirm the fingerprint once. It is checked against openssl x509 -fingerprint -sha256.

Sandboxed

App sandbox with four entitlements, no temporary exceptions. Nothing listens on a port.

Two separate logs

The live session log for the wire dialogue, and an optional rotating log file on disk for diagnosis.

comfort

Made to look like it belongs on a Mac

FileFerry settings: appearance with system, light and dark, and thirteen accent colours.

Light, dark or system

Follows macOS, or pin it. Thirteen accent colours, including "Automatic" for the system accent.

Four languages

English, German, Danish and French — switching takes effect immediately, no restart.

beta

The beta

Feedback goes through the TestFlight app — screenshot, a few words, send. It reaches me directly. Note that testers who join through the public link are anonymous to me: I see the report, not who you are. If you would rather write, there is a contact form.

TestFlight builds expire 90 days after upload. When one runs out, install the next from the same link.

Join the beta on TestFlight macOS 14.6 or later · free during beta