A desktop file transfer client for Windows.
Browse local and remote folders side by side, copy files between servers, and keep track of every transfer in one window. FTPeach supports FTP, FTPS, SFTP, and WebDAV, with tabs, saved connections, and an interface available in 27 languages.
Download for Windows · Website · Release notes · Documentation · Report a bug
Made with AI, use at your own risk!
I made FTPeach with a lot of help from AI. I’ve tested it carefully, but please back up files that matter to you.
FTPeach supports Windows 10 and 11, x64.
- Download the installer from the latest release and run it.
- Open FTPeach and enter your server's connection details.
- Browse your folders and drag files to the destination pane. Follow their progress in the transfer queue.
To run FTPeach without installing it, download FTPeach_<version>_x64-portable.zip from the same page, unpack it and start FTPeach.exe. Settings, bookmarks and saved passwords stay in the data folder beside the program, so moving the folder moves everything; set a master password in Settings if saved passwords should work on another computer. What a portable copy leaves on a computer is listed under portable mode.
You can save connections for your next session. With automatic updates enabled, FTPeach checks for updates at startup and daily, downloads them in the background, and installs them on the next launch or when you choose to restart. Update signatures are verified before installation.
The project is in pre-release; see the changelog for changes between versions. macOS and Linux are not currently supported.
- Work side by side. Two independent file panes with tabs, search, and sorting help you find and organize files.
- Move files where you need them. Upload, download, or copy between servers through FTPeach, with drag and drop for everyday operations.
- Stay in control. Run concurrent transfers, pause or cancel jobs, and set speed limits from the transfer queue.
- Use your own editor. Open remote files in an external application and upload your changes back to the server.
- Make it comfortable. Choose from 20 color schemes in light or dark mode, and use the interface in any of 27 languages.
- Keep connections handy. Save server details, protect stored passwords, and optionally add a master password.
Make FTPeach your own with 20 color schemes, from warm Peach and leafy greens to cool blues and neutral grays. Every scheme supports light and dark mode; Peach is the default. Choose yours in Settings > Interface.
Try the color schemes on the website.
| Protocol | Connection security | Resume downloads | Resume uploads |
|---|---|---|---|
| FTP | Unencrypted | Yes | Yes |
| FTPS | Explicit TLS | Yes | Yes |
| SFTP | SSH | Yes | Yes |
| WebDAV | TLS when using HTTPS | Yes | No |
Server-to-server copying is relayed through your computer. Available operations also depend on the server's capabilities and your permissions.
FTPS uses explicit TLS (AUTH TLS); implicit FTPS is not supported. WebDAV uploads are streamed, but interrupted uploads must restart from the beginning. WebDAV downloads resume when the server supports range requests and safely restart otherwise.
For WebDAV, enter a full https:// URL, including the server's WebDAV path. Signing in over unencrypted HTTP requires an explicit opt-in for that connection.
See protocol support for the full compatibility matrix, or networking for proxy and connection settings.
Saved passwords and SSH-key passphrases follow the protection mode selected in settings:
- System protection (default) encrypts secrets for your Windows account, without a master password. Anyone acting as that Windows user can access them.
- Enhanced protection stores secrets in a vault encrypted with a master password. You can optionally enable Windows Hello to unlock it on this computer.
Keep the master password safe: it cannot be recovered, and it remains the recovery method if Windows Hello becomes unavailable.
For SFTP, the default settings require you to confirm the server's key before the first connection can authenticate. Verify the displayed fingerprint with your server administrator before trusting it. FTPeach remembers the approved key and blocks subsequent connections if it changes, pending a new confirmation.
For implementation details, see the security design. To report a vulnerability privately, follow the security policy.
FTPeach uses React and TypeScript for the interface and Rust with Tauri for the desktop application.
Use Windows 10/11 x64 with:
- Node.js 24 and npm;
- Rust installed through rustup, using the pinned MSVC toolchain in rust-toolchain.toml;
- Visual Studio Build Tools with the C++ build tools and Windows SDK;
- the WebView2 Runtime.
The pinned Rust toolchain includes clippy, rustfmt, and rust-analyzer, keeping editor tooling and pull-request checks consistent.
Clone the repository and install JavaScript dependencies:
git clone https://github.com/Smooveemaan/ftpeach.git
cd ftpeach
npm ciStart the desktop app with hot reload:
npm run devThe npm commands below are plain Cargo and Tauri commands; a few that need their own target directory or more than one step go through scripts/cargo.ts.
Run these from the repository root:
| Command | What it does |
|---|---|
npm run dev |
Run the desktop app with hot reload. |
npm run dev:renderer |
Start Vite for browser-only interface work; native operations require the desktop app. |
npm test |
Run TypeScript unit tests and React component tests. |
npm run lint |
Check lint rules, feature boundaries, and TypeScript types. |
npm run format:check |
Check formatting without changing files. |
npm run build |
Build the renderer and check bundle size budgets. |
npm run rust:check |
Lint the backend as it ships, without running tests; a warning fails it. |
npm run rust:test |
Run the Rust tests; ignored ones, such as those that need Docker or live servers, do not run. |
npm run rust:build:release |
Build the native release executable without packaging an installer. |
npm run build:tauri |
Build the production installer and signed update artifacts; requires updater signing credentials. |
npm run check |
Run every check CI runs, including coverage, browser tests, Clippy, licenses, and build checks. |
npm run clean |
Remove generated output, reports, and native build caches; see cleanup options. |
For a local release executable, run npm run build followed by npm run rust:build:release. Installer builds require the signing setup described in updater signing; their output is under %LOCALAPPDATA%\FTPeachBuild\target\release\bundle\nsis.
Install the pinned Chromium browser before running visual tests or the full check suite:
npx playwright install chromium
npm run test:visualVisual tests use a deterministic application fixture with checked-in snapshots for the workspace and dialogs. Review intentional visual changes before updating snapshots with npm run test:visual:update.
To check a change locally, run:
npm run checknpm run check runs every step of the CI checks, comparing coverage with origin/master as
CI does: Rust coverage, Semgrep, npm audit, cargo deny, the Linux build (in Docker), the
language layout audit and packaged smoke included. A whole run takes about an hour. The
installer tests run separately. The end-to-end and live-server suites are closed and run
before each release; see how releases are verified.
See the test guide for individual suites and the contribution guide for review expectations.
Preview the cleanup targets with npm run clean -- -WhatIf. Use npm run clean -- -ArtifactsOnly to remove renderer and website output, coverage and duplication reports, browser test results, the signed test installers, and generated Tauri files while retaining native build caches.
npm run clean also removes native and fuzz build caches, those of packaged smoke and the installer tests among them, including %LOCALAPPDATA%\FTPeachBuild outside the repository. The next build recreates removed output. Both modes preserve node_modules/, the verified libsodium SDK, and private working materials in .local/.
See the script guide for benchmarks, release tooling, and cleanup details.
| If you want to… | Start here |
|---|---|
| Connect, transfer and edit files, or solve a common problem | User guide |
| Understand the code structure | Architecture and frontend architecture |
| Understand connections and transfers | Protocol support, networking, and transfer safety |
| Learn how settings and credentials are handled | Storage and security design |
| Investigate performance | Frontend measurements and benchmarks |
| Work on releases | Updater signing and dependency policy |
The documentation index includes validation reports, IPC permissions, and the workspace layout.
Found a bug or have an idea? Open an issue. For bug reports, include your FTPeach version, Windows version, protocol, and steps to reproduce the problem. Remove passwords and private connection details from logs and screenshots before sharing them.
Bug reports, ideas and translation problems are welcome as issues. FTPeach does not accept pull requests: part of the tests a change has to pass are closed, so a pull request could not be checked here. See CONTRIBUTING.md.
FTPeach is distributed under the Apache License 2.0. See third-party notices for dependency and asset acknowledgments.
Copyright © 2026 Leonid Lozovskii (Smooveemaan).

