<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: GregoryMc86</title>
    <description>The latest articles on DEV Community by GregoryMc86 (@gregorymc86).</description>
    <link>https://dev.to/gregorymc86</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4011341%2Fccbaded6-a253-4820-8df0-d872fe62a796.png</url>
      <title>DEV Community: GregoryMc86</title>
      <link>https://dev.to/gregorymc86</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gregorymc86"/>
    <language>en</language>
    <item>
      <title>I built a macOS FTP client entirely in Rust — no Electron, no webview</title>
      <dc:creator>GregoryMc86</dc:creator>
      <pubDate>Wed, 01 Jul 2026 19:41:31 +0000</pubDate>
      <link>https://dev.to/gregorymc86/i-built-a-macos-ftp-client-entirely-in-rust-no-electron-no-webview-2a8i</link>
      <guid>https://dev.to/gregorymc86/i-built-a-macos-ftp-client-entirely-in-rust-no-electron-no-webview-2a8i</guid>
      <description>&lt;p&gt;Hi dev.to 👋&lt;/p&gt;

&lt;p&gt;I'm building &lt;strong&gt;&lt;a href="https://github.com/GMAC-pl/gmacFTP" rel="noopener noreferrer"&gt;gmacFTP&lt;/a&gt;&lt;/strong&gt; — a dual-pane FTP/FTPS/SFTP client for macOS, written entirely in Rust. The UI runs on &lt;a href="https://slint.dev" rel="noopener noreferrer"&gt;Slint&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;This is an &lt;strong&gt;early development preview&lt;/strong&gt; (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.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;So I built one in Rust.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transfer engine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rust + Tokio (async FTP/FTPS/SFTP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GUI framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Slint 1.x with FemtoVG renderer (wgpu → Metal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Credential storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;macOS Keychain + encrypted local vault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cross-device sync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Optional encrypted server list synchronization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bundle size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~7.5 MB DMG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero. No browser engine. No frameworks to install.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;




&lt;h2&gt;
  
  
  What works right now
&lt;/h2&gt;

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

&lt;p&gt;The DMG is signed with an Apple Developer ID and notarized by Apple — opens cleanly with no Gatekeeper warnings.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I need help with
&lt;/h2&gt;

&lt;p&gt;This is a &lt;strong&gt;development preview&lt;/strong&gt;. Expect rough edges. I'm looking for:&lt;/p&gt;

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




&lt;h2&gt;
  
  
  Technical highlights for the Rust crowd
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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).&lt;/p&gt;




&lt;h2&gt;
  
  
  Download
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/GMAC-pl/gmacFTP" rel="noopener noreferrer"&gt;https://github.com/GMAC-pl/gmacFTP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Free and open source under &lt;strong&gt;GPL-3.0&lt;/strong&gt;. macOS 11+, Apple Silicon (M-series).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# If you have Homebrew (cask pending review):&lt;/span&gt;
&lt;span class="c"&gt;# brew install --cask gmacftp&lt;/span&gt;

&lt;span class="c"&gt;# Or grab the DMG directly:&lt;/span&gt;
&lt;span class="c"&gt;# https://github.com/GMAC-pl/gmacFTP/releases/latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm the developer of gmacFTP.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>macos</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
