Skip to content

FTP FTPS and SFTP

Samuel Costa edited this page Jul 5, 2026 · 2 revisions

FTP, FTPS and SFTP

Adding a remote destination

When adding a destination, pick FTP or SFTP:

Field Notes
Host IP address or hostname.
Port Default 21 for FTP/FTPS, 22 for SFTP.
Username / Password Leave both blank for anonymous FTP login (the app fills in anonymous / anonymous@ automatically — common for embedded FTP servers like homebrew/game-console ftpd's that don't require real credentials).
Use TLS FTP only — enables FTPS (explicit TLS). Not applicable to SFTP, which is always encrypted (it runs over SSH).
Remote folder The path on the server to send files into (created automatically if it doesn't exist, including any subfolders needed — see Folder Sources).

Destination editor — FTP server with host, port, remote folder and TLS option

You can save a server's connection details as a named saved server to reuse across destinations — see Tasks and Destinations.

How transfers talk to the server

  • FTP/FTPS uses FluentFTP.
  • SFTP uses SSH.NET.
  • Before sending, if the task's overwrite mode is anything other than Replace, the app opens one connection per destination, lists the relevant remote folder(s) once, and answers every file's "does it exist / when was it modified" question from that single listing — it does not open a new connection per file. See Overwrite Modes for why this matters and what changed in v3.3.2.
  • Uploads for multiple destinations run in parallel, up to the Max parallel destinations limit in Settings — each concurrent upload naturally uses its own connection, which is normal and expected.

Known server quirks

Some embedded/lightweight FTP servers (notably Luma3DS's built-in ftpd used on 3DS homebrew setups) don't fully match what they advertise:

  • They may list MDTM (get-modified-time) in their FEAT response as if supported, but reply 502 Command not implemented when it's actually issued. The app automatically falls back to reading the modified time from the directory listing (MLSD) instead, so Replace if newer still works correctly on these servers — you don't need to do anything.
  • Recursive directory listing (LIST -R / FtpListOption.Recursive) is intentionally not used anywhere in this app, specifically because of servers like this one — support for it is inconsistent across FTP server implementations, so the app always lists one folder at a time instead.
  • Reported file timestamps from these servers are compared using UTC normalization on both sides (the source file's local timestamp and the server's reported timestamp), so Replace if newer gives correct results regardless of the time zone your computer is set to.

If you hit an FTP server that behaves unexpectedly, these two behaviors (MDTM fallback, no recursive LIST) are usually why other, more permissive clients "just work" while a very strict implementation might not — 1-Click Transfer already accounts for both.

Troubleshooting a slow-feeling FTP transfer

If a transfer feels slow to start (a visible pause before the destination shows any activity), that's almost always the pre-transfer "does this file already exist" check for Replace if newer or Don't replace mode — see Overwrite Modes for how that works and how to avoid it entirely (switch the task to Replace, which skips the check completely).

Clone this wiki locally