DEV Community

Cover image for I built a macOS FTP client entirely in Rust — no Electron, no webview
GregoryMc86
GregoryMc86

Posted on

I built a macOS FTP client entirely in Rust — no Electron, no webview

Hi dev.to 👋

I'm building gmacFTP — a dual-pane FTP/FTPS/SFTP client for macOS, written entirely in Rust. The UI runs on Slint with a GPU-accelerated FemtoVG renderer on top of wgpu/Metal. No Electron. No Tauri. No webview. Just a real native macOS app that moves your files.

This is an early development preview (currently v0.0.14), and I'm actively looking for Mac users who work with websites, hosting, NAS devices or remote servers to test it and give honest feedback.


Why?

I wanted something with the familiar dual-pane workflow — like Classic FTP or FileZilla — but smaller, more private, and without paying for a full file-management suite. Most cross-platform FTP clients are either Electron-based (heavy), closed-source, or bloated with features I don't need.

So I built one in Rust.


Architecture at a glance

Layer Technology
Transfer engine Rust + Tokio (async FTP/FTPS/SFTP)
GUI framework Slint 1.x with FemtoVG renderer (wgpu → Metal)
Credential storage macOS Keychain + encrypted local vault
Cross-device sync Optional encrypted server list synchronization
Bundle size ~7.5 MB DMG
Runtime dependencies Zero. No browser engine. No frameworks to install.

The entire app — transfer engine, protocol implementations, UI, keychain integration — is Rust. The only non-Rust component is the macOS system frameworks (Keychain, Foundation) accessed through minimal FFI bindings.


What works right now

  • FTP, explicit FTPS, and SFTP — full protocol support via Tokio
  • Dual independent panes — including server-to-server transfers
  • Drag-and-drop file operations with a live transfer queue
  • macOS Keychain integration for credential storage
  • Encrypted vault for cross-device server list sync
  • FileZilla Site Manager import — migrate your existing servers
  • English and Polish UI
  • No accounts, no telemetry, no ads

The DMG is signed with an Apple Developer ID and notarized by Apple — opens cleanly with no Gatekeeper warnings.


What I need help with

This is a development preview. Expect rough edges. I'm looking for:

  1. Compatibility reports — does it connect to your FTP/SFTP server? Does it handle your specific setup (shared hosting, NAS, S3-compatible, unusual SSH configs)?
  2. Transfer reliability — large files, many small files, interrupted transfers, server-to-server copies
  3. UI/UX feedback — does the dual-pane workflow feel natural? What's missing?
  4. Performance — how does it compare to what you're using now?
  5. Bug reports — anything weird, crashes, visual glitches

Technical highlights for the Rust crowd

The protocol stack is built on Tokio with a custom async FTP implementation (RFC 959 + RFC 4217 for FTPS). SFTP uses a pure-Rust SSH transport layer. The Slint UI is compiled at build time — no runtime layout engine, no JavaScript bridge.

The entire app binary, including all protocol code, UI, and the transfer engine, is under 8 MB. For comparison, Cyberduck is ~90 MB and Transmit is ~75 MB.

Credential storage uses macOS Keychain directly (not a wrapper), with an optional encrypted vault for syncing server definitions between Macs. The encryption is AES-256-GCM with a passphrase-derived key (Argon2id).


Download

GitHub: https://github.com/GMAC-pl/gmacFTP

Free and open source under GPL-3.0. macOS 11+, Apple Silicon (M-series).

# If you have Homebrew (cask pending review):
# brew install --cask gmacftp

# Or grab the DMG directly:
# https://github.com/GMAC-pl/gmacFTP/releases/latest

I'd be happy to answer any technical questions about the Rust architecture, the Slint integration, the async FTP/SFTP implementation, or anything else. Feedback welcome in the comments or GitHub Issues.

I'm the developer of gmacFTP.

Top comments (0)