Skip to content
krutovvvPublic

About

Native Mac client for SFTP, FTP and FTPS, with logins in a plain SQLite file and a built-in MCP server. Rust + GPUI. Deep alpha, no releases: source to fork and change with your own agent.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Ferry

A native Mac client for SFTP and FTP, written in Rust with GPUI. It keeps your server logins in a plain SQLite file you can open and read, and it has an MCP server built in, so your coding agent can work on your servers too.

I built it for myself and put the source here in case it helps someone. Deep alpha, not a product: there is nothing to download. You take the code and change it.

Files on a server, with details and permissions in the panel on the right

The pictures show made-up data. The same demo runs in your browser.

Is this for you?

Maybe, if:

  • you look after a lot of sites and servers, and you are tired of losing the logins;
  • you want your agent to reach your servers without pasting passwords into a chat;
  • you want your own file client and would rather change working code than start from zero.

Probably not, if:

  • you want an app to install and just use;
  • you need S3, sync, or anything beyond SFTP and FTP: it isn't there;
  • you want your passwords encrypted on disk. Here they are in plain text, on purpose.

Why I made it

For years I kept my clients' logins in an ordinary file client. It did the job, but I only ever used a small part of it, and the parts I needed most weren't there. All the logins sat in the Keychain, where I couldn't simply read them. They come from clients, and every so often an update or a new machine meant hunting for them again. And my agent couldn't get at any of it, which is how I do most of my work now.

So I had my own written. I say "had" because an agent did it: I am a front-end developer and I don't write Rust.

When the logins were finally in one place, I had an agent try every one of them. Of the 51 servers I had been carrying around for years, 21 still worked.

What's in it

  • Logins you can read. One SQLite file with plain tables, passwords included. Open it with anything.
  • Export and import. All of it in one file under a passphrase, to keep anywhere and take to another Mac. This is the one place encryption earns its keep: the file leaves your machine.
  • Save means upload. Double-click a file on a server and it opens in your own editor. Every save goes back to the server. If someone changed the file there in the meantime, it stops and asks.
  • MCP for your agent. It can list servers, read and write files, move them and change permissions. It logs in by itself, so a password only reaches the agent if it asks for one. It starts on demand and opens no port.
  • The usual things. Folders and icons, tabs, drag from Finder, transfers with progress, owner, group and permissions in a side panel. SFTP with passwords or keys, plain FTP, and FTPS.
The servers, with folders in the sidebar An edited file stopped because it changed on the server, with both ways out
The menu on a file A server's details

About those plain-text passwords

They are on purpose. To encrypt that file the key has to live somewhere, and that somewhere is the Keychain, and losing it would lose everything, which is the problem I set out to end. The file can be read only by your account. Do what suits you, but know that anything running as you can read it, and that a password an agent asks for stays in that chat's history.

Plain FTP sends your password and your files unencrypted. Sometimes that is all a host offers. FTPS doesn't check certificates, because shared hosting almost never has one for the site's name.

Making it yours

The code is the point. Give the repository to your coding agent and describe what you need. Everything is written down for it: AGENTS.md, skills and SPEC.md, plain enough for a small local model. It tests against throwaway servers on your own Mac, so a change can be checked for real and never touches your data.

scripts/check.sh      # every test, against SFTP, FTP and FTPS servers it starts itself
cargo run             # the app, on your real data: FERRY_DATA_DIR points it elsewhere
scripts/install.sh    # builds it and puts it in /Applications

To hand it to Claude Code as an MCP server:

claude mcp add --scope user ferry -- /Applications/Ferry.app/Contents/MacOS/ferry --mcp

The look is plain macOS on purpose, the same as my other apps. It is familiar and has no character of its own, so it makes a good blank to build on.

Why Rust

I could have built this for the web, I know that world well. I just don't want that kind of UI, and Electron makes me sick. Rust is hard on people, but models write it just fine, and the speed stays. The UI framework, GPUI, comes from Zed.

One client for my own needs turned out much simpler than I expected. If you have been putting off something like this, it may be closer than you think.

License

MIT.

About

Native Mac client for SFTP, FTP and FTPS, with logins in a plain SQLite file and a built-in MCP server. Rust + GPUI. Deep alpha, no releases: source to fork and change with your own agent.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages