Last Updated: 5 October 2026 Version: v4.2.2
Note: AeroFTP organizes integrations on three tiers:
- 7 transport protocols (FTP, FTPS, SFTP, WebDAV, S3, Azure Blob, OpenStack Swift) - native wire-level support;
- 26 native provider integrations with dedicated OAuth2 / API key / SDK code paths (Google Drive, Dropbox, OneDrive, MEGA, Proton Drive, Box, pCloud, Filen, Zoho WorkDrive, Internxt, kDrive, Koofr, Jottacloud, FileLu, Yandex Disk, OpenDrive, 4shared, Drime, Backblaze B2, GitHub, GitLab, Immich, ImageKit, Uploadcare, Cloudinary, Twake Drive);
- 47 pre-configured presets in the Discover catalog, generated into
PROVIDER-INVENTORY.json: S3-compatible (Amazon S3, Google Cloud Storage, Cloudflare R2, Backblaze B2 S3, Wasabi, DigitalOcean Spaces, IDrive e2, Filebase, MEGA S4, FileLu S5, Filen Desktop S3, Storj, S3Drive, Quotaless, MinIO, Oracle Cloud, Alibaba OSS, Tencent COS, Yandex Object Storage, IBM Cloud Object Storage), WebDAV-compatible (Nextcloud, TAB.DIGITAL, Felicloud, Seafile, InfiniCLOUD, CloudMe, DriveHQ, Jianguoyun, Mail.ru Cloud, Koofr WebDAV, FileLu WebDAV, Yandex Disk WebDAV, OpenDrive WebDAV, pCloud WebDAV, 4shared WebDAV, Quotaless WebDAV, MEGAcmd WebDAV, Filen Desktop WebDAV), FTP, FTPS and SFTP (Hetzner Storage Box, SourceForge, FileLu FTP, FileLu FTPS), MEGA, Blomp (Swift) and the media services (Cloudinary, ImageKit, Uploadcare).The feature matrix tables below cover the core production set. GitHub, GitLab, Immich, ImageKit, Uploadcare, and Cloudinary have repository / media-specific semantics and are documented inline in their dedicated sections.
In addition to the cloud transports above, AeroFTP v4.1.0 previews AeroShare, an end-to-end-encrypted peer-to-peer user-to-user transfer path built on iroh 1.0. Peers discover each other through the Mainline DHT and connect over federated relays, with no central AeroFTP server in the path. It is a Beta preview in v4.1.0.
AeroFTP can open attached portable devices (phones, cameras) that speak
MTP (Linux libmtp) or WPD (Windows) even when the OS never assigns a
drive letter. They appear under PLACES → Portable devices. You can also
save a device as a My Servers profile (Add Services → Devices): a green
attach indicator shows when that phone is plugged in, and click-to-connect
reopens a session at the saved default remote (and local) path. Identity uses a
stable device fingerprint (mtp:serial=… preferred, else vid/pid + model),
not a USB bus address.
CLI: aeroftp-cli --profile "Sony backup" ls (and other profile-backed verbs)
resolve the same fingerprint against currently attached devices.
| Capability | Support |
|---|---|
| Discover attached devices | Yes (when the OS backend can see them) |
| Browse storages and folders | Yes (virtual path: /Storage/…) |
| Copy whole files to/from device | Yes (progress callbacks; single transfer slot) |
| Disconnect / release session | Yes |
| Dual-panel local ↔ device | Yes (other panel stays local FS) |
| Saved My Servers device profiles | Yes (fingerprint match, green attach, click connect) |
CLI --profile open when attached |
Yes |
These are properties of MTP/WPD and common device firmware. AeroFTP will not claim them as "coming soon" for this transport:
| Limit | Reality |
|---|---|
| No real mount / no drive letter | Device is not a block filesystem |
| No random access / range download | Object get/send is stream-oriented |
| No honest resume | Interrupted transfer restarts the whole object |
| No multipart upload | No S3-style part commit |
| Weak concurrency | Default max_file_slots = 1 |
| Metadata best-effort | Size/mtime often missing or wrong |
| No delta / rsync | No block-checksum protocol on the wire |
| Exclusive USB claim | Only one program can hold the phone over MTP at a time |
Exclusive claim (on-demand): only one program can hold the phone over MTP at a time. A saved device profile does not claim the USB until you Connect. On Linux, Connect soft-releases the system gvfs/Nautilus MTP mount (then opens libmtp) so you get the session without a manual unmount; disconnect drops only AeroFTP and the desktop may quietly re-automount. Open the door for the session, close it when you leave, no lasting fight with the file manager. If open still fails, re-toggle File Transfer on the phone and retry.
macOS is out of scope until a Mac station and backend exist.
- Device gone / not attached: reconnect the USB cable, unlock, enable File
Transfer mode, then open again from PLACES or My Servers (or retry CLI
--profile). - Open fails while cable is connected: another program likely holds the exclusive claim; close the system file manager and retry.
- Unsupported op: the portable device does not support that operation (MTP limitation).
- Transfer cancelled: incomplete objects on the device are removed when the API allows.
| Protocol | Encryption | Auth Method | Credential Storage | Host Verification |
|---|---|---|---|---|
| FTP | None | Password | Universal Vault | N/A |
| FTPS | TLS/SSL (Explicit/Implicit) | Password | Universal Vault | TLS Certificate |
| SFTP | SSH (hybrid: russh + ssh2/SCP) | Password / SSH Key | Universal Vault | TOFU + known_hosts |
| WebDAV | HTTPS | Password (Basic + Digest RFC 2617) | Universal Vault | TLS Certificate |
| S3 | HTTPS (plain HTTP to an endpoint off this machine only with the profile's explicit consent) | Access Key + Secret | Universal Vault | TLS Certificate |
| Google Drive | HTTPS | OAuth2 PKCE | Universal Vault | TLS + CSRF State |
| Dropbox | HTTPS | OAuth2 PKCE | Universal Vault | TLS + CSRF State |
| OneDrive | HTTPS | OAuth2 PKCE | Universal Vault | TLS + CSRF State |
| MEGA.nz | Client-side AES | Password (Native API or MEGAcmd) | secrecy (zero-on-drop) | E2E Encrypted |
| Box | HTTPS | OAuth2 PKCE | Universal Vault | TLS + CSRF State |
| pCloud | HTTPS | OAuth2 PKCE | Universal Vault | TLS + CSRF State |
| Azure Blob | HTTPS | Shared Key HMAC / SAS | Universal Vault | TLS Certificate |
| 4shared | HTTPS | OAuth 1.0 (HMAC-SHA1) | Universal Vault | TLS Certificate |
| Filen | Client-side AES-256-GCM | Password (PBKDF2) | secrecy (zero-on-drop) | E2E Encrypted |
| Zoho WorkDrive | HTTPS | OAuth2 PKCE | Universal Vault | TLS + CSRF State |
| Internxt Drive | Client-side AES-256-CTR | Password (PBKDF2 + BIP39) | secrecy (zero-on-drop) | E2E Encrypted |
| kDrive | HTTPS | API Token (Bearer) | Universal Vault | TLS Certificate |
| Koofr | HTTPS | OAuth2 PKCE | Universal Vault | TLS + CSRF State |
| FileLu | HTTPS | API Key | Universal Vault | TLS Certificate |
| Yandex Disk | HTTPS | OAuth2 Token | Universal Vault | TLS Certificate |
| OpenDrive | HTTPS | Session (Username/Password) | Universal Vault | TLS Certificate |
| Jottacloud | HTTPS | Bearer Token (auto-refresh 60s pre-expiry) | Universal Vault | TLS Certificate |
| GitHub | HTTPS | PAT / Device Flow (PEM keys vaulted, AES-256-GCM) | Universal Vault | TLS Certificate |
| Immich | HTTPS | API Key (x-api-key header) |
Universal Vault | TLS Certificate |
Tables below group OAuth providers (Google Drive · Dropbox · OneDrive · Box · pCloud · Zoho WorkDrive · Koofr · Jottacloud · Yandex Disk) under a single "OAuth Providers" column when the security semantics are identical. Protocols with distinctive semantics (E2E encryption, OAuth 1.0, etc.) keep dedicated columns.
| Feature | FTP | FTPS | SFTP | WebDAV | S3 | OAuth Providers | MEGA | Box | pCloud | Azure | 4shared | Filen | Internxt | kDrive | FileLu | Yandex | OpenDrive |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Insecure Warning | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| TLS/SSL | No | Yes | - | Yes | Yes | Yes | - | Yes | Yes | Yes | Yes | - | - | Yes | Yes | Yes | Yes |
| SSH Tunnel | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Host Key Check | - | - | TOFU | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| PKCE Flow | - | - | - | - | - | Yes | - | Yes | Yes | - | - | - | - | - | - | - | - |
| Digest Auth (RFC 2617) | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Ephemeral Port | - | - | - | - | - | Yes | - | Yes | Yes | - | Yes | - | - | - | - | Yes | - |
| OAuth 1.0 Flow | - | - | - | - | - | - | - | - | - | - | Yes | - | - | - | - | - | - |
| E2E Encryption | - | - | - | - | - | - | Yes | - | - | - | - | Yes | Yes | - | - | - | - |
| Memory Zeroize | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Operation | FTP | FTPS | SFTP | WebDAV | S3 | Google Drive | Dropbox | OneDrive | MEGA | Box | pCloud | Azure | 4shared | Filen | Zoho WD | Internxt | kDrive | FileLu | Yandex | OpenDrive |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| List | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Upload | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Download | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Delete | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Rename | Yes | Yes | Yes | Yes | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | Yes** | Yes | Yes | Yes | Yes | Yes*** | Yes | Yes | Yes |
| Mkdir | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Chmod | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
| Stat | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Share Link | AeroCloud | AeroCloud | AeroCloud | AeroCloud | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | No | Yes | Yes | Yes |
*S3 rename = copy+delete **Azure rename = copy+delete ***kDrive rename = move to same parent with new name
AeroFTP preserves empty folders with a zero-byte object whose key ends in /,
tagged application/x-directory. This follows the
AWS folder convention.
Markers remain when a folder gains children, preserving the explicitly created
folder if its children are later removed.
The Filen Desktop S3 preset (filen-desktop-s3) does not write this marker.
Filen Desktop 3.x serves the bucket with rclone serve s3, which stores the
empty PUT key/ as a zero-byte file and then answers 500 for a folder created
inside it. Uploading a file under the prefix creates the folders. An empty
folder made with mkdir on that preset is not kept until a file is uploaded
into it. A file that already has the folder's name is left in place and the
mkdir says so. s3_dir_markers=false on any other S3 profile skips the marker
the same way, and s3_dir_markers=true writes it even on the Filen preset.
A download of a file this session just uploaded waits up to 30 seconds when
the first GET answers 404, and returns as soon as the object is visible.
Filen Desktop keeps the object in its write cache for about 5 seconds
(--vfs-write-back 5s) and then copies it onto Filen.
A file that is already gone from the account but still sits in that cache is
invisible to HEAD, so an upload into its name still answers 500. That 500 is
the upload itself. Delete the stale file in Filen, and clear it from the
Filen Desktop cache, before trying again.
S3 profiles exported to rclone enable directory_markers = true. For older
exports or independently configured remotes, enable that setting in the S3
backend section or pass --s3-directory-markers:
rclone purge "remote:bucket/scratch-folder" --s3-directory-markersThis command deletes the specified folder and its contents. With rclone 1.74.0
and the option disabled, purging a folder with its own marker constructs a key
ending in //: MinIO returns an error, while AWS S3 and Cloudflare R2 return
success for that absent key and leave the actual marker behind. All three were
verified live; the option removes the marker correctly on each. A successful exit without the
option does not establish that the folder was removed. See
rclone's S3 directory marker setting.
AeroFTP recursive deletion removes the folder's marker and children. An object with the same name without the trailing slash is a distinct file and is preserved unless HEAD identifies it as a zero-byte directory marker used by a gateway. A denied or unsupported HEAD preserves that separate key and does not block deletion inside the folder's prefix. Errors from individual DELETE requests are reported even when the server does not support batch deletion. A fresh listing after recursive deletion also reports an error if objects remain, including children a gateway only exposes after a conflicting object has been deleted.
Backblaze S3 exports use rclone's provider = Other with the B2 S3 endpoint;
Backblaze is not a supported S3 provider name in rclone 1.74.0. Native B2 is
a separate backend. For existing buckets with credentials that cannot create
buckets, rclone uploads or mkdir may also need --s3-no-check-bucket.
| Operation | FTP | FTPS | SFTP | WebDAV | S3 | GDrive | Dropbox | OneDrive | MEGA | Box | pCloud | Azure | 4shared | Filen | Zoho WD | Internxt | kDrive | FileLu | Yandex | OpenDrive |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Server Copy | - | - | - | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | Yes | - | Yes | Yes† | Yes | - |
| Remote Search | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Storage Quota | - | - | Yes | Yes | - | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| File Versions | - | - | - | - | - | Yes | Yes | Yes | - | Yes | Yes | - | - | - | Yes | - | - | - | - | - |
| Thumbnails | - | - | - | - | - | Yes | Yes | Yes | - | Yes | Yes | - | - | - | - | - | - | - | - | - |
| Permissions | - | - | - | - | - | Yes | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - |
| Locking | - | - | - | - | - | - | - | - | - | Yes‡ | - | - | - | - | - | - | - | - | - | - |
| Resume Transfer | Yes | Yes | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - |
| Resumable Upload | - | - | - | - | Yes | Yes | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - |
| Workspace Export | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Change Tracking | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| MLSD/MLST | Yes | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| SITE Commands§ | Yes | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Speed Limit | - | - | - | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - |
| Import Link | - | - | - | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - |
| Multipart Upload | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Remote URL Fetch | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | Yes | - | - |
| File Password | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | Yes | - | - |
| Privacy Toggle | - | - | - | - | - | - | - | - | - | - | - | - | Yes | - | - | - | - | Yes | - | Yes |
| Tags | - | - | - | - | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - |
| Watermark | - | - | - | - | - | - | - | - | - | Yes‡ | - | - | - | - | - | - | - | - | - | - |
| Comments | - | - | - | - | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - |
| Collaborations | - | - | - | - | - | - | - | - | - | Yes | - | - | - | - | - | - | - | - | - | - |
†FileLu Server Copy = server-side clone (filelu_clone_file)
‡Box Enterprise only (Business/Enterprise plan required)
§SITE <command> through the open session (Connection > SITE Command..., aeroftp-cli site, :site in the TUI): the reply is shown whole with its code; a command is never sent twice; arguments and replies are not logged. A saved profile can keep named templates (aeroftp-cli site-template, site --template, :site @name): a password position is a {name:secret} hole and is never stored.
Which digests a backend can hand back without downloading the file, and which it cannot. AeroFTP never downloads a remote file in order to hash it: a digest either comes from metadata the backend already holds (an S3 ETag, a Drive file.hashes field, an ownCloud oc:checksums property) or from work the server does on its own disk (sha256sum over an SSH exec channel). Where a backend has nothing to offer, the Properties → Checksum tab says so instead of offering a button that cannot succeed.
Local files are different: AeroFTP reads them itself, so MD5, SHA-1, SHA-256, SHA-512 and BLAKE3 are all available for anything on your own disk, on every platform.
A backend's own scheme keeps its own name. Dropbox's content_hash is a SHA-256 over the SHA-256 of each 4 MiB block and GitHub's is a git blob SHA-1; neither equals a plain digest of the same bytes, so they are reported under their own labels rather than aliased onto SHA-256 and SHA-1, where they would silently fail every comparison.
| Backend | Server-side digests | Notes |
|---|---|---|
| FTP | MD5, SHA-1, SHA-256, SHA-512, CRC32 (negotiated) | Depends on what the server advertises in FEAT: HASH (algorithm selected per request with OPTS HASH, from the list the server gives), or the older XMD5 / XSHA1 / XCRC. A server advertising none offers no digest. |
| FTPS | MD5, SHA-1, SHA-256, SHA-512, CRC32 (negotiated) | Depends on what the server advertises in FEAT: HASH (algorithm selected per request with OPTS HASH, from the list the server gives), or the older XMD5 / XSHA1 / XCRC. A server advertising none offers no digest. |
| SFTP | SHA-256 | Computed by the remote host with sha256sum over an SSH exec channel: the bytes are read on the server, never sent to us. Omitted if the host has no sha256sum. |
| WebDAV | SHA-1, MD5, Adler-32 (negotiated) | Only ownCloud and Nextcloud publish the oc:checksums property, and only for files uploaded by a client that sent one. Every other WebDAV server omits it. |
| S3 | MD5 | The ETag is the object MD5 only for single-part objects that are not SSE-KMS or SSE-C encrypted. A multipart ETag carries a -N suffix and is omitted rather than guessed. An SSE-KMS or SSE-C ETag can still be 32 hex characters and then passes the same shape check as a real digest, so a reported ETag is advisory for such an object. |
| Azure Blob | - | |
| Swift | - | |
| Google Drive | MD5, SHA-1, SHA-256 | Native Google Workspace documents have no byte stream and therefore no digest. |
| OneDrive | SHA-1, SHA-256, QuickXorHash | Which of the three is present depends on the account: personal OneDrive publishes QuickXorHash, business and SharePoint typically SHA-1 and SHA-256. |
| Dropbox | Dropbox content hash | Not a plain file digest: a SHA-256 over the SHA-256 of each 4 MiB block. Comparable only against another Dropbox content hash. |
| Box | SHA-1 | |
| pCloud | MD5, SHA-1, SHA-256 | |
| Yandex Disk | MD5 | |
| Koofr | Koofr hash | Koofr's own opaque hash. Comparable only against another Koofr hash. |
| Backblaze B2 | SHA-1 | Large files and uploads B2 recorded as unverified: carry no usable contentSha1; those are omitted. |
| GitHub | Git blob SHA-1 | The git blob SHA-1, computed over blob <len>\0 + content, so it does not match a plain SHA-1 of the same file. |
| GitLab | - | |
| Immich | SHA-1 | The asset checksum Immich records at upload time. |
| Twake Drive | MD5 | |
| MEGA | - | |
| Proton Drive | - | |
| Filen | - | |
| Internxt Drive | - | |
| Zoho WorkDrive | - | |
| kDrive | - | |
| Jottacloud | - | |
| Drime | - | |
| FileLu | - | |
| 4shared | - | |
| OpenDrive | - | |
| Google Photos | - | |
| ImageKit | - | |
| Uploadcare | - | |
| Cloudinary | - | |
| MTP | - | |
| Local directory | MD5, SHA-1, SHA-256, SHA-512, BLAKE3 |
Under a crypt overlay (AeroCrypt or rclone crypt interop) the server stores ciphertext, so a server-side digest covers the encrypted bytes and will not match a hash of your local plaintext file. That is not a failure, it is what encryption means: the digest is still a valid answer to "has the stored object changed", and AeroFTP labels it as covering the stored ciphertext wherever it shows it.
For an integrity check against your local files inside an overlay, use aeroftp-cli crypt verify, which stream-decrypts the remote objects (without writing plaintext to disk) and compares the decrypted content.
The sync engine never uses these digests: supports_checksum() stays false for an overlay, precisely so a comparison of ciphertext-vs-plaintext hashes cannot mark every unchanged file as different.
| Protocol | Link | Password | Expiry | Permissions | Notes |
|---|---|---|---|---|---|
| FTP/FTPS/SFTP | AeroCloud | - | - | - | Requires public_url_base config |
| WebDAV/Nextcloud | Native | Auto-gen | Days | - | OCS API, password auto-generated if server enforces it |
| S3 | Presigned | - | Yes (default 1h, max 7d) | - | AWS Signature V4 |
| Google Drive | Native | - | - | view/comment/edit | Permanent "anyone with link" |
| Dropbox | Native | Pro+ | Pro+ | view/edit | Password and expiry require Professional plan or higher |
| OneDrive | Native | Personal | Yes | view/edit | Password only on Personal accounts, not Business |
| MEGA.nz | Native | - | - | - | Native API (recommended) or MEGAcmd bridge |
| Box | Native | Paid | Paid | view/edit | Password and expiry require paid Box plan |
| pCloud | Native | Premium | Premium | - | Password and expiry require pCloud Premium |
| Filen | Native | Yes (Argon2id) | Presets (1h-30d) | - | E2E encrypted, password hashed client-side |
| Zoho WorkDrive | Native | Yes | Yes | view/edit | Full advanced options on all plans |
| kDrive | Native | Paid | Paid | view/edit | Password and expiry require paid Infomaniak plan |
| Jottacloud | Native | - | - | - | Basic share only (API limitation) |
| Drime | Native | Yes | Yes | view/edit | Full advanced options |
| Koofr | Native | - | - | - | Basic share link |
| FileLu | Native | - | - | - | Makes file public, returns share URL |
| Yandex Disk | Native | - | - | - | Publish/unpublish via REST API |
| OpenDrive | Native | - | Yes (default 1 year) | - | Expiring share links |
| MEGA S4 | Presigned | - | Yes (max 7d) | - | S3-compatible presigned URLs, EU, Canada and Asia-Pacific endpoints |
| Azure Blob | SAS | - | Yes (default 7d) | - | Service SAS with HMAC-SHA256 |
| GitHub | URL | - | - | - | Permanent blob/release URL |
CLI: aeroftp-cli link --profile "name" /path [--password pw] [--expires 7d] [--permissions edit]
AeroCloud syncs a local folder with a folder of a saved server profile: the setup picks a profile, and every connection detail (credentials, OAuth app and tokens, bucket, region, endpoint, container, key file, TLS mode) comes from that profile. The remote base is the folder of the profile's crypt overlay when one is bound, otherwise the profile's starting folder, otherwise the server root; the AeroCloud folder is created inside it.
The setup offers a protocol only after its profile connect path has been checked live (connect, crypt overlay, list of the base). Last check: 2026-10-15.
| Protocol | Offered in setup | Live check | Sync maturity | Notes |
|---|---|---|---|---|
| FTP | Yes | Passed | Beta | Reliable timestamps need MFMT on the server; the profile's TLS mode is honoured |
| FTPS | Yes | Passed | Beta | Same MFMT requirement |
| SFTP | Yes | Passed | Stable | Key file and passphrase from the profile |
| WebDAV | Yes | Passed | Stable | |
| S3 (and S3-compatible presets) | Yes | Passed | Stable | Bucket, region and endpoint from the profile or its preset |
| Azure Blob | Yes | Passed | Stable | Container from the profile |
| Backblaze B2 (native API) | Yes | Passed | Stable | Bucket from the profile |
| MEGA | Yes | Passed | Beta | Native client by default; MEGAcmd mode needs the daemon running |
| Filen | Yes | Passed | Beta | End-to-end encryption makes sync slower |
| Internxt | Yes | Passed | Beta | End-to-end encryption makes sync slower |
| kDrive | Yes | Passed | Stable | Drive ID from the profile |
| Koofr | Yes | Passed | Stable | |
| OpenDrive | Yes | Passed | Stable | |
| FileLu | Yes | Passed | Beta | Changes detected by hash |
| ImageKit | Yes | Passed | Beta | Media-focused service |
| Uploadcare | Yes | Passed | Beta | Media-focused service |
| Cloudinary | Yes | Passed | Beta | Cloud name from the profile |
| Yandex Disk | Yes | Passed | Beta | OAuth tokens of the profile, or a typed token |
| Dropbox | Yes | Passed | Stable | OAuth app and per-profile tokens |
| OneDrive | Yes | Passed | Stable | OAuth app and per-profile tokens |
| Box | Yes | Passed | Beta | Stricter API rate limits |
| pCloud | Yes | Passed | Beta | Region detected at authorization |
| Zoho WorkDrive | Yes | Passed | Beta | Region from the profile |
| Google Drive | Not yet | Pending | Stable | Same path as Dropbox and OneDrive; waits for a check with a valid token |
| Jottacloud | Not yet | Pending | Stable | Waits for a check with a valid login token |
| 4shared | Not yet | Pending | Alpha | Waits for a check with a valid token |
| Proton Drive | Not yet | Not checked | No profile checked yet | |
| Twake Drive | Not yet | Not checked | No profile checked yet | |
| GitHub, GitLab, Swift, Immich, Drime, Google Photos, MTP | No | Not supported by AeroCloud |
Crypt overlays: rclone-crypt profiles passed the live check. Native AeroCrypt profiles need a check in the running app: a test build derives AeroCrypt keys with reduced Argon2 parameters, so the automated check cannot open a real vault.
- Local changes travel as soon as the watcher reports them (after its debounce and the watcher cooldown). Only the changed paths are synced: each one is compared with the last sync's record on disk first, and the remote is asked about it (one lookup per path, for conflict detection) only when it changed locally. A local delete reaches the remote only when the pair's direction and delete setting allow it, and a local rename moves the remote copy when the remote can rename it, instead of uploading it again. Nothing lists the remote folder for a local change.
- Remote changes made on another device travel with the next full scan, which lists the remote folder. A full scan runs at startup (when that option is on), on Sync now, and at the sync interval. A provider may declare a minimum interval between two full scans; the pair then scans at the larger of the two. Earlier versions often delivered remote changes sooner, but only because every local change triggered a full rescan of the remote folder.
- A full scan also runs as a fallback when the watcher reports that it lost events, when more than 500 changed paths would each need a remote lookup, or when the
.aeroignorerules change. When the provider's minimum interval has not elapsed, the fallback waits for it, and the changes the watcher did report are still synced one by one in the meantime. - A local file whose remote copy is gone is left alone until the next full scan: a delete coming from the remote side is decided by the full scan and its safety gate, never by a single lookup.
This section explains what "privacy" means in practice for each provider that exposes per-item visibility controls, and what AeroFTP's Set as Private / Set as Public actions actually do at the API level. See also the Privacy Toggle row in the Advanced Operations matrix.
When evaluating how private your data is on a given provider, the following independent aspects all matter:
- Encryption at rest: whether the provider can read your files, or whether the encryption keys never leave your device (zero-knowledge / E2E). AeroFTP's MEGA, Filen, and Internxt integrations are end-to-end encrypted; all the others store cleartext server-side.
- Default visibility on create: whether a newly-created file or folder is private by default, hidden, or world-accessible. Some providers (notably 4shared, designed around community sharing) default to public.
- Granular per-file / per-folder visibility control: whether you can toggle individual items between visibility levels after creation, and how many levels are available (binary public/private vs three-level public/hidden/private).
- Share-link semantics: whether shared links can be password-protected, time-limited, and scoped (view / download / edit). See the Share Link Support matrix above.
- IP-level access controls and audit logs: whether the provider exposes IP allow/deny lists and access logs (mostly an enterprise feature on Box / Zoho WorkDrive).
- AeroVault overlay: AeroFTP's built-in encrypted container format (AES-256-GCM-SIV + Argon2id, see "Client-Side Encryption" below). Storing an
.aerovaultfile on any provider makes that provider's per-item privacy semantics irrelevant for the actual data, since the underlying provider only ever sees opaque ciphertext.
OpenDrive's REST API exposes three documented visibility levels, surfaced as RemoteEntry.permissions in AeroFTP and visible in the file Properties dialog (Permissions tab) and the right-click context menu:
| Level | Meaning | API value |
|---|---|---|
private |
Owner-only; no public link works. | Access=0 |
public |
Anyone with the link can access; item is searchable on OpenDrive. | Access=1 |
hidden |
Accessible by direct link only; not searchable. | Access=2 |
The context menu actions Set as Private and Set as Public call file/access.json and folder/setaccess.json (with with_child_files=true for folders, so children inherit the new state). The inapplicable action is hidden, not greyed out, so right-clicking a private item shows only Set as Public and vice versa. When the current state is hidden, both actions are shown.
Set as Private and Set as Public are the simple binary toggles available directly from the context menu. A separate three-level chooser (Public / Private / Hidden) is reachable via the Privacy... entry on the same menu and via the Properties dialog. The richer multi-axis flags (folder_public_upl, folder_public_display, folder_public_dnl) accepted by folder/create.json are not exposed on folder/setaccess.json and therefore cannot be changed after creation; they only apply when a new folder is being created.
Default visibility on create follows the OpenDrive account setting (typically hidden).
OpenDrive REST API vs WebDAV: OpenDrive enforces per-IP rate limits on its REST API (session/login.json and related endpoints) that can lead to temporary IP blacklisting under heavy or repeated authentication attempts. The WebDAV endpoint (https://webdav.opendrive.com) is more permissive in this regard. If you see authentication failures that resolve only after waiting several minutes, switching to the WebDAV preset (also available in AeroFTP) is a workable fallback. The reverse trade-off applies for per-item privacy controls, which are only available on the REST API path.
4shared is community-oriented and creates files and folders as public by default. The Set as Private / Set as Public actions toggle the owner_only flag on the REST API and surface in the right-click menu (only the inapplicable action is hidden). 4shared has no hidden level; visibility is binary.
The Quick Connect "Default privacy" toggle for 4shared lets you flip the default to private so that uploads no longer land in 4shared's public catalog.
FileLu exposes a binary only_me flag per file (private / public). Toggling this is the Set as Private / Set as Public action; the inapplicable action is hidden. Folders carry a separate Folder Settings dialog (FileDrop for anonymous uploads, Public Folder for shared catalog membership) and an optional per-file or per-folder password. See "FileLu Special Features" below for the full surface.
Both providers are zero-knowledge end-to-end encrypted: visibility is implicitly private at all times since the provider cannot read the cleartext. Public sharing is opt-in, file-by-file, by generating a share link. Internxt additionally encrypts file names; Filen encrypts both content and file names.
MEGA is end-to-end encrypted; the provider cannot read your data. Per-item privacy is binary: an item is private unless you mint a public link (which embeds the decryption key in the URL fragment). The MEGAcmd bridge has the same semantics; the AeroFTP MEGAcmd preset is a path-based wrapper that delegates to the native MEGA CLI.
These providers do not expose a per-item public/private toggle in the same shape; their privacy model is anchored to share links (Share Link Support matrix above) and, on Box and Zoho WorkDrive, to enterprise access policies (Box Enterprise: watermarks, folder locks, collaborations; Zoho: team labels). On Google Drive, the closest analog is the starred flag plus the granular share permissions (view / comment / edit) settable per-collaborator.
Several providers reject filenames that contain characters their storage layer treats as reserved, which previously surfaced as a silent rename or upload failure. AeroFTP handles this in two ways depending on the provider:
-
Reversible encoding (Box, Dropbox, Jottacloud, OpenDrive): a filename containing a reserved character is transparently encoded before it reaches the provider and decoded back when the entry is listed, so the name you see in AeroFTP is always the original. The scheme is a faithful port of the rclone
lib/encodermapping (fullwidth substitutes for the reserved set, control-picture substitutes for control characters, aQuoteRuneescape for the collision case, and position-dependent rules for a trailing space or a whole-name dot), and is property-tested so thatdecode(encode(name)) == nameover tens of thousands of generated cases per provider. The reserved set is per provider (for example Dropbox and Box reserve\, Jottacloud reserves" * : < > ? | %, OpenDrive reserves" * : < > ? \ |); control characters are always encoded. -
Clear rejection (control-character-only providers): where a provider only forbids control characters and a reversible mapping would add no value, the operation fails with a clear, localized error naming the offending character rather than silently dropping the file.
The encode/decode runs once at the provider boundary, so it applies uniformly across the GUI, every CLI command, CLI sync and benchmark, the transfer engine and the session manager. No setting controls it; the behavior is always on.
FileLu exposes privacy and management features beyond generic file operations:
| Feature | API Endpoint | Tauri Command | Notes |
|---|---|---|---|
| File Password | /file/set_password |
filelu_set_file_password |
Set or remove password on any file |
| Privacy Toggle | /file/only_me |
filelu_set_file_privacy |
Toggle private (only-me) or public visibility |
| Server Clone | /file/clone |
filelu_clone_file |
Duplicate file server-side; returns share URL |
| Folder Password | /folder/set_password |
filelu_set_folder_password |
Requires fld_token from folder listing |
| Folder Settings | /folder/setting |
filelu_set_folder_settings |
FileDrop (anonymous uploads) + Public Folder |
| List Trash | /files/deleted |
filelu_list_deleted |
Returns deleted files with timestamps |
| Restore File | /file/restore |
filelu_restore_file |
Restore by file_code |
| Permanent Delete | /file/remove |
filelu_permanent_delete |
Bypass trash, irrecoverable |
| Remote URL Upload | /upload/url |
filelu_remote_url_upload |
FileLu fetches file from URL server-side |
Three image / media-CDN integrations now share a dedicated tier in IntroHub Discover and CrossProfile. They use the standard StorageProvider trait for list / upload / download / delete / mkdir / rename, and add CDN-specific metadata (transformation URLs, public IDs, version history) on top.
| Capability | ImageKit | Uploadcare | Cloudinary |
|---|---|---|---|
| Shipped | v3.7.2 (23rd protocol) | v3.7.2 (24th protocol) | v3.7.4 (25th protocol) |
| Auth | Private key (HTTP Basic) | Public + Secret key | Cloudname + API key + secret |
| REST endpoint | api.imagekit.io |
api.uploadcare.com (REST) + upload.uploadcare.com (multipart) |
api.cloudinary.com/v1_1/{cloud_name}/ |
| Free tier | 20 GB media + 20 GB BW/month | 1 GB media + 5 GB BW/month | 25 GB / 25k transformations / 25 GB BW (free plan) |
| Folder semantics | Native folders | Cursor-based listing, store-once mapped to directory model | Asset folders (paid) + tag-based pseudo-folders (all plans) |
| Listing | /files with type=all, null_to_default deserializer |
Cursor pagination | /resources/by_asset_folder and /folders |
| Upload path | /files/upload (multipart) |
/base/ (multipart) + /files/{uuid}/storage/ to commit |
/resources/{type}/upload |
| CDN transformations | Passthrough URL parameters | Effects pipeline | URL-based transformations (f_auto, q_auto, etc.) |
| Used as | Media-CDN + storage | EU-friendly media storage | Image / video CDN + AI media services |
Activity Log "Authenticated as ..." now renders public account identifiers (ImageKit URL endpoint, Uploadcare project, Cloudinary cloudname) in the clear instead of being mis-masked as a 3-char prefix; the credential masker detects
https://...and returnshost + pathnameunmasked.
Nextcloud-compatible WebDAV stacks share a single backend (WebDAV + OCS) and ship as discrete presets so users see provider-specific branding, signup links, and trust signals in Discover.
| Preset | Status | Notes |
|---|---|---|
| Nextcloud | Stable | Self-hosted WebDAV + OCS, auto-discovery of /remote.php/dav/files/{username}/ (v3.5.0) |
| Felicloud | Stable | EU-based Nextcloud SaaS (v3.1.6), share links + trash via OCS API |
| TAB.DIGITAL | Stable | EU / GDPR Nextcloud SaaS (v3.7.4), 8 GB free, OCS badge, Felicloud-parity Edit form, healthCheckUrl preset |
| Jianguoyun | Stable | China-based WebDAV |
| InfiniCLOUD | Stable | Japan-based Nextcloud-derivative, 25 GB free, REST v2 (Muramasa) auto-discovery + real-time quota (v3.7.0) |
| Seafile | Stable | Self-hosted or cloud, WebDAV via seafdav endpoint |
| CloudMe | Stable | Swedish, 3 GB free, Digest auth (auto-detected) |
Box exposes management and collaboration features beyond generic file operations:
| Feature | API Endpoint | Tauri Command | Notes |
|---|---|---|---|
| Trash Management | /folders/trash/items |
box_list_trash |
Paginated listing with trashed_at timestamps |
| Soft Delete | DELETE /files/{id} |
box_trash_files |
Moves to trash (recoverable) |
| Restore from Trash | POST /files/{id} |
box_restore_from_trash |
Supports file and folder types |
| Permanent Delete | DELETE /files/{id}/trash |
box_permanent_delete |
Irrecoverable deletion |
| Tags | PUT /files/{id} |
box_set_tags |
Free-text tags, shown as inline chips |
| Comments | /files/{id}/comments |
box_add_comment / box_delete_comment |
File-level comments |
| Collaborations | /collaborations |
box_add_collaboration / box_remove_collaboration |
Role-based sharing |
| Watermark ‡ | /files/{id}/watermark |
box_set_watermark / box_remove_watermark |
Enterprise: viewer email overlay |
| Folder Lock ‡ | /folder_locks |
box_lock_folder / box_unlock_folder |
Enterprise: prevent move/delete |
‡ Requires Box Business or Enterprise plan
Compression levels use the 7-Zip canonical presets (Store=0, Fastest=1, Fast=3, Normal=5, Maximum=7, Ultra=9); formats whose codec has no store mode omit Store. Default is Normal (5).
| Format | Compress | Extract | Browse | Selective Extract | Encryption | Levels | Backend |
|---|---|---|---|---|---|---|---|
| ZIP | Yes (Store/Deflate) | Yes (+ BZip2, LZMA, Deflate64, Zstd, XZ members) | Yes | Yes | AES-256 (read+write) | Store/Fastest/Fast/Normal/Maximum/Ultra | zip v8 |
| 7z | Yes (LZMA2/LZMA/PPMd/BZip2 + dictionary, solid, threads) | Yes | Yes | Yes | AES-256 + encrypted header (read+write) | Fastest/Fast/Normal/Maximum/Ultra | sevenz-rust2 v0.21 |
| TAR | Yes | Yes (safe symlinks) | Yes | Yes | No | - | tar v0.4 |
| TAR.GZ | Yes | Yes | Yes | Yes | No | Fastest/Fast/Normal/Maximum/Ultra | tar + flate2 v1.0 |
| TAR.XZ | Yes | Yes | Yes | Yes | No | Fastest/Fast/Normal/Maximum/Ultra | tar + xz2 v0.1 |
| TAR.BZ2 | Yes | Yes | Yes | Yes | No | Fastest/Fast/Normal/Maximum/Ultra | tar + bzip2 v0.6 |
| GZ (standalone) | Yes | Yes | - (single stream) | - | No | Fastest/Fast/Normal/Maximum/Ultra | flate2 v1.0 |
| XZ (standalone) | Yes | Yes | - (single stream) | - | No | Fastest/Fast/Normal/Maximum/Ultra | xz2 v0.1 |
| BZ2 (standalone) | Yes | Yes | - (single stream) | - | No | Fastest/Fast/Normal/Maximum/Ultra | bzip2 v0.6 |
| RAR | No | Yes | Yes | Yes | Password support | - | unrar v0.5 |
Standalone GZ / XZ / BZ2 (v4.1.2): a single file compresses to and extracts from a plain .gz / .xz / .bz2 with no tar wrapper (single-stream codecs, offered only for a lone non-folder file; nothing to browse). The member name on extract is the archive name minus the codec extension.
7z Advanced options (v4.1.2): content method (LZMA2 default, plus LZMA, PPMd, BZip2), LZMA2 dictionary size, thread count, and a solid-block option, in the Compress dialog and as aeroftp compress flags. Every method round-trips through the extractor.
Safe tar links (v4.1.2): symlink and hardlink entries are validated with the same in-root check as file paths; an in-root symlink is recreated (unix), a link pointing outside the extraction root is never materialised and is surfaced in the report.
Multi-volume parts (v4.1.2): a split part (.7z.001, .zip.001, .z01, .r00) gets a clear "rejoin the volumes" message instead of a generic error; multi-part RAR (.partN.rar) extracts normally (unrar follows co-located volumes).
Archive Browser (v1.7.0): Browse archive contents in-app without extracting. Password dialog for encrypted ZIP/7z/RAR. Selective extraction of individual files.
CompressDialog (v1.7.0): Unified compression UI with format selection, compression levels, editable archive name, password protection (ZIP/7z), and file info display.
| Component | Algorithm | RFC/Standard | Notes |
|---|---|---|---|
| Content encryption | AES-256-GCM-SIV | RFC 8452 | Nonce misuse-resistant AEAD |
| Key wrapping | AES-256-KW | RFC 3394 | Integrity-protected key encapsulation |
| Filename encryption | AES-256-SIV | RFC 5297 | Deterministic, hides file names |
| Key derivation | Argon2id | IETF draft | 128 MiB / 4 iterations / 4 parallelism |
| Header integrity | HMAC-SHA512 | RFC 2104 | 512-bit MAC, detects tampering |
| Cascade mode | ChaCha20-Poly1305 | RFC 8439 | Optional double encryption |
| Chunk size | 64 KB | - | Per-chunk nonce + auth tag |
| Feature | AeroVault v2 | Cryptomator |
|---|---|---|
| Nonce misuse resistance | Yes (GCM-SIV) | No (GCM) |
| KDF memory | 128 MiB | 64-128 MiB |
| KDF algorithm | Argon2id | scrypt |
| Header integrity | SHA-512 | SHA-256 |
| Cascade encryption | Optional | No |
| Chunk size | 64 KB | 32 KB |
AeroVault v3 (AEROVAULT3) is the current default container format on the CLI (vault create defaults to --vault-version v3; v1 and v2 remain selectable). It restructures the container as a content-addressed store: small files are packed together, the data is split with gear content-defined chunking, each chunk is compressed with zstd and then encrypted with AES-256-GCM-SIV, chunks are identified by a keyed-BLAKE3-128 id (deduplication), and an authenticated manifest plus block table indexes the result. See AEROVAULT-V3-SPEC.md for the full format.
AeroVault v4 is v3 plus a Reed-Solomon error-correction wrapper (reed-solomon-erasure, K=10 / P=2 grid) for self-healing vaults; enable it with vault create --error-correction (alias --ec) and maintain it with vault scrub / vault repair.
Existing vaults can be repacked between v2 and v3 (keeping the same password) via the GUI "Change Mode" action or the CLI aeroftp-cli vault change-mode <path> --security-level <standard|advanced|paranoid|archive> command, where standard/advanced/paranoid target v2 and archive targets v3. The AeroVault v3 engine and the v4 error-correction layer ship in the published aerovault crate, with the app keeping thin wrappers.
Create and browse Cryptomator vaults via context menu:
| Component | Algorithm |
|---|---|
| Master key derivation | scrypt (N=2^15, r=8, p=1) |
| Key wrapping | AES-256-KW (RFC 3394) |
| Filename encryption | AES-SIV |
| Content encryption | AES-256-GCM (32KB chunks) |
- FEAT detection: Server capabilities checked on connect
- MLSD listings: Machine-readable format preferred over LIST
- MLST stat: Single-file info without listing parent directory
- Automatic fallback: Falls back to LIST when MLSD not supported
- Fact parsing: type, size, modify, unix.mode, unix.owner/group, perm
- resume_download: REST offset + RETR for partial downloads
- resume_upload: APPE (append) for partial uploads
- Explicit TLS (AUTH TLS): Upgrades plain connection on port 21 via
into_secure() - Implicit TLS: Direct TLS connection on port 990
- Explicit if available: Attempts AUTH TLS, falls back to plain FTP if unsupported
- Certificate verification: Configurable per-connection. When verification is enabled, invalid, self-signed, or hostname-mismatched certificates are rejected. Disabling verification explicitly accepts those certificates and weakens MITM protection.
- Backend: suppaftp v8 with
tokio-async-native-tlsfeature
Default changed in v1.5.0: FTP now defaults to 'explicit_if_available' (TLS opportunistic) instead of plain FTP
Bidirectional directory synchronization compares local and remote files by timestamp and size, then uploads/downloads as needed.
| Protocol | Compare | Upload | Download | Progress | Notes |
|---|---|---|---|---|---|
| FTP | Yes | Yes | Yes | Yes | Via provider/session pipeline |
| FTPS | Yes | Yes | Yes | Yes | Via provider/session pipeline |
| SFTP | Yes | Yes (ssh2/SCP) | Yes | Yes | Uploads via ssh2/SCP fallback (russh write bug) |
| WebDAV | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| S3 | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Google Drive | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Dropbox | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| OneDrive | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| MEGA | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Box | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| pCloud | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Azure Blob | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| 4shared | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Filen | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Zoho WorkDrive | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Internxt Drive | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| kDrive | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| Koofr | Yes | Yes | Yes | Yes | Via StorageProvider trait |
| FileLu | Yes | Yes | Yes | Yes | Via StorageProvider trait |
For transfer-scheduler capabilities per protocol (parallel streams, chunked/segmented/delta paths, session pooling), see CLI-GUIDE: Transfer Capabilities by Protocol. That matrix is the single source and is not duplicated here.
- Remote → Local: Download newer remote files
- Local → Remote: Upload newer local files
- Bidirectional: Sync in both directions (default)
- Timestamp comparison (2-second tolerance for filesystem differences)
- File size comparison
- Configurable exclude patterns (
node_modules,.git,.DS_Store, etc.)
Persistent JSON index stored at ~/.config/aeroftp/sync-index/ enables:
- True conflict detection: Both sides changed since last sync → Conflict status
- Faster re-scans: Unchanged files detected via cached size/mtime without full comparison
- Per-path-pair storage: Stable filename generated from hash of local+remote path pair
- Auto-save after sync: Index updated with final file states after successful sync
- Automatic retry with exponential backoff (3 attempts, 500ms base delay)
- Targets "Data connection" errors specifically
- FTP-only (cloud providers handle retries internally)
- Inter-transfer delay increased to 350ms for server stability
All non-FTP providers receive periodic keep-alive pings to prevent connection timeouts during idle sessions. This applies to WebDAV, S3, Google Drive, Dropbox, OneDrive, MEGA, Box, pCloud, Azure Blob, 4shared, Filen, Zoho WorkDrive, Internxt Drive, kDrive, Koofr, and FileLu.
| Preset | Status | Notes |
|---|---|---|
| Koofr | Stable | EU-based, 10 GB free |
| Jianguoyun | Stable | China-based WebDAV |
| InfiniCLOUD | Stable | Japan-based, 25 GB free. Native REST API v2 integration: auto-discovery, real-time quota |
| CloudMe | Stable | Swedish, 3 GB free, Digest auth (auto-detected) |
| Nextcloud | Beta | Self-hosted WebDAV |
| Seafile | Stable | Self-hosted or cloud, WebDAV via seafdav endpoint |
- OAuth2 PKCE via OAuth2Manager
- API:
https://api.box.com/2.0/, upload:https://upload.box.com/api/2.0/ - ID-based file system (root folder = "0"), path→ID cache
- Share links, storage quota, file versions
- OAuth2 via OAuth2Manager
- API:
https://api.pcloud.com/(US) orhttps://eapi.pcloud.com/(EU) - Path-based REST API (simplest of all providers)
- Share links, storage quota
- Shared Key HMAC-SHA256 or SAS token authentication
- API:
https://{account}.blob.core.windows.net/{container}/ - Flat namespace with
/delimiter (like S3) - XML response parsing via quick-xml
- Native REST API v1.2 with OAuth 1.0 (HMAC-SHA1) authentication
- ID-based file system with folder/file caching
- API:
https://api.4shared.com/v1_2/ - Upload:
https://upload.4shared.com/v1_2/files - 15 GB free storage, storage quota support
- Zero-knowledge E2E encryption: PBKDF2(SHA512, 200k iterations) + AES-256-GCM
- All metadata and file content encrypted client-side
- Chunk-based upload/download (1MB chunks)
- API:
https://gateway.filen.io/
- OAuth2 PKCE with 8 regional endpoints (US/EU/IN/AU/JP/UK/CA/SA)
- Team-based storage with team ID auto-detection
- Share links, trash management, storage quota
- Labels: team-level color labels, add/remove from files (v2.7.4)
- Versioning: list/download/restore file versions (v2.7.4)
- API:
https://www.zohoapis.{region}/workdrive/api/v1/
- Zero-knowledge E2E encryption: AES-256-CTR with BIP39 mnemonic key derivation
- Auth: PBKDF2-SHA1 + AES-CBC encrypted password + JWT
- Client-side file encryption/decryption, plainName metadata
- API:
https://drive.internxt.com/
- Swiss-hosted cloud storage (GDPR + FADP compliant)
- Auth: Bearer API Token (generated from Infomaniak dashboard)
- ID-based file system, cursor-based pagination, server-side copy
- API:
https://api.infomaniak.com/
- EU-based cloud storage (Slovenia) with 10 GB free
- Auth: OAuth2 PKCE (authorization code flow)
- Native REST API with full
StorageProvidertrait implementation - Trash management: list, restore, empty trash
- Also available as WebDAV preset for standard protocol access
- API:
https://app.koofr.net/api/v2/
- Privacy-focused cloud storage with 20 GB free
- Auth: API Key (generated from Account Settings → Developer API Key)
- Native REST API with full
StorageProvidertrait implementation - FTP/FTPS/WebDAV/S3-compatible access also available as separate presets
- Special features: file/folder password, private/public toggle, server-side clone, trash management, remote URL upload
- API:
https://api.filelu.com/
| Provider | Native Tools | Streaming | Token Counting | Auth |
|---|---|---|---|---|
| Google Gemini | Yes (functionDeclarations) |
Yes (SSE) | Yes (usageMetadata) |
API Key |
| OpenAI | Yes (tools[]) |
Yes (SSE) | Yes (usage) |
API Key |
| Anthropic | Yes (tool_use) |
Yes (content_block_delta) |
Yes (usage) |
API Key |
| xAI (Grok) | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| OpenRouter | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Ollama | No (text fallback) | Yes (NDJSON) | Yes (eval_count) |
None |
| Kimi (Moonshot) | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Qwen (Alibaba) | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| DeepSeek | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Mistral | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Groq | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Perplexity | No (text fallback) | Yes (SSE) | Yes | API Key |
| Cohere | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Together AI | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| AI21 Labs | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Cerebras | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| SambaNova | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Fireworks AI | Yes (OpenAI-compat) | Yes (SSE) | Yes | API Key |
| Custom | No (text fallback) | Yes (SSE) | Varies | API Key |
The remote-facing tools route through the StorageProvider trait, so they behave identically across the 7 transport protocols and 26 native provider integrations. Local-only tools (file management, search, archives, clipboard, shell) act on the local filesystem.
Remote tools (protocol-routed)
| Danger | Tools |
|---|---|
| Read-only | remote_list, remote_read, remote_info, remote_search, remote_head, remote_tail, remote_tree, remote_storage_quota, remote_hashsum, remote_sync_doctor, remote_reconcile |
| Medium | remote_upload, upload_files, upload_many, remote_download, download_files, remote_mkdir, remote_rename, remote_edit, remote_touch, remote_speed, transfer, transfer_tree, cross_profile_transfer |
| High | remote_delete, remote_delete_many, remote_dedupe, remote_cleanup, server_exec |
See the full tool breakdown in AeroAgent Tool Categories below.
| Feature | Status | Notes |
|---|---|---|
| Native function calling | Done (v1.6.0) | OpenAI, Anthropic, Gemini; text fallback for Ollama |
| Streaming responses | Done (v1.6.0) | Incremental rendering via Tauri events |
| Chat history | Done (v1.6.0) | 50 conversations, 200 msgs each, persisted to disk |
| Token counts | Done (v1.6.0) | Per-reply and per-conversation token counts as the provider reports them; the cost estimate was removed in v4.2.3 |
| Context awareness | Done (v1.7.0) | Provider, server host/port/user, path, selected files |
| Protocol expertise | Done (v1.7.0) | System prompt with all 14 provider configs, ports, auth |
| Styled tool display | Done (v1.7.0) | Inline chips with wrench icon replace raw TOOL/ARGS |
| Auto-routing | Done (v1.4.0) | Task-type detection routes to optimal model |
| Rate limiting | Done (v1.4.0) | 20 RPM per provider, frontend token bucket |
| Speech input | Done (v1.4.0) | Web Speech API |
| Multi-step autonomous tools | Done (v1.9.0) | Agent chains multiple tool calls without repeated prompts |
| Ollama auto-detection | Done (v1.9.0) | Discovers local Ollama instances and available models |
| Conversation export | Done (v1.9.0) | Export as Markdown or JSON |
| Monaco bidirectional sync | Done (v1.9.0) | Live two-way sync between editor and AI agent |
| Terminal command execution | Done (v1.9.0) | AI executes terminal commands with user approval |
| Streaming markdown renderer | Done (v2.0.0) | Incremental rendering with finalized segments (React.memo) |
| Code block actions | Done (v2.0.0) | Copy/Apply/Diff/Run buttons on AI code blocks |
| Thought visualization | Done (v2.0.0) | ThinkingBlock for Anthropic/OpenAI/Gemini reasoning |
| Prompt templates | Done (v2.0.0) | 15 built-in templates via / prefix, vault-persisted custom |
| Multi-file diff | Done (v2.0.0) | PR-style diff with per-file checkboxes |
| Cost budget tracking | Removed (v4.2.3) | Cost estimates were removed; the CLI agent has an exact --token-limit |
| Chat search | Done (v2.0.0) | Ctrl+F with role filter and keyboard navigation |
| Anthropic prompt caching | Done (v2.0.0) | cache_control ephemeral, 90% read discount |
| OpenAI structured outputs | Done (v2.0.0) | strict: true for OpenAI/xAI/OpenRouter |
| Ollama model templates | Done (v2.0.0) | 8 family profiles with tailored prompts |
| Ollama pull from UI | Done (v2.0.0) | NDJSON streaming progress in AI Settings |
| Gemini code execution | Done (v2.0.0) | executableCode/codeExecutionResult parsing |
| Kimi web search | Done (v2.0.1) | $web_search builtin_function tool injection |
| Qwen thinking mode | Done (v2.0.1) | enable_thinking + thinking_budget parameters |
| Qwen web search | Done (v2.0.1) | enable_search + search_options.search_strategy |
| DeepSeek thinking mode | Done (v2.0.1) | reasoning_content streaming (shared with o3) |
| DeepSeek prefix completion | Done (v2.0.1) | prefix: true on last assistant message |
| Feature | OpenAI | Anthropic | Google Gemini | xAI | OpenRouter | Ollama | Kimi | Qwen | DeepSeek | Custom |
|---|---|---|---|---|---|---|---|---|---|---|
| Native Tool Calling | Yes | Yes | Yes | Yes | Yes | Text format | Yes | Yes | Yes | Yes |
| Streaming | SSE | SSE | SSE | SSE | SSE | NDJSON | SSE | SSE | SSE | SSE |
| Vision/Multimodal | Yes | Yes | Yes | Yes | Via model | Yes | Yes | Yes | N/A | Via model |
| Structured Outputs | strict: true | N/A | N/A | strict: true | strict: true | N/A | N/A | N/A | N/A | N/A |
| Prompt Caching | N/A | Ephemeral | Implicit (Gemini 2.5+) | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Extended Thinking | o3/o3-mini | Claude 3.5+ | Gemini 2.0+ | N/A | Via model | deepseek-r1 | N/A | enable_thinking | reasoning_content | N/A |
| Web Search | N/A | N/A | N/A | N/A | N/A | N/A | $web_search | enable_search | N/A | N/A |
| Code Execution | N/A | N/A | Python sandbox | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Prefix Completion | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | prefix: true | N/A |
| Model Pull from UI | N/A | N/A | N/A | N/A | N/A | Yes | N/A | N/A | N/A | N/A |
| GPU Monitoring | N/A | N/A | N/A | N/A | N/A | Yes | N/A | N/A | N/A | N/A |
| Model Family Templates | N/A | N/A | N/A | N/A | N/A | 8 families | N/A | N/A | N/A | N/A |
| Category | Tools | Danger |
|---|---|---|
| Remote operations (21) | remote_list, remote_read, remote_info, remote_search, remote_head, remote_tail, remote_tree, remote_storage_quota, remote_hashsum, remote_upload, upload_files, upload_many, remote_download, download_files, remote_mkdir, remote_rename, remote_edit, remote_touch, remote_delete, remote_delete_many, list_servers |
read-only / medium / high |
| Local file operations (21) | local_list, local_read, local_write, local_mkdir, local_delete, local_rename, local_search, local_edit, local_move_files, local_batch_rename, local_copy_files, local_trash, local_file_info, local_disk_usage, local_find_duplicates, local_diff, local_stat_batch, local_tree, local_grep, local_head, local_tail |
read-only / medium / high |
| Cross-profile transfer (4) | transfer, transfer_tree, cross_profile_transfer, generate_transfer_plan |
safe / medium |
| Sync & verification (7) | sync_doctor, reconcile, dedupe, cleanup, sync_control, sync_preview, speed |
read-only / medium / high |
| Archives (2) | archive_compress, archive_decompress |
medium |
| System & shell (4) | shell_execute, clipboard_read, clipboard_write, hash_file |
safe / high |
| Knowledge & memory (3) | rag_index, rag_search, agent_memory_write |
read-only / medium |
| App & server control (6) | app_info, set_theme, vault_peek, preview_edit, agent_connect, server_exec |
safe / read-only / high |
Many remote tools ship under both an
aeroftp_*(MCP) and aremote_*(GUI / cross-profile) alias for the same capability, so the per-category rows above count every alias name and tally higher than the distinct-tool figure. 35+ canonical capabilities are exposed over the MCP server.
Since v1.9.0, all sensitive data is stored in the Universal Vault (vault.db). The previous layered approach (OS Keyring primary, vault fallback) has been replaced by a single encrypted backend.
| Data Type | Storage | Notes |
|---|---|---|
| Server passwords | vault.db (AES-256-GCM) | Per-entry encryption with random nonce |
| Server profiles | vault.db (AES-256-GCM) | Host, port, username, protocol config (v1.9.0) |
| OAuth tokens | vault.db (AES-256-GCM) | Access + refresh tokens for all OAuth providers |
| AI API keys | vault.db (AES-256-GCM) | All AI provider keys |
| AI settings | vault.db (AES-256-GCM) | Model selection, provider config (v1.9.0) |
| App config | vault.db (AES-256-GCM) | Sensitive application settings (v1.9.0) |
| MEGA credentials | secrecy crate (zero-on-drop) | In-memory only during session |
| Parameter | Value |
|---|---|
| Format | .aeroftp-keystore binary |
| KDF | Argon2id (64 MB, t=3, p=4) |
| Encryption | AES-256-GCM |
| Integrity | HMAC-SHA256 |
| Merge modes | Skip existing, Overwrite all |
| Parameter | Value |
|---|---|
| Algorithm | HKDF-SHA256 (RFC 5869) |
| Input | 512-bit CSPRNG passphrase |
| Output | 256-bit vault key |
| Per-entry | AES-256-GCM with random 12-byte nonce |
This table stops at v4.0.9. Every later release is described in CHANGELOG.md and on the GitHub Releases page.
| Version | Feature | Status |
|---|---|---|
| v1.2.8 | Properties Dialog, Compress/Archive, Checksum, Overwrite, Drag & Drop | Done |
| v1.3.0 | SFTP Integration, 7z Archives, Analytics | Done |
| v1.3.1 | Multi-format TAR, Keyboard Shortcuts, Context Submenus | Done |
| v1.3.2 | Secure Credential Storage, Argon2id Vault, Permission Hardening | Done |
| v1.3.3 | OS Keyring Fix (Linux), Migration Removal, Session Tabs Fix | Done |
| v1.3.4 | SFTP Host Key Verification, Ephemeral OAuth Port, FTP Warning | Done |
| v1.4.0 | Cross-provider search/quota/versions/thumbnails/permissions/locking, S3 multipart, FTP resume + MLSD, dep upgrades | Done |
| v1.4.1 | AI API keys → OS Keyring, ZIP/7z password dialog, ErrorBoundary, hook extractions, dead code cleanup | Done |
| v1.5.0 | 4 new providers (Box, pCloud, Azure, Filen), FTP TLS default, S3/WebDAV stable badges | Done |
| v1.5.1 | WebDAV directory fix, provider keep-alive, drag-to-reorder tabs/servers, 4 new presets (30 total), provider logos | Done |
| v1.5.2 | Multi-protocol sync, codebase audit, credential fix, SEC-001/SEC-004 fixes | Done |
| v1.5.3 | Sync index cache, storage quota display, OAuth session switching fix, FTP retry with backoff | Done |
| v1.5.4 | In-app auto-updater, download progress, AppImage auto-install, terminal empty-start | Done |
| v1.6.0 | AeroAgent Pro: native function calling (SEC-002), streaming, provider-agnostic tools, chat history, cost tracking, context awareness, 122 i18n keys | Done |
| v1.7.0 | Encryption Block: AeroVault v1, archive browser + selective extraction, Cryptomator format 8, CompressDialog, AeroFile mode, preview panel, Type column, 7z password fix | Done |
| v1.8.0 | Smart Sync (3 intelligent modes), Batch Rename (4 modes), Inline Rename, AeroVault v2 (AES-256-GCM-SIV + AES-KW + AES-SIV + Argon2id 128MiB + HMAC-SHA512 + ChaCha20 cascade) | Done |
| v1.8.6 | Universal Credential Vault (AES-256-GCM + Argon2id + HKDF-SHA256), smart folder transfers, folder conflict resolution | Done |
| v1.8.7 | File clipboard (cut/copy/paste), cross-panel paste, Ubuntu/macOS audits | Done |
| v1.8.8 | Vision/multimodal AI, auto panel refresh, XSS hardening, security audit | Done |
| v1.9.0 | Unified Keystore (localStorage to vault migration), keystore backup/restore (.aeroftp-keystore), migration wizard, AI multi-step tools, Ollama auto-detection, conversation export, Monaco bidirectional sync, terminal command execution | Done |
| v2.0.0 | AeroAgent Pro - Provider Intelligence (7 provider profiles, model registry, parameter presets), Advanced Tool Execution (DAG pipeline, diff preview, intelligent retry, tool validation, composite macros, progress indicators), Context Intelligence (project detection, file dependency graph, persistent agent memory, conversation branching, smart context injection, token budget optimizer), Professional UX (streaming markdown, code block actions, thought visualization, prompt templates, multi-file diff, cost budget, chat search), Provider Features (Anthropic caching/thinking, OpenAI strict outputs, Ollama templates/pull/GPU, Gemini code execution) | Done |
| v2.0.1 | 3 Asian AI Providers (Kimi, Qwen, DeepSeek) with thinking modes, web search, FIM, context caching, file analysis. AeroFile Pro Places Sidebar, BreadcrumbBar, Large Icons, drive detection, custom sidebar locations. Official SVG provider logos for all 10 providers | Done |
| v2.0.5 | 4shared native REST API (OAuth 1.0, 14th protocol), CloudMe WebDAV preset, Places Sidebar GVFS/unmounted partitions, Autostart, Windows Explorer badges, OwnCloud removal | Done |
| v2.5.0 | AeroFile Pro - LocalFilePanel extraction, local path tabs (12 max, drag-to-reorder), file tags SQLite (7 Finder-style labels), FileTagBadge, tags context menu, sidebar filter, macOS FinderSync, event-driven volume detection, keyboard navigation, ARIA accessibility | Done |
| v2.5.2 | AeroImage - Built-in image editor (crop, resize, rotate, flip, color adjustments, effects, 6 output formats) | Done |
| v2.6.0 | AeroAgent Ecosystem - 4 new AI providers (AI21, Cerebras, SambaNova, Fireworks), Command Palette, Plugin Registry with GitHub-based browser, plugin hooks, context menu AI, AI status widget, drag & drop to agent | Done |
| v2.7.0 | FileLu native REST API - 19th protocol, file/folder passwords, privacy toggle, server-side clone, trash manager, remote URL upload | Done |
| v2.7.4 | Complete Provider Integration - Box (trash, move, comments, collaborations, watermark, folder locks, tags), Google Drive (starring, comments, properties), Dropbox (tags, trash UI), OneDrive (trash lifecycle). 33 new commands, PRO badge system | Done |
| v2.8.0 | Koofr Native API (20th protocol), Production CLI (13 commands, 20 protocols), AeroAgent Server Exec (2 new tools, vault-secured), Ed25519 license foundation | Done |
| v2.9.2 | CLI Expansion - Batch scripting engine (17 commands), glob transfers, tree command, exit codes, path traversal protection, BFS caps, NO_COLOR, SIGPIPE | Done |
| v2.9.4 | Server Health Check - DNS/TCP/TLS/HTTP probes, latency gauge, batch diagnostics. Download mtime preservation. AeroVault Pro modular refactor, recent vaults, folder encryption | Done |
| v2.9.5 | Dual-Engine Security Audit - Claude Opus 4.6 + GPT-5.4 (117 findings), DOMPurify, vault write safety, shell denylist expansion, TOTP-before-cache. Yandex Object Storage S3 preset | Done |
| v2.9.6 | Remote Timestamp Timezone Fix - MLSD/SFTP/cloud UTC→local conversion, sync comparison fix, 11 provider backends updated | Done |
| v2.9.7 | Share Links for FTP/SFTP/WebDAV - Per-server Public URL Base mapping, folder scan progress toast, update install overlay, security audit remediation | Done |
| v2.9.8 | OpenDrive Native API (22nd protocol), Settings OAuth for Yandex/Zoho | Done |
| v3.0.5 | SFTP upload 0-byte fix (russh→ssh2/SCP backend on embedded SFTP servers), atomic downloads (.aerotmp rename) on all 22 providers, GitHub PEM vault (AES-256-GCM encrypted in vault on import), GitHub token expiry badges, 0 B file alert badge |
Done |
| v3.1.x | Filen Encrypted Notes (Beta), CSP Phase 2 prep, biometric unlock investigation | Done |
| v3.3.4 | serve http + serve webdav local servers (axum-based, Range requests, PROPFIND, atomic PUT) |
Done |
| v3.5.2 | CLI determinism: 12-code exit map covering all ProviderError variants, mkdir --parents, rm --force, put --no-clobber, --chunk-size/--buffer-size overrides, Azure server-side copy, parallel S3 multipart, threat model + LLM Integration Guide |
Done |
| v3.5.3 | CLI sync --watch continuous bidirectional sync (filesystem watcher native, anti-loop cooldown, NDJSON output), MCP Server dialog + VS Code extension axpdev-lab.aeroftp-mcp, --files-from/--immutable/--no-check-dest/--max-depth/--inplace/--fast-list, cleanup orphan .aerotmp scanner, dedupe 7 modes, bisync --conflict-mode rename, FTP/WebDAV listing path fixes |
Done |
| v3.5.4 | MCP hardening: top-level aeroftp mcp subcommand, shared profile_loader for CLI+MCP, S3 bucket fix from vault, vault auto-init in MCP, per-profile serialization mutex, shutdown drain, schema validation, FTP/SFTP/WebDAV/Filen/FileLu/Drime/Immich error message + retry hardening, CLI hashsum --algorithm, speed --size aliases |
Done |
| v3.5.8 / v3.5.9 | MCP pool auto-reset, delete_many, list_servers filter, read_file preview_kb, upload_file create_parents, sync_tree plan[], two-sided checksum, CLI parent explainer, scan reconnect, ssh2 OpenSSL Windows CI quirks |
Done |
| v3.6.0 | MCP read_file soft-truncate, check_tree compare_method, cluster doc reorg |
Done |
| v3.6.1 | Windows first-class delta sync - native rsync protocol 31 in pure Rust, no rsync.exe bundle, no WSL requirement (aerorsync cross-OS, #![cfg(unix)] removed surgically) |
Done |
| v3.6.6 | Community wishlist quick wins, Server Speed Test dialog (speed-compare), aeroftp_agent_connect, AeroRsync wired into Cross-Profile Transfer + AeroTools Code Editor save |
Done |
| v3.6.7 / v3.6.8 / v3.6.10 | Share-link reliability + link --verify, suppaftp 8.0.3 with 14 upstream FTP fixes, MEGA Native canonical key layout interop fix, MEGA/Filen 2FA modal hookup, TOTP QR |
Done |
| v3.7.0 | AeroRsync session-cached batch transport (AerorsyncBatch trait, delta_files[], bytes_on_wire), AeroVault overlay session model (transparent encrypted browse), rclone crypt full read/write (provider session + filename obfuscation), Server Health Check engine (DNS/TCP/TLS/HTTP probes, IntroHub Pro), MCP wave-5 cross-profile transfer + wave-6 ops tools (touch / cleanup / speed / sync_doctor / dedupe / reconcile), MCP tool count 27 to 39, aerovault crate 0.3.4 with rename_entry / move_entry / copy_entry |
Done |
| v3.7.1 | Persistent Mount Manager (FUSE / WebDAV) with cross-platform autostart (systemd-user / Task Scheduler ONLOGON), sidecar JSON or vault-backed storage, "Open mount in file manager" auto-creates default mount, Windows free-drive-letter helper. Filen Desktop local bridges (WebDAV port 1900 + S3 port 1700) on top of layered WebDAV scheme detection (explicit / tls_mode / auto for localhost / RFC 1918 / *.local). AeroFile community polish: aggregate multi-file Properties dialog, recursive * flatten search, smart Open with default app, PathBar empty-area edit + trailing chevron, configurable provider-icon size, drag-reorder custom icons, Server Health overlay dot on Discover. AeroSync wrapper script export round-trips .sh / .ps1 with embedded # AEROFTP-META. My Servers unified table (Used / Total / %, semantic table with sticky thead/tfoot, click-to-sort, dedup-aware footer + per-protocol breakdown, drag-to-reorder + resize on three surfaces). Filen v3 Argon2id auth, MEGAcmd anonymous WebDAV, Backblaze B2 native Quick Connect form, S3Drive icon + setup-with-rclone banner, Filen Desktop S3 / WebDAV logos. CLI profiles -i interactive prompt loop. |
Done |
| v3.7.2 | AeroCrypt overlay first-class (rclone-crypt promoted next to AeroVault, folder transfers traverse encrypted directory trees end to end, BFS depth 64, filename obfuscation, AEROCRYPT path-bar badge), ImageKit (23rd protocol), Uploadcare (24th protocol), Codex CLI security audit (17 paired fixes CLI-AUDIT-01..17 across GUI tool approval, MCP path validation, server_exec read-only contract, atomic temp-file safety, SFTP packet bounds, daemon token mode 0600, sync direction validation, exit-code 130 cancellation), T-TOPBAR-3-CLUSTER titlebar restructure (page-nav / utility / window clusters, fixes #129 click-shift drift), T-EDITOR-DRAG-RUN AeroFile to Editor to Terminal flow (.ps1 / .sh / .py with shell quoting and no auto-Enter), T-AUTO-RECONNECT-IDLE SFTP silent reconnect (#161, ConnectionLost classification, cwd restore, toast lifecycle), Ctrl+T theme cycle and Ctrl+S editor save bindings (#171), Ehud table polish (per-column L/C/R alignment, sticky header, sentence-case, redundant Detailed cards toggle removed), CLI profiles dynamic terminal-width-aware layout + unified --breakdown + --hide=fav alias surface, Esc closes Quick Connect, Delete confirmation grammatical messaging across 47 languages, draggable modal X-click first time fix. Direct rsa = "0.9" dropped, jsonwebtoken on aws-lc-rs, audit.toml documents transitive RUSTSEC ignores with written threat-model justifications. |
Done |
| v3.7.4 | Filen v3 chunked AES-GCM upload (per-chunk retry on egest decode failures) + dedicated TOTP two-factor prompt, Activity Log reachable from the View menu, Cloudinary provider + TAB.DIGITAL preset, B2 quota/share/recoverability UX, WebDAV URL-bar drill-down, OneDrive mkdir, Drime listing polish, Windows MSI/NSIS silent update | Done |
| v3.7.9 | AeroFile Dual Panel Slice A (two local panels side by side, full keyboard parity on the second pane, Total-Commander F5/F6/F7 + drag-and-drop), AeroVault v3 (Experimental) (gear-CDC chunking, per-chunk zstd, AES-256-GCM-SIV, BLAKE3-128 chunk ids, reserved v4 Error Correction region), TOTP secret passthrough for Filen and MEGA | Done |
| v3.8.0 | AeroVault wrapper-stack hardening + telemetry + full CLI vault parity (aeroftp-cli vault for v1/v2/v3), storage quota override + recursive used-storage scan + compression columns, AeroRsync native streaming default ON + local-to-local (256 MiB cap removed, batch SSH session reuse), AeroFile Dual Panel Slice B + Slice C (any-endpoint panes, FreeFileSync-style compare/mirror/backup/bisync) |
Done |
| v4.0.0 | Shaped Graph Transfer (DAG) core and selected production runners (single-file multipart is the complete path; batch/sync wrappers remain conservative, copy uses the direct fallback helper, and the DAG range path is opt-in; rollout flags and the old batch orchestrator removed), Multi-User Account Partition (per-user encrypted vault partitions, boot-time Account Lock Screen, opt-in admin role, CLI --user) |
Done |
| v4.0.1 | S3 native AssumeRole (#301, hand-rolled STS client, MFA, auto-refresh before expiry), AeroVault dual-audit remediation (crate hardened to v3), unified profile bridge (rclone/WinSCP/FileZilla through one dispatcher), Servers tab folded into the Backup interoperability table (#270), community wishlist batch (#300), embedded-rsync (WD MyCloud) download integrity fix | Done |
| v4.0.2 | Cross-Machine Keystore Portability and agent-facing polish | Done |
| v4.0.3 | Restricted-filename clear-rejection groundwork, CLI polish, stability fixes | Done |
| v4.0.4 | Reversible restricted-filename encoding (Box, Dropbox, Jottacloud, OpenDrive; rclone-compatible scheme), CLI profiles -i polish, lightweight CI checks job, tray suspend/resume + macOS Tahoe (#290) + OAuth reconnect fixes |
Done |
| v4.0.5 | AeroCrypt native encrypted overlay (format AECR), AeroVault v4 (v3 + Reed-Solomon error correction) with vault create --error-correction/scrub/repair, interactive CLI TUI (aeroftp tui, alpha) and profiles -i shell, Server Groups (#320), Filen/MEGAcmd file versioning + CLI versions, CLI compress/extract, russh 0.61.2 SSH advisory clearance |
Done |
| v4.0.6 | AeroVault crate convergence (AEROVAULT3 engine + revision 4 Reed-Solomon moved into the published aerovault crate 0.6.0; app keeps thin wrappers), folder-upload skip/overwrite policy fix |
Done |
| v4.0.7 | AeroVault dual blind security audit (grade A) + full remediation, error correction converged onto aerovault crate 0.6.2, interrupted-seal temp/lock cleanup, reparse-point extract hardening, IntroHub My Servers layout fixes |
Done |
| v4.0.8 | AeroCrypt promoted to a first-class Crypt profile type (native AeroCrypt + rclone-crypt interop shown as one Crypt class in My Servers and profiles, navigate-out encrypted scope, #272), AeroProgress transfer card, Change Mode (v2 <-> v3 repack), Cryptomator byte-for-byte interop (#322), Quick Connect credential isolation (#215), aerovault crate 0.6.3 |
Done |
| v4.0.9 | AeroVault create redesign (Compressor-style, named vaults, tabbed Home/Recent/Files) + AeroVault Zip plaintext lane (.aerozip, AEROVAULT3 with cipher off, opt-out recovery), AeroMount read-only vault mount + Save-All (#322), universal rclone export (Filen + all OAuth providers, #128), Crypt overlay padlock badge (#272), interactive groups/users CLI (#311), rclone export CR/LF hardening + RUSTSEC-2026-0185 patch |
Done |
| Version | Feature |
|---|---|
| v3.7.x | P3-T01 streaming multi-file + session reuse (rimuove cap 256 MiB native rsync, batch SSH session per N file). 4 onde, ~24 gg netti |
| v3.x | Advanced Share Links (expiration, password, permissions), Full Activity Logging, AeroVault biometric unlock |
This document is maintained as part of AeroFTP protocol documentation.