Repository navigation
Replies: 26 comments
|
Post-4.0.4 follow-up, fixed on
Both verified green (typecheck, 249 vitest, full |
|
Post-4.0.4 follow-up, fixed on
Verified green (typecheck, |
Known issue (post-release): Blomp exposed in production + service unavailable
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Details & plan (v4.0.5)The dev-only gate lives only in the protocol grid ( Blomp uses the OpenStack Swift backend, the same integration rclone uses for Blomp. The service is broken upstream: authentication works, but the Swift storage proxy returns 403 on every container/account request. Verification (reproducible, valid test account):
The Keystone token is valid (role Action items for v4.0.5:
|
Bug (post-release, fixed): rclone export wrote OpenStack Swift
|
| # | Area | Description | Status | Linked issue |
|---|---|---|---|---|
| 2 | Export / rclone (Swift) | Exporting an OpenStack Swift profile (Blomp, OVH, Rackspace) to rclone.conf wrote the key field obscured. rclone's swift backend does not treat key as a password field (IsPassword = false), so it sent the obscured string verbatim as the password and authentication failed with HTTP 401. Fixed: swift key is now emitted in plaintext (same as S3 secret_access_key and Azure key). |
🟢 fixed (pending release, v4.0.5) | this issue |
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released
Details & fix (v4.0.5)
export_rclone is the shared writer used by both aeroftp-cli export rclone and the GUI bridge, so the issue affected every Swift export from either path. The exported config authenticated fine inside AeroFTP (it uses the decrypted password directly) but failed in rclone because the key was obscured.
Audited all exported secret fields against rclone config providers (IsPassword metadata):
- obscure (correct): ftp/ftps
pass, sftppass+key_file_pass, webdavpass, megapass, koofrpassword, opendrivepassword - plaintext (correct): s3
secret_access_key, azureblobkey, swiftkey
Swift was the only mismatch. Fix verified by a round-trip unit test (test_export_rclone_swift_key_is_plaintext) and empirically: with a plaintext key, rclone authenticates (HTTP 200) and reaches Blomp's storage proxy (which then returns the upstream 403 from item #1).
Fixed on main in commit 9abfe263 (fix(rclone-export): emit OpenStack Swift key in plaintext), shipping in v4.0.5.
Feature (post-release, implemented): file versioning (Filen + B2) and quota versioning-bytes, GUI and CLI
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Requested by @EhudKirsh in #270 (comments c.17207680 and c.17207733). Thanks for the detailed reports and the Details (v4.0.5)Versioning is generic. A provider implements four trait methods and both the GUI versions panel and the new CLI New CLI surface (parity with the GUI). GUI and CLI are separate command paths, so the same capability is now scriptable: Supports Confirmed live, end to end. Filen and Backblaze B2 native (list, get old version, restore, with byte-verified contents); Google Drive and Koofr MEGAcmd. It lists and sizes versions ( Quota bar. Fixed on |
Update on #1 (partial fix, pending v4.0.5): unstable-provider disclaimer shippedThe first action item from the Blomp known-issue above is done: a non-dismissible warning banner now renders at the top of the connection form whenever the selected provider is flagged
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Still open on #1 (the rest of the action list):
Landed on |
Bugs (post-release, fixed): delete-scan toast labelled "Downloading" + spurious "Update completed" toast
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Details & fix (v4.0.5)#5, delete-scan toast direction. Folder deletes emit a
The scanning handler in #6, spurious post-update toast.
Fix (frontend only): consume the marker first (clear before any early return), guard with a Both fixed on |
Security (post-release, fixed): guard the OS keyring on disposable vaults + CLI
|
| # | Area | Description | Status | Linked issue |
|---|---|---|---|---|
| 7 | Vault / keyring | first_run_init unconditionally wrote the random vault passphrase to the OS-global keyring account (com.aeroftp.AeroFTP / vault-passphrase), which is not scoped to XDG_CONFIG_HOME. Creating an isolated or disposable vault under a separate config dir therefore overwrote the real vault's keyring entry, leaving the real zero-password vault unopenable (vault.db intact, only the keyring secret clobbered). The keyring is now guarded so disposable / master-mode vaults never touch it, and a new keystore status / keystore repair CLI pair inspects and recovers the keyring secret from a backup. |
🟢 fixed (pending release, v4.0.5) | this issue |
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released
Details & fix (v4.0.5)
The OS keyring entry is keyed only by service/account (com.aeroftp.AeroFTP / vault-passphrase), independent of which config directory the vault lives in. A zero-password ("auto-keyring") vault stores its random passphrase only in that keyring entry, so any second vault that ran a fresh first-run init under a different XDG_CONFIG_HOME (a disposable CLI vault, an isolated test vault) silently overwrote the secret and left the real vault permanently unopenable, even though vault.db was byte-intact.
Guard. init() now bootstraps in master mode (no keyring write) whenever AEROFTP_MASTER_PASSWORD is set on a fresh vault, so disposable / master-mode vaults never touch the OS keyring.
Recovery tooling (CLI).
aeroftp keystore status # report on-disk key mode + whether the vault opens right now
aeroftp keystore repair --input <backup.aeroftp-keystore> # snapshot, reset, re-init, import to recover
status is a read-only health probe (CredentialStore::health()) that detects a lost or overwritten keyring entry; repair snapshots the current vault.db / vault.key, resets for a clean first-run, then imports a .aeroftp-keystore backup, and is reversible (the pre-reset snapshot is kept).
Validated cross-device. Verified on a second machine (Linux 0) over the NAS campaign: keyring-guard test 3/3 PASS (disposable master-mode vault leaves the real keyring fingerprint unchanged before/after, real vault still opens), status reports the correct states read-only, repair recovers from a backup and is reversible. Windows accepted.
Fixed on main in commit 5ec47d5a (merge 98dcf3ec, fix(vault): guard OS keyring on disposable vaults + add CLI keystore status/repair), shipping in v4.0.5.
Fixes (post-release, fixed): first-run migration race +
|
| # | Area | Description | Status | Linked issue |
|---|---|---|---|---|
| 8 | Vault / multi-user | First-run credential migration checked the schema version before opening its transaction, so two processes hitting the same vault at once (GUI + CLI) both passed the check and both tried to insert the default user, and the loser failed with Create default user: UNIQUE constraint failed: users.name_canonical. Pre-existing (affects v4.0.4). The migration now takes the write lock up-front (IMMEDIATE + busy_timeout) and re-checks the schema version inside the transaction, returning already-migrated instead of racing on the insert. |
🟢 fixed (pending release, v4.0.5) | this issue |
| 9 | CLI / keystore | keystore status returned exit 1 for any master-mode vault, conflating "healthy but locked" (just needs a password) with "broken / unopenable". It now exits 0 (unlockable now), 2 (healthy but locked: master mode, password not supplied), or 1 (genuinely unopenable, e.g. lost/overwritten keyring), and consults AEROFTP_MASTER_PASSWORD when present to verify a real unlock. |
🟢 fixed (pending release, v4.0.5) | this issue |
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released
Details & fix (v4.0.5)
#8, first-run migration race. migrate_legacy_payloads (the per-user partitioning first-run) read the schema version before BEGIN, a check-then-act window: with the GUI and a CLI invocation opening the same vault concurrently, both saw "not yet migrated", both started a transaction, and the loser hit UNIQUE constraint failed: users.name_canonical on the default-user insert. Fix: acquire the write lock up-front via transaction_with_behavior(IMMEDIATE) + a 5s busy_timeout so the two runs serialize, and re-check the schema version inside the transaction: if a concurrent process already completed the migration, return already_migrated instead of inserting. Regression test asserts a second connection on a shared on-disk DB reports already_migrated with exactly one default user.
#9, keystore status exit code. A static health probe cannot open a master-mode vault, so the previous code reported every master vault as unlockable: false and exited 1, indistinguishable from a genuinely broken vault. VaultHealth now carries a needs_password flag; in master mode the probe consults AEROFTP_MASTER_PASSWORD when present and actually verifies it. Exit codes: 0 unlockable now, 2 healthy but locked (supply a password), 1 unopenable (recover the vault). Verified end to end: absent → 1, master-no-password → 2, master-correct-password → 0, master-wrong-password → 2.
Fixed on main in a7d65060 (migration race) and 897bab96 (keystore status exit code), shipping in v4.0.5.
Feature (post-release, implemented): per-user credential partitioning (MU-VAULT)
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Details (v4.0.5)Your credentials are always strongly encrypted at rest (AES-256-GCM, with Argon2id wherever a human secret is involved). What you pick is the access gate, and that is a personal choice driven entirely by how you use the app:
The headline: AeroFTP now supports cryptographic isolation between users for the cases that need it (managing accounts for different web agencies, separating client projects, a shared workstation), while the zero-password default stays exactly as protected as it always was. Not setting a password is a normal, valid choice, not a weaker mode: the at-rest encryption is identical either way. During this release the per-user partitions are populated alongside the existing vault, which stays the source of truth, so the rollout is safe and reversible. Shipped on |
Feature (post-release, implemented): CLI
|
| # | Area | Description | Status | Linked issue |
|---|---|---|---|---|
| 13 | CLI / profiles | A refresh command (aliases clear and .) in aeroftp profiles -i clears the screen and reprints the table, re-reading from the vault so a profile changed in another session shows up. Empty-Enter stays inert and r (rename) is unchanged; the original view flags (--sort / --hide / --show / --breakdown) are preserved. |
🟢 implemented (pending release, v4.0.5) | #266 |
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released
Details (v4.0.5)
aeroftp profiles -i reprints the option list on a bare Enter but never the table, so there was no quick way to redraw it after a profile changed. The new refresh command (with clear and a single-key . as aliases) clears the screen and re-runs the binary's own profiles view with the original display flags, which re-reads the vault, so a profile edited in another session shows up immediately. Two deliberate calls from the reporter's note: a bare empty Enter still does nothing, because wiping the terminal on an accidental keystroke is intrusive, and r keeps being Rename rather than being repurposed. A unit test covers the view-flag reconstruction.
Implemented on main in 78f7ef09, v4.0.5.
Docs (post-release, done): rename the Mount Manager to AeroMount
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Details (v4.0.5)Per the wishlist proposal in #270, AeroMount becomes the Aero-family name for the Mount Manager, matching AeroSync and AeroVault. The in-app File menu entry and the dialog title now read AeroMount across all 47 locales as an untranslated brand name, the README "Aero family" section introduces it ("AeroMount, the Mount Manager of AeroFTP"), and the documentation site follows: the feature page, the sidebar nav label, and the current-state mentions in the CLI, MEGAcmd and encryption pages. "Mount Manager" stays usable as a descriptor, the Done on |
Fix (post-release, fixed): My Servers search for "web" surfaced an OpenDrive API profile
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Details & fix (v4.0.5)Searching "web" in My Servers surfaced an OpenDrive API profile whose name and host contain no "web". The profile was carrying a stale Fixed on |
Fix (post-release, fixed): consistent "Rclone Crypt" overlay naming (reserves "AeroCrypt")
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Details & fix (v4.0.5)The overlay uses the public rclone crypt format (unlock with the same password you would use in Fixed on |
Update: many-small-files benchmark axis (#17,
|
Update: custom icon picker on every Quick Connect page (#18,
|
Update: group saved connection profiles (#19,
|
🟢 Update: provider-group connection polish (#20, #21, #22, from #215)Three follow-ups to #215 landed on #20, account links across mode tabs ( #21, per-tab credential retention ( #22, MEGAcmd WebDAV endpoint auto-fetch ( Gates green: typecheck, clippy (lib plus CLI, with tests), Rust unit tests (20/20 on the MEGAcmd module, 4 new), i18n 46/46. Ehud co-authored. |
🟢 Update: Quick Connect docs links and CLI tree depth (#23, #24, #25, from #270)Three more from @EhudKirsh's wishlist landed on #23, OneDrive Get credentials URL ( #24, Docs link on every Quick Connect page ( #25, CLI tree depth ( Gates green: typecheck, clippy (CLI bin, with tests), fmt, i18n 46/46. Ehud co-authored. |
|
🟢 Queued for 4.0.5, rows 26-29 (all #215 / #270 follow-ups): 26: Filen Desktop bridges fall back to The Quick Connect two-column layout split stays open, waiting on Ehud's sketch. |
🟢 Update: four more from @EhudKirsh's wishlist (#30, #31, #32, #33, from #270)Four follow-ups from discussion #270 (@EhudKirsh) landed on
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 fixed (pending release) · ✅ released Details#30, Cryptomator / Archive windows ( #31, AeroFile toggle ( #32, 4shared Get credentials ( #33, heart marker ( Gates green: typecheck, |
🟢 Update: the three headline features for 4.0.5 (#34, #35, #36)The big-ticket items now queued for 4.0.5, kept short here with links to the design discussions for the full story.
|
🟢 Update: archives, SSH and Windows (#37 to #42)The rest of what landed on
|
|
🟢 Latest on |
|
🟢 Replies posted for this batch (announced with the upcoming 4.0.5 release). |
|
✅ Released as v4.0.5. Every item in the table above shipped in v4.0.5, now published on all channels. The two pillars are the native AeroCrypt encrypted overlay (with the AECR v3 pre-release hardening) and AeroVault v4 error correction, alongside the interactive CLI, server groups, file versioning, the Quick Connect improvements, the AeroFile and modal UX polish, and the Windows and cross-platform fixes from @rockaut and @EhudKirsh. Per the tracker convention, 4.0.x patches accumulated here; the next major line gets its own tracker. Known issues found in 4.0.5 will be logged in the section below as reports come in. Thanks to everyone who reported, tested and suggested. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
AeroFTP 4.0.x, Rolling Tracker
Umbrella issue for AeroFTP 4.0.x: known issues for the current release (v4.0.4, release notes, published 2026-06-06) and the patches/updates already landed on
mainfor the next patch release (v4.0.5).Before opening a new issue, please check the lists below. If your problem is already tracked here, just add a thumbs-up reaction or a comment with your environment (OS, version, provider) instead of filing a duplicate. We update this issue as bugs are found and fixed.
Found something that is not listed? Open a new issue and we will link it here.
What shipped in 4.0.4
u3/3uuser-switch tokens, reorder visual diff ([ v4.0.5 Wishlist ] share your enhancement suggestions ✨ #270)0x0window ([BUG] macOS 26.5 Tahoe - No window after splash screen #290), default-account welcome skip after tray Quit ([ v4.0.5 Wishlist ] share your enhancement suggestions ✨ #270), OAuth reconnect re-authorizing every time ([ v4.0.5 Wishlist ] share your enhancement suggestions ✨ #270), tray heap corruption on suspend/resume, CLI bootstrap hardening and rclone FTPS exportPatches & updates queued for 4.0.5
Done on
main, shipping in the next release.versionsgroup and versioning bytes indf9a6e6efd,8924590d,1392dcad,a7f26475,3bc3ffebprofiles -ireorder reprint: two-column old/new index diff with a merged arrow and colour codingc4763718,b03c646c5431c5fe6199d24caf4f3b2c--strict/AEROFTP_STRICTsafety modefcd512a69abfe2638241e8fevault-passphrase; new CLIkeystore status/keystore repairrecovery5ec47d5aUNIQUErace)a7d65060keystore statusexit code distinguishes healthy-but-locked (2) from genuinely unopenable (1)897bab96e5f612f5refreshcommand (aliasesclearand.) inaeroftp profiles -i. It clears the screen and reprints the table, re-reading from the vault so a profile changed in another session shows up. Empty-Enter stays inert andr(rename) is unchanged; the original view flags (--sort/--hide/--show/--breakdown) are preserved78f7ef09/features/mount-managerURL is kept so links do not break, and historical changelog / roadmap entries are left as shippedaee02c74providerId(opendrive-webdav) from a WebDAV to native-API protocol switch, leaking "webdav" into the search blob; the search now re-derives the provider identity from the current protocol when the stored providerId's protocol is inconsistent. Genuine WebDAV profiles still match "web"69c65a04e16209f3benchmark --file-count N --file-size S: a many-small-files axis (upload-all/list-dir/stat-all/download-all/delete-all) reporting files/sec and per-file latency, kept strictly separate from the single-file throughput sweep and never averaged into it. This is the workload where per-file overhead (handshake, signing, metadata round-trips) dominates and S3 pulls ahead of WebDAV/FTP. Two additive schema-v1 fields (file_count,files_per_second); validated live on SFTP, S3 and WebDAV profilesa3af07946c8d9fe3d8ed076e9dc727bf96e502abmega-webdav /(the same idempotent call already used for the quota probe) and fills the Endpoint field, so the URL no longer has to be copied from the MEGAcmd terminal. Setup step 4 drops from "Run: webdav /" to one click; an inactive MEGAcmd session surfaces the exact mega-login hint inline44c8fdaf#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade), the page where the OneDrive Client ID and Secret are created. The old#blade/Microsoft_AAD_RegisteredAppsdeep link no longer resolved reliablyf5759bbdgoogledrivetogoogle-drive,s3toaws-s3,foursharedto4shared, ...); an unmapped provider falls back to the provider's own help URL and then the providers index, so a working link always rendersd5e82716treesummary now reports depth: a 0-based layer ruler line ("0 | 1 | 2") above a reworded "X directories and Y files in a depth of Z layers", where Z is the deepest layer actually reached (a shallow tree reports less than the requested cap). The--jsonsummary gains an additivelayersfield629c5ab0f47b49baserver_modes_<id>(theserver_prefix routes them through the active user's partition, so they stay per-user isolated like the profile password) and hydrated back on edit, so switching modes never asks again even after a restart. Single-use TOTP/STS codes are stripped before persisting; unchecking deletes the stored set on the next save. Off by default. This is the on-disk piece Ehud asked for, and the MEGA/pCloud multi-tab request rides on itc4657a23,926247f3mega-webdav /itself (the same idempotent call used for the quota probe) and adopts the served URL, so there is no manual step: the first-setup, switched-to, connection-issue and general-connect cases all resolve automatically. The endpoint may be left blank; themega-webdav /wording is kept in the setup text and mode warning for MEGAcmd-familiar users, with the CLI equivalent (aeroftp --profile <name> ls) noted. A fourth "Non-WebDAV MEGAcmd" surface has no backend yet and is intentionally left out until one exists536dbb75treesummary layer ruler now prints a short legend, "layers (0 = top level, parent = -1):", directly above the numbers, so the 0-based depth is no longer ambiguous about whether 0 means the listed directory or its first level of children. JSON output is unchangedd7ac7ac2dark:variants, so on the Light theme the title, the Vault Password field and the close button were almost invisible. Both now follow the selected theme like the AeroVault window6cfefaba5c32f8b2invoke('open_url'), an unregistered command, inside a synchronous try/catch that never caught the promise rejection, so nothing opened; it now uses the sharedopenUrlhelper, pointed at the App Registrations page that carries the create-app form (developer/docs/app/)ba5bd340aeroftp-cliprofiles table, help, confirmation and TUI navigator. ThefavoriteMarkerpreference lives in the sharedapp_settingsvault key, so the CLI reads the same value the GUI writes; strings translated across all 46 locales25936eb8.aerocorrectsidecar, unified across the vault and AeroSync, with a standalone CLIcorrectsubcommand and MCP tools; v3 usability polish, and the Beta/stub labels dropped. Synthesis here, full design and validation in the wrapper-stack discussiond5e77ae7f,b5db4b214,6713b9581,4eb31feaf,9c36d7a7b,02176bbaa50cd5fc8d,64bb3989f,bf7d0db95,d77afb640,83e9769aa,4e577e253,ce4dea8e2,a839d3feb1.0.3-alpha(preview). A full-screen dual-pane file manager (aeroftp tui) with a GUI-style IntroHub My Servers view, a command palette, and file-manager table stakes (sort, filter, select, view, edit), plus the inlineprofiles -iaction menu. Ships as a discreet alpha preview, detail in discussion #311a3ee5747f,1c63abbc8,91427fa15,0888f0099,e0984f8f33a3fcf78ccompress/extract. Standalone local-archive subcommands for every supported format (zip, 7z, tar, tar.gz/xz/bz2; rar extract), with format, level, password and subfolder options3dd574e934bfd2d070aftpshort name +alias-toggle. The short command name and the alias toggle are now native on Windows, matching the Unix surface5d99dddc3AEROFTP_ARCHIVE_PASSWORDfor non-encrypted formats, and report tar archiveoutput_bytesvia the real output path243cf30ec,9151e961ajsonwebtokenfeature-flag change had broken Cryptomator unlock; restored, with the vault root prefilled6defb0190bf767f53fprofiles -inow focuses Quit(Q/0) so a stray Enter exits instead of re-indexing, and the action bar follows the table column order (re-index, Rename, Edit, Copy, Delete, Fav, List, Tree, Quit)e038027e4ecb9a3a43d1d1aab40,ae8f87e55>in the AeroFile path bar now opens the sibling-directory dropdown (and the "..." overflow menu); they rendered inside the bar'soverflow-hiddenand were clipped to invisibility, now rendered fixed------de696ee5de696ee5de696ee5de696ee5e78a8eafHousekeeping not listed above: internal docs/dev no longer published, roadmap history refresh, RUSTSEC-2026-0173 advisory triage (build-time only), flaky test hardening.
Examples
#2 -
profiles -ireorder (movingProfile2from#2to#4; old indices red and struck, new ones green, the moved row struck in white):#1 - Filen file versioning (CLI):
#6 - strict safety mode (CLI):
Known issues found after release
None reported yet. This list will be updated as reports come in.
Status legend: 🔴 confirmed · 🟡 investigating · 🟢 done / fixed (pending release) · ✅ released
Affected platforms
Maintained by the AeroFTP team. Released as v4.0.5. Patches accumulated here; each major release still gets its own tracker.
All reactions