Repository navigation
Replies: 16 comments
Post-4.1.1 batch: crypt overlay reconnect and WebDAV upload, text preview copy/selection, 2FA layout, benchmark aliasPost-4.1.1 follow-up, fixed on Five items landed together, two of them the deeper crypt-overlay reports on OAuth and WebDAV.
Still open from the same reports, both needing a live provider repro before a fix: the RCLONE CRYPT button vanishing after a protocol switch and reconnect (#385), and Verified green: |
Compression level presets aligned with the 7-Zip canonical levelsLanded on The Compress dialog used to offer three or four preset buttons (Fast/Normal/Maximum, plus Store for zip) mapped to 1/6/9. It now exposes the six canonical 7-Zip presets, so what you pick in AeroFTP matches what 7-Zip would do at the same name: Store=0, Fastest=1, Fast=3, Normal=5, Maximum=7, Ultra=9. The default moves from 6 to 5, which is 7-Zip's actual "Normal".
Live CLI check on a 3 MiB payload built to defeat small windows (a 1.5 MiB pseudo-random block repeated twice) plus a text file:
Extraction roundtrip verified: md5 of the extracted files matches the sources for 7z level 9, 7z default and tar.xz level 9. Verified green: cargo fmt, clippy -D warnings (lib+tests+CLI), full cargo test (targeted: |
Standalone gzip / xz / bzip2 compression (single file)Post-4.1.1 follow-up, done on AeroFTP already compressed with gzip, xz and bzip2, but only wrapped inside a tar (
Verified green: |
Full-surface security and hardening audit: 16 findings fixedPending release follow-up, fixed on branch I ran a whole-app security, correctness and hardening pass over the entire code surface (backend Rust and frontend). It produced 16 confirmed findings, all fixed on the branch above and put through the full green gate. Two raw findings were rejected as unreachable after verification (a legacy plaintext FTP path that no TLS profile can actually reach, and a Google API key redaction gap that cannot fire because the key travels in a header, never a URL). No credentials, hosts or infrastructure details appear here. High severity
Medium severity
Low severity
Methodology: multi-agent orchestrationI wanted this pass to be broad and skeptical rather than a single linear read, so I ran it as a model orchestration. Discovery was a fan-out over 15 code surfaces (vault and crypto, OAuth and token handling, the cloud and XML providers, FTP and SFTP transport, the sync and transfer engine, the native rsync wire protocol, the Tauri IPC command surface, the agent and MCP tool boundary, the peer transfer layer, the CLI, and the frontend security surface). One finder agent per surface, each with a tight file scope and a surface-specific threat lens. Every finding then went through an adversarial per-surface verifier whose job was to refute it against the actual code, not to confirm it: default to skepticism, construct the concrete failure or reject the finding, and correct the severity (finders inflate). Only findings that survived that refute-first pass were kept, which is how 18 raw findings became 16 confirmed and 2 rejected. The finder and verifier stages ran on Opus 4.8. Fixing was orchestrated too. I kept the three most delicate fixes for myself on Fable 5 (the sync path traversal, the signature-verified install gating, and the Azure SAS layout), and delegated the rest to a second parallel fix-workflow, grouped so each agent owned a disjoint set of files and no two agents could ever touch the same file. I reviewed every returned diff centrally and put the whole set through one green gate. Verified green: cargo fmt, cargo clippy with all features across lib, bins and tests with warnings denied, cargo test (2474 plus 425 plus the smaller suites, 0 failed, including new tests for the path-traversal guard and the negative-length varint), and the frontend TypeScript typecheck. The DebugPanel redaction was also checked functionally against real credential-bearing inputs. |
7z Advanced options: method, dictionary, solid block, threadsPost-4.1.1 follow-up, done on 7z compression now exposes 7-Zip's advanced encoder controls, in a collapsed "Advanced" section of the Compress dialog and as flags on
Live proof (CLI, cumulative with the standalone gz/xz/bz2 work):
Verified green: |
CI follow-up: security-regression aligned to the hardened rm denylistThe full-surface audit (item 8) tightened the Test-only, no security behavior change. Gate green afterwards (security:regression, Build AeroFTP, Delta Sync). 🟢 done |
Archive-format read completeness: create-vs-open asymmetry closedPost-4.1.1 follow-up, fixed on Final step of the staged compressor integration: every advertised archive format now has full read + write with no create-vs-open gap. Four focused commits landed on
ZIP non-Deflate: interoperability proof (aeroftp-cli + 7-Zip 23.01)Both directions verified end-to-end on an 11.6 KB payload (sha256 Direction A, AeroFTP writes and 7-Zip opens:
Direction B, 7-Zip writes a non-Deflate method and AeroFTP extracts:
ZIP compression-method compatibility matrix (v4.1.2)
"AeroFTP writes" = what the app emits by default (Store/Deflate + optional AES-256). The new codecs are read-only additions; nothing about what AeroFTP produces changes, so archives it writes stay universally openable. Known limit: PPMd-in-zip (method 98) stays unread. Enabling it pulls an extra codec crate and PPMd inside a .zip is rare (a 7-Zip advanced option, never a default). It can be added later in a focused commit if a real PPMd .zip needs it. Five open-only regression tests guard this ( Verified green (local, before push): CI on |
2FA Quick Connect: Internxt code field now matches Filen and MEGAPost-4.1.1 follow-up, fixed on Completes the #369 layout pass (row 3). When the Filen and MEGA Two-Factor Code fields were compacted, the Internxt Quick Connect form was left with the old full-width field and the "optional" placeholder, so the three 2FA pages did not match. Internxt now uses the same compact six-glyph field, keeping its own blue accent. Internxt has no saved-secret field, so the live TOTP preview reposition (Filen and MEGA only) does not apply there.
Verified green: typecheck ( |
AeroShare LAN (mDNS) discovery: fully offline same-subnet transfersPost-4.1.1 update, done on AeroShare discovery so far used n0 DNS or the Mainline DHT, both of which need the internet to bootstrap, so a fully offline, firewalled, same-subnet transfer could not find the other device. This adds a local mDNS path.
Verified green: cargo fmt, clippy with warnings denied ( |
Interactive
|
| Area | Description | Status | Ref |
|---|---|---|---|
clear vocabulary |
Removed from the refresh set; now a plain screen wipe (section_is_clear), no table reprint |
🟢 fixed | 8d7a0d2dc |
cls / . / refresh |
Clear the screen and reprint the table (reload from vault): the F5 refresh | 🟢 fixed | 8d7a0d2dc |
groups -i / users -i |
These reprint the table every iteration, so a new SectionPending::PlainClear suppresses the one reprint after a plain clear |
🟢 fixed | 8d7a0d2dc |
| Help + action bars | The h help and the compact action lines in all three sections now list cls / . / refresh and clear separately |
🟢 fixed | 8d7a0d2dc |
Verified live by driving each section through a real PTY (the -i loop needs a TTY) and counting how many times the table is rendered per command: a refresh renders it twice (the view once, plus the reprint), a plain clear renders it once (no reprint).
| Section | cls |
. |
refresh |
clear |
|---|---|---|---|---|
profiles -i |
reprint (2x) | reprint (2x) | reprint (2x) | plain wipe (1x) |
groups -i |
reprint (2x) | reprint (2x) | reprint (2x) | plain wipe (1x) |
users -i |
reprint (2x) | reprint (2x) | reprint (2x) | plain wipe (1x) |
cls is also no longer reported as an unrecognized command (0 occurrences in the PTY run), and the h help renders the new split lines in every section.
Verified green: cargo fmt --check (clean), cargo clippy --bin aeroftp-cli -- -D warnings (0 warnings), cargo test --bin aeroftp-cli (426 passed, 0 failed, including the updated shared-vocabulary predicate test), plus the live PTY run above.
Koofr WebDAV endpoint dropped on an in-edit mode switch (404), plus Quick Connect consistencyPost-4.1.1 follow-up, fixed on Editing a saved Koofr profile and switching Native API to/from WebDAV produced a 404 (and, for a crypt profile, the overlay button vanished, because the connection never came up). The per-mode credential stash keyed on
Verified green: frontend typecheck (tsc, 0 errors), i18n:validate (47 locales, 0 missing, 0 warnings, 0 placeholders), and a live round trip on a real Koofr account (endpoint, connection, labels, Advanced). |
Add Service table view: single Grid/Table toggle, context-aware generic strip, Microsoft naming, Uploadcare fixPost-4.1.1 follow-up, done on A second batch of Add Service table refinements from the #274 thread, on top of the badge-order / DriveHQ fix already logged (row 17).
Kept as-is on purpose: the category icon + name header at the top-left of the table. It is the "you are here" indicator for the category picked in the left menu, and its row also hosts the view toggle and health controls, so removing the label would not reclaim any vertical space for the search bar. Verified green: |
MEGA API/CMD Quick Connect now uses the two-column layout (Crypt overlay included)Post-4.1.1 follow-up, fixed on MEGA grew its modes over time: CMD first, then API, then S4 and the local WebDAV bridge. The tabbed form was built while every Quick Connect page was single-column, so API and CMD kept that legacy layout while the newer S4 and WebDAV-local modes already used the shared two-column form. The result was three gaps on API/CMD only, all with one root cause (the single-column branch never called the shared right column), all fixed together.
Behaviour preserved: edit-mode Save stays blocked while a fresh one-time TOTP is typed, the MEGA red accent and the MEGA name / remote-path placeholders and E2E note carry over, and the MEGA-specific "Remember session" and "logout on disconnect" boxes stay in the left column. The edit-mode footer now matches the standard Cancel / Save-as-new / Save used by S4, WebDAV-local and all other providers.
Verified green: typecheck (tsc, 0 errors), the test suite (parity + doc-tests, all passing), i18n 47 locales clean (no new keys), and live on a real MEGA account. |
kDrive Quick Connect refinements, consistent name casing, and digit-only 2FA / Drive-ID fieldsPost-4.1.1 follow-up, fixed on Three related Quick Connect refinements from the thread, all shipped together.
Adds Verified green: typecheck (tsc, 0 errors), the test suite passing, i18n 47 locales clean, and confirmed visually in the running app across the kDrive, Google Drive, Internxt and MEGA Quick Connect pages. |
Pre-tag commit audit: PASS, six minor findings fixed before the tagPre-release quality gate for v4.1.2, fixed on Confirmed clean: no path traversal in the new extract lanes (symlink chains, hardlinks and validate-before-create ordering all covered), no secret logged or misdirected by the credential migrations, MEGA two-column reuses the single shared crypt-overlay path, dependencies clean (one new MIT crate, no RUSTSEC).
Hygiene in the same pass: the two orphaned Verified green after the fixes: |
✅ Released: AeroFTP v4.1.2v4.1.2 is published: release notes, all platforms green (Linux, Windows, macOS x64/aarch64), artifacts sigstore-signed, Snap on stable, AUR bumped. What shipped (24 tracked rows, full detail in the table above and the release notes): complete archive format coverage (standalone gz/xz/bz2 round-trip, 7z Advanced options, ZIP non-Deflate read methods, safe tar links, multi-volume detection, 7-Zip canonical presets), the full-surface security audit (16 findings fixed) plus a pre-tag commit audit (PASS, 6 minor findings fixed before the tag), AeroShare LAN (mDNS) discovery with relays fully disabled in lan mode, the Quick Connect consistency pass, the crypt overlay fixes reported against v4.1.1, and a delta transport-drop classic fallback found and fixed hours before the tag. Thanks @EhudKirsh for the reports and verifications throughout the cycle. This tracker is now closed; the next one is #1411. A release is also a moment. This one was cut from a natural park by the sea, because the primary rule of a free app is that building it must stay fun: |

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.1.2, Rolling Tracker
Umbrella issue for the next AeroFTP point release (v4.1.2): known issues reported against v4.1.1 and the patches/updates landing on
mainafter the v4.1.1 tag.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.1.1
See the v4.1.1 tracker (#370) and the release notes for the full 4.1.1 change set: the transparent CryptOverlayProvider decorator (AeroCrypt and rclone-crypt encrypted end to end at every provider chokepoint, fail-closed), the AeroShare anti-flood gate and public-DHT opt-out (both v4.1.0 security follow-ups closed), 7z encrypted-header create, Kilo Gateway as a native AeroAgent provider, benchmark group/all selection, Resume interrupted transfers, and the v4.1.0 feedback triage batch.
Patches & updates queued for 4.1.2
Done on
main, shipping in the next release. Items appear here as they land.aero benchmark --all-protocolsalias for the existing--allflag (benchmarks every saved profile), so the intent reads clearly.5a0b0fa60Ctrl+Cnow copies the selection, and gutter line drag-selection tracks both ways. The global file-managerCtrl+Cshortcut preventDefaulted the native copy so only right-click Copy worked; it now yields to an active text selection. The line-number drag stopped extending when the pointer left the narrow gutter column (worst going down); it now tracks from a window mousemove that maps the pointer Y to a line.624e016f6000000placeholder) on all three pages, and on Filen and MEGA the live TOTP preview (key, code, copy, timer) sits on the 2FA Secret label row instead of below the input (Internxt has no saved-secret field, so only its code field was compacted).6dbe4255a,52e048caef7e4b4ad457058b9eb--levelhelp, with the two new preset labels translated across all 47 locales. Verified live via CLI: each preset reaches the encoder (level 1 vs 3+ shows the window-size dedup difference) and an unset level produces a byte-identical archive to level 5.e5aa6b79f.gz/.xz/.bz2with no tar wrapper). The Compress dialog adds GZ/XZ/BZ2 cards with the 7-Zip preset levels, enabled only for a single non-folder selection (otherwise disabled with a "single file only" hint); the CLI infers the format from the extension (longest match keepsfoo.tar.gza tarball) and rejects a multi-file or folder input with a pointer to the tar variants; the new hint label is translated across all 47 locales. Compression only for now: standalone extraction stays out (the CLI rejects it, pointing at gunzip/unxz/bunzip2 or the tar variants).0d2d35e12sync_treedownload engine, unbounded eager allocation from a server-declared native-rsync block count, FileLu API key leaking into surfaced errors. Medium: privileged auto-update installs now fail closed on a backend-authoritative registry of signature-verified artifacts, Azure Service SAS rebuilt to the correct 16-field layout, MEGA and OpenDrive session ids redacted from errors, native-rsync symlink varint panic guarded,shell_executemeta-character filter closed for redirection and glob, DebugPanel redaction extended to serialized secret fields. Low: vault mountpoint collision hash, component-aware update-path boundary, MCP deny-list parity, bounded peer inbound-rate map, CLI edit temp 0o600 with no-follow, constant-time SFTP serve auth. Produced by a multi-agent orchestration (fan-out finders plus adversarial refute-first verify on Opus, orchestration and the critical fixes on Fable), gated green (fmt, clippy with warnings denied, cargo test 0 failed, frontend typecheck).1201bbd33aeroftp compressflags, exposes the 7z content method (LZMA2 default, plus LZMA, PPMd, BZip2), an LZMA2 dictionary size and thread count, and a solid-block option (one pack for every file: better ratio on many small files, slower random extraction, off by default). Every method is decodable by the extractor (so an unreadable archive is never created) and word size is intentionally omitted (not exposed by the library in this version). Seven new labels translated across all 47 locales. Verified live via CLI: all four methods and the solid option create-and-extract round-trip, solid beats non-solid on many small files (10101 vs 13678 bytes), and dictionary/threads plus an AES-256 + PPMd archive round-trip.f0a183079.gz/.xz/.bz2now extracts through the real extract path (extract_single_core), so the standalone compress lane shipped earlier (row 7) is a full round-trip and no longer create-only. The member name is the archive name minus the codec extension, and the CLI, GUI and AI extract verbs all reach it.5bb7d0f32.7z.001,.zip.001,.z01or.r00part gets a specific "multi-volume (split) archives are not supported: rejoin the volumes with 7-Zip/WinRAR" message in the extract probe instead of the generic "Unsupported archive type", with no extraction attempted. Real multi-part RAR (.partN.rar) is deliberately left on the normal.rarlane so it keeps working (unrar follows co-located volumes).6040a8883tar_unpacknow handles directories, links and files separately: a link target is validated with the same in-root check as file paths, an in-root symlink is recreated (unix), and a malicious link pointing outside the destination (for exampleevil -> ../../../../etc/passwd) is never materialised and is surfaced in the report. Off unix the link is skipped and reported rather than silently dropped.12238bce5zipcrate was built withdeflate+aes-cryptoonly. The read codecs are now enabled, so such archives open and extract byte-exact; the write path is unchanged (AeroFTP still emits Store/Deflate + AES, which every native archiver opens). Full bidirectional interop with 7-Zip verified. See the follow-up comment for the interop test table and the compatibility matrix.cdbe79c62-isections splitclearfromcls/.Inprofiles -i,groups -iandusers -i,clearwas an alias of the F5-style refresh (it wiped the screen AND reprinted the table), which is surprising for a command calledclear. Nowcleardoes a plain screen wipe with no reprint (the universal terminal behaviour), whileclsand the single-key.keep the clear-and-reprint refresh (as does the full wordrefresh).rstays Rename. Verified live under a PTY across all three sections. See the follow-up comment for the test table.8d7a0d2dclandiscovery mode resolves peers over local mDNS only, publishing nothing to n0 or the public DHT, so two devices on the same subnet find each other fully offline (no internet, no relay): the firewalled or sandboxed case. mDNS is also folded into the defaultbothmode, so LAN peers resolve instantly there too. Adds theiroh-mdns-address-lookupcrate, a "LAN only (mDNS)" option in the AeroShare discoverability setting, and thediscovery_lanlabels across all 47 locales.a23839c39, and Koofr's preset-less native API falls back to the protocolkoofrwhile its WebDAV preset's providerId is alsokoofr(the same key), so the switch stashed the API creds and instantly restored them as the WebDAV mode, leaking the bareapp.koofr.nethost over the presethttps://app.koofr.net/dav/Koofr`. Now keyed collision-free (`providerIde80813eb5648b18df8provider.modes.lockedInEdittranslated in all 47 locales. The provider mode-tabs "locked in edit" hint referenced a key that existed in no locale, flooding the console with missing-translation warnings on every edit of a mode-group profile.bcd76c1d23ac01e8333372621ccf3373b8b81234567placeholder, a green "Find your Drive ID" link to the kSuite page (the id shows in the address bar) and an amber "Create an API token" link to the Infomaniak token page, replacing the old help-text line. The provider name at the top-right of every Quick Connect page no longer force-uppercases single-preset connectors (Dropbox, OneDrive, Box, pCloud, Filen, kDrive, Google Drive and the rest read with proper brand casing; MEGA stays all-caps). The 2FA code fields (Filen / MEGA / Internxt) reject any non-digit via a shared handler, so a stray character can never make a TOTP silently wrong. Adds three kDrive labels across all 47 locales.c8439475d8f2b7a3b6793c0fd87aa289455c,f40e3b129,35d0fce03Requested / under consideration
Community ideas captured for triage. Not committed to a release yet. Carried over from the v4.1.1 tracker.
WM_DEVICECHANGElistener emittingvolumes-changedon device arrival/removal would make it instant; lighter mitigations are a refetch on window focus or a shorter poll interval. Surfaced during the #351 eject verification on real Windows hardwareStorageProvidertrait, recommending a hybrid model. Implementation is a later, separate effort-iselectors (prioritised by the reporter ahead ofEdit(E)and the 2-letter semantics; exact behaviour to be pinned)users -i: a verb sousers -ican add/remove groups to/from a user. The groups-side counterpart (groups -ia/xfor member profiles) shipped in 4.1.0; this remaining users<->groups direction needs the data model pinned first, since groups live inside each user's partition.jpgto.jxltranscode in AeroFile: JXL re-encodes an existing JPEG losslessly and reversibly (the original JPEG bytes reconstruct exactly), for a real size win with no quality loss. Candidate framing: AeroFile as a GUI for libjxl.mp3to.opusis destructive and should not be done silently)AeroFTP.ArchiveProgID + WindowsCapabilities/RegisteredApplications/OpenWithProgidsthat make zip/7z/tar/rar actually display the icon and list AeroFTP under "Open with" and Settings > Default apps. Available-opener only, never a forced default (decision c). Needs both hooks.nsh and the WiX fragment, plus a clean-machine Explorer eyeball of the MSI icons (the v4.1.0 dev-runner check had HKCU competitors masking the render; the HKLM registry was verified correct).icnsmulti-size (the v4.1.0 ones are single-resolution drafts). Needs a Mac to build and live-testxdg-mime default(works immediately), Windows registers capabilities and opens the OS chooser (Windows 8+ blocks silent forced association, so honest copy "Windows will ask you to confirm"), macOS best-effortLSSetDefaultRoleHandlerForContentType. Cross-platform follow-up to the OS extract / icon workparticipants/addcontactUUID format (currently a best-effort workaround), investigate the Filen free-plan 10-note limit ghost-note cleanup, and add a rich text editor for the rich note typeaeroftp dedupe, and as an agent tool). Part of a broader principle: deterministic, repeatable file chores should run as ready-made native features or plugins, not through an LLM. The plugin lane (manifest plus script, no AI) is the natural home for these but is currently gated: the signed-registry client is unfinished and CLI plugin support is pending (Fase 6.4, Low). Related to the lossless jpg-to-jxl transcode already tracked above (item 5)findTrackedEntryinuseTransferEvents.ts), so acompleteevent from one attempt can tick a different same-name item, including a failed one. Surfaced live on 2026-07-05 while reproducing the delta transport-drop bug (whose data-path fix shipped in v4.1.2, removing this bug's main trigger). Fix direction: disambiguate the correlation (transfer_id-first, never complete an item inerrorstate, tie-break same-name items by queue order/state). Needs a controlled repro before touching the queue state machinemalloc(): unaligned fastbin chunk detectedwhile deserializing a D-Bus message: the classic GLib heap-corruption signature. The corruptor is the asyncapp_readycommand mutating the tray off the main thread; the GDBus worker is only the victim tripping over the poisoned fastbin. Pre-existing (NOT a v4.1.2 regression), reproduced live on 2026-07-05 with a full backtrace; it can leave the whole app in a corrupted state (cascading transfer failures until restart). A fix patch already exists (marshal every GTK/tray mutation throughAppHandle::run_on_main_thread), pending retrieval and commit. First item for the next cycleKnown issues found after release
Reported against v4.1.1. Fixed items ship in v4.1.2; reporters close after confirming in the release.
Status legend: 🔴 confirmed · 🟡 investigating · 🔵 planned / idea · 🟢 done / fixed (pending release) · ✅ released
Affected platforms
Maintained by the AeroFTP team. Current release v4.1.1 (#370), next v4.1.2. Patches accumulated here; each release line still gets its own tracker.
All reactions