Ghost FTP 0.0.4
Privacy-first FTP, FTPS and SFTP desktop client for Windows and Linux.
Release channel: Current.
GitHub prerelease flag: false.
Highlights
Windows and Linux desktop parity
- Completed Linux Light/Dark appearance parity using the same validated
Appearancesetting and shared palette contract as Windows; persisted appearance is applied before the first Linux frame and changes take effect immediately after saving Settings. - Added Linux file-pane sorting through the same shared
itemlist.SortByengine used by Windows: Name, Type, Size and Modified are available on both panes, with Permissions additionally available for the remote pane; ascending/descending cycles retain directories-first ordering and restore selection by item name. - Kept filtering and sorting composable and non-destructive. A fresh directory snapshot remains authoritative, visible rows are produced by
sort(filter(snapshot)), and row-indexed actions continue to target only the visible slice. - Preserved existing bounded recursive search and conservative directory-comparison modal geometry while adding the Linux sort control to the normal file-pane toolbar.
- Added Linux profile credential-save parity. Password/private-key passphrase persistence remains explicit, requires a bounded second confirmation, clears plaintext UI state after the operation and continues to use the protected local profile store and hardened AskPass/provenance boundary.
- Added Linux settings and sorting regression coverage so appearance persistence, sort order, remote permission ordering, unknown-metadata placement, filter composition and selection restoration cannot silently regress.
Android quality and stability
- Hardened the native Android FTP/FTPS parser with bounded control-line length, multiline reply count/size, MLSD line length and directory-entry count so a malformed or hostile server cannot grow response memory without a maintained limit.
- Preserved strict explicit FTPS certificate and hostname verification, staged upload/download final-name commit gates, non-blocking transfer cancellation, SAF-only local storage access, non-secret saved-site metadata and account-bound remote navigation state.
- Preserved the Android 35 system-bar inset correction and semantic accessibility-only navigation used by authentic emulator evidence; screenshot/color/coordinate navigation fallbacks remain prohibited.
- Android remains an active, installable development APK surface tied to root
VERSION; it is not silently promoted into the signed Windows/Linux public release allow-list.
Queue priority and reordering
- Completed four-way queued-transfer priority control with Top, Up, Down and Bottom actions through the shared transfer manager and Engine API.
- Reordering rotates only queued scheduler slots, preserving running/terminal history positions, transfer IDs, connection bindings and the relative order of unaffected queued jobs.
- Kept edge moves idempotent and event-free, while a real move emits one complete state snapshot without starting, retrying or cancelling transfer work as a side effect.
- Added Windows and Linux controls with the same queued-only policy, ID-based selection restoration and local copy for all 24 supported desktop languages.
- Added regression coverage for four-way ordering, non-queued slot stability, connection binding, tree-transfer directory-preparation ordering and cross-platform UI wiring.
Navigation bookmarks and profile start directories
- Added reusable local and remote bookmarks through a shared non-secret persistence model; remote bookmark identity contains only protocol, host, port and username and is captured from the real active Engine connection.
- Made bookmark activation authoritative only after fresh navigation: local targets must list successfully, while remote targets must match the active account and retain the same connection identity across the server listing.
- Added a native Windows bookmark manager and Linux X11 bookmark overlay with Open, Add local, Add remote, Delete and Close behavior wired through the shared Engine contract.
- Added an additional Windows
connectionGenerationguard around remote bookmark UI commits and Linux modal/action routing that keeps stored paths from bypassing the existing navigation lifecycle. - Hardened profile start-directory behavior so an inherited server path cannot silently cross a protocol/host/port/username account boundary; Linux also restores the previous verified local base and requires a successful local listing before a selected profile start becomes pane state.
- Added Go coverage plus
scripts/test_navigation_bookmarks_contract.pyfor non-secret persistence, corrupt-state fail-closed behavior, account/session revalidation, profile-start isolation, cross-platform UI wiring and documentation/release boundaries. - Added
docs/NAVIGATION-BOOKMARKS.mdand incorporated the completed feature into the 0.0.4 public desktop release line.
Release engineering and verification
- Advanced root
VERSIONto 0.0.4 while preserving the current GitHub Release channel (prerelease=false) and canonicalghostftp-vX.Y.Ztag namespace. - Kept the public release shape at 14 platform artifacts / 17 public files: two universal Windows executables, twelve canonical Linux distro/Portable artifacts and three metadata/verification files.
- Preserved optional fail-closed production Authenticode: configured trusted signing identities must verify, while an absent production certificate is recorded explicitly as unsigned rather than replaced by a self-signed identity.
- Kept Android outside the Windows/Linux public release asset allow-list until a maintained production signing/publication contract exists.
- Preserved exact-head CI, Android APK, Linux distro install, package parity and authentic cross-platform UI evidence as independent release-readiness gates.
Security and privacy
- Preserved strict FTPS certificate/hostname validation, SFTP host-key verification/pinning, trusted Linux AskPass executable/parent provenance, account-bound stored credentials, local root/path protections, protected-secret lifetime rules and no silent secure-to-plain downgrade.
- Preserved the no-telemetry, no-analytics, no-advertising, no-fingerprinting, no-hidden-backend and no-automatic-crash-upload contract across Windows, Linux and Android source surfaces.
Release tag
ghostftp-v0.0.4
Public platform packages
Windows:
- Ghost-FTP-0.0.4-Setup-x64.exe — 64-bit Windows installer.
- Ghost-FTP-0.0.4-Setup-x86.exe — 32-bit x86 Windows installer.
- Ghost-FTP-0.0.4-Setup-x32.exe — byte-identical compatibility alias of the x86 installer.
- Ghost-FTP-0.0.4-Portable-x64.exe — portable 64-bit Windows executable.
- Ghost-FTP-0.0.4-Portable-x86.exe — portable 32-bit x86 Windows executable.
Linux:
- Ghost-FTP-0.0.4-Linux-amd64.deb — Debian package for amd64.
- Ghost-FTP-0.0.4-Linux-arm64.deb — Debian package for arm64.
- Ghost-FTP-0.0.4-Linux-i386.deb — Debian package for i386.
- Ghost-FTP-0.0.4-Linux-amd64.tar.gz — package-manager-neutral portable archive for amd64.
- Ghost-FTP-0.0.4-Linux-arm64.tar.gz — package-manager-neutral portable archive for arm64.
- Ghost-FTP-0.0.4-Linux-i386.tar.gz — package-manager-neutral portable archive for i386.
- Ghost-FTP-0.0.4-Linux-multiarch.zip — bundle containing the three verified Debian packages.
GitHub Packages
- Package: ghcr.io/bren-wp/ghost-ftp:0.0.4
- Type: verified OCI distribution bundle, not a runtime container.
- Contents: the same verified release directory under /ghostftp-release/.
- Current aliases: 0, 0.0, latest.
- The workflow verifies the exact-version registry readback before completing publication.
Verification files
- SHA256.txt — SHA-256 checksums for every public release file except SHA256.txt itself.
- RELEASE-NOTES.txt — these notes generated from CHANGELOG.md.
- BUILD-METADATA.txt — version, release tag, source commit, signing state and distribution metadata.
Release contract
- Current Ghost FTP releases are not inferred to be prereleases from semantic-version major zero.
- 12 platform artifacts.
- 15 public release files total, including the three verification/metadata files.
- Active application platforms: Windows and Linux.
- Local language catalog: 24 selectable languages with English default/fallback.
- Application telemetry: disabled.
- Linux portable archives are structurally verified and their ghostftp executable must be byte-identical to the matching DEB payload before publication.
- Publication is bound to the exact verified main commit and followed by canonical latest-only retention verification.
Signing and trust
The workflow never fabricates publisher identities. Production Authenticode signing is optional: when a protected trusted certificate is configured, Windows artifacts are signed and verified; when it is not configured, the release remains explicitly unsigned and BUILD-METADATA.txt records WINDOWS_AUTHENTICODE=unsigned. Never treat a locally generated or self-signed certificate as a trusted public publisher identity. Always verify SHA256.txt and the official GitHub release location before installation or deployment.
Privacy
Release bundles contain only the explicit verified artifact allow-list. They do not contain saved profiles, FTP/SFTP passwords, private-key passphrases, signing private keys, local application data or user files.
What's Changed
- Harden recursive upload root validation by @bren-wp in #1
- Release ByFTP 2.12.1 with complete Windows and source bundles by @bren-wp in #2
- Release ByFTP 2.13.0: state hardening, queue scaling and release provenance by @bren-wp in #3
- ByFTP 2.14.0 — hrvatski projekt, sigurnost i uređeni repozitorij by @bren-wp in #4
- Dovrši ByFTP 2.14.0 verzijsku konzistentnost by @bren-wp in #6
- Objavi ByFTP 2.14.1 — završni source/build patch by @bren-wp in #7
- Objavi ByFTP 2.14.2 — transfer i lokalni staging hardening by @bren-wp in #8
- Objavi ByFTP 2.14.3 — fail-closed release i dubinski docs/security audit by @bren-wp in #9
- Ispravi Python 3.14 release regresije za ByFTP 2.14.3 by @bren-wp in #11
- ByFTP 2.14.4 — stabilniji listing, SFTP ključ i siguran disconnect by @bren-wp in #12
- ByFTP 2.14.5 — bounded disconnect i sigurniji reconnect by @bren-wp in #13
- ByFTP 2.15.0 — sigurniji profili, credential binding i host-key pin by @bren-wp in #14
- ByFTP 2.16.0 — pouzdanije povezivanje, x86, Linux i macOS by @bren-wp in #15
- ByFTP 2.16.1 — process-level connect smoke i stabilniji multi-platform CI by @bren-wp in #17
- ByFTP 2.16.2 — produkcijski release hardening i stvarna build privatnost by @bren-wp in #18
- ByFTP 1.0.0 — sigurnosni hardening i stabilna bazna linija by @bren-wp in #20
- ByFTP 1.0.0 — stabilniji terminal i putanje s razmacima by @bren-wp in #21
- ByFTP 1.0.0 — FTPS TLS hardening i verzijska konzistentnost by @bren-wp in #22
- ByFTP 1.0.0 — trajniji atomski state/config zapisi by @bren-wp in #23
- ByFTP 1.0.0 — brža i stabilnija curl capability provjera by @bren-wp in #24
- ByFTP — spriječi release drift bez VERSION bumpa by @bren-wp in #25
- ByFTP 1.0.1 — filesystem i SFTP hardening by @bren-wp in #26
- ByFTP 1.0.2 — remote commit revalidacija by @bren-wp in #27
- ByFTP 1.0.3 — stabilni lokalni upload source snapshot by @bren-wp in #28
- ByFTP 1.0.4 — transfer generation binding by @bren-wp in #29
- ByFTP 1.0.5 — shared-hosting FTP/FTPS kompatibilnost i marketinška dokumentacija by @bren-wp in #30
- ByFTP 1.0.6 — runtime stabilnost, lifecycle hardening i cleanup by @bren-wp in #31
- ByFTP 1.0.7 — SFTP RSA/SHA-2, transfer hardening i Unix cleanup by @bren-wp in #32
- ByFTP 1.0.8 — fail-closed cleanup i transfer lifecycle hardening by @bren-wp in #33
- ByFTP 1.0.9 — Windows installer transaction hardening by @bren-wp in #34
- ByFTP 1.0.10 — process-tree cancel i child lifecycle hardening by @bren-wp in #36
- Bump ByFTP version to 1.0.11 by @bren-wp in #37
- ByFTP 1.0.11 — Windows UI/UX i session stability finalizacija by @bren-wp in #38
- ByFTP 1.0.12 — English-first i18n and production cleanup by @bren-wp in #39
- ByFTP 1.0.12 — final premium UX, English-first and modular cleanup by @bren-wp in #41
- Revert "ByFTP 1.0.12 — final premium UX, English-first and modular cleanup" by @bren-wp in #42
- noop placeholder by @bren-wp in #44
- Finalize ByFTP 1.0.12 English-first release by @bren-wp in #46
- Finalize ByFTP 1.0.12 release by @bren-wp in #47
- Finalize FTP shared-hosting and quote operations by @bren-wp in #51
- ByFTP: English-first cleanup, installer language wizard and stability pass by @bren-wp in #49
- ByFTP 1.0.12 deep audit, cleanup and documentation refresh by @bren-wp in #52
- Finalize ByFTP 1.0.12 README and Windows production build by @bren-wp in #54
- Release ByFTP 1.0.13 by @bren-wp in #55
- ByFTP 1.1.0: add native Android client by @bren-wp in #56
- ByFTP 1.1.1: Android APK releases and maintenance hardening by @bren-wp in #57
- Chatgpt/byftp 1.2.0 ios 20260824 by @bren-wp in #58
- ByFTP 1.2.0: finalize Android/iOS CI and release docs by @bren-wp in #60
- ByFTP 1.2.1: mobile raw-input hardening and maintenance by @bren-wp in #61
- ByFTP 1.2.2: cross-platform lifecycle, path and credential hardening by @bren-wp in #62
- ByFTP 1.2.3: Go 1.27, Gradle 9.7 and build-surface cleanup by @bren-wp in #64
- ByFTP 1.2.4: cross-platform hardening and runtime cleanup by @bren-wp in #65
- ByFTP 1.2.5: canonical endpoint identity and profile hardening by @bren-wp in #66
- ByFTP 1.2.6: protocol-state cleanup and raw host validation by @bren-wp in #67
- ByFTP 1.2.7: strict raw username and port validation by @bren-wp in #68
- ByFTP 1.2.8: fail-closed profile persistence input by @bren-wp in #69
- ByFTP 1.2.9: preserve profile paths verbatim by @bren-wp in #70
- ByFTP 1.3.0: Android and iOS mobile parity by @bren-wp in #71
- ByFTP 1.4.0: mobile transfer progress and safe batch control by @bren-wp in #72
- ByFTP 1.5.0: shared-hosting connection diagnostics by @bren-wp in #73
- ByFTP 1.6.0: repository-wide integrity and maintenance by @bren-wp in #74
- Agent/byftp v1.7.0 web finalstage 20260831 by @bren-wp in #80
- Agent/byftp v1.7.0 web source 20260831 by @bren-wp in #77
- Agent/byftp v1.7.0 full cleanup web upload 20260831 by @bren-wp in #78
- Agent/byftp v1.7.0 full cleanup web batchtest 20260831 by @bren-wp in #79
- ByFTP 1.7.0: full cleanup, native fixes and ByFTP WEB integration by @bren-wp in #75
- ByFTP 1.7.1: bind release publishing to current main by @bren-wp in #81
- Fix WEB rate-limit reset and enforce repository audits by @bren-wp in #82
- Fix WEB batch rename rollback after partial promotion by @bren-wp in #83
- Fix WEB failed setup rollback artifacts by @bren-wp in #84
- Bind WEB profile credentials to account identity by @bren-wp in #85
- Fix WEB user creation workspace transaction by @bren-wp in #86
- Fail closed on stale WEB user registry backups by @bren-wp in #87
- Keep successful WEB logins independent of limiter cleanup by @bren-wp in #88
- Make WEB user deletion retryable and symlink-safe by @bren-wp in #89
- Make WEB audit subprocess decoding UTF-8 safe by @bren-wp in #90
- Fail closed on stale WEB rate-limit backups by @bren-wp in #91
- Fail closed on stale WEB app config backups by @bren-wp in #92
- Make WEB authentication rate limits atomic by @bren-wp in #93
- Short-circuit account limits for blocked login IPs by @bren-wp in #94
- Fail closed on stale WEB profile backups by @bren-wp in #95
- Fail closed on stale WEB preference backups by @bren-wp in #96
- Fail closed on stale WEB legacy migration backups by @bren-wp in #97
- Require pinned host key for SFTP connections by @bren-wp in #98
- Make WEB password writes generation-safe by @bren-wp in #99
- Release ByFTP 1.8.0 across all platforms by @bren-wp in #100
- Fail closed when WEB ZIP finalization fails by @bren-wp in #101
- Reject noncanonical WEB name inputs by @bren-wp in #102
- Harden WEB ZIP creation error paths by @bren-wp in #103
- Preserve .zip on long WEB archive download names by @bren-wp in #104
- Preflight WEB ZIP extraction before remote writes by @bren-wp in #105
- Reject conflicting WEB ZIP extraction topology by @bren-wp in #106
- Preflight existing remote ZIP topology by @bren-wp in #107
- Cover existing remote ZIP topology conflicts by @bren-wp in #108
- Harden WEB extraction and remove dead code by @bren-wp in #109
- Release ByFTP 1.9.0 across all platforms by @bren-wp in #110
- Release ByFTP 1.9.1 runtime and release hardening by @bren-wp in #111
- Bound WEB remote downloads against TOCTOU growth by @bren-wp in #112
- Ghost FTP 1.0.0 rebrand, hardening and multi-platform releases by @bren-wp in #113
- Ghost FTP 1.0.1 hard-cut rebrand, portable builds and GitHub Packages by @bren-wp in #114
- Ghost FTP 1.0.2 security, stability and metadata hardening by @bren-wp in #116
- Ghost FTP 1.0.3 web security, transfer integrity and release-doc hardening by @bren-wp in #117
- Ghost FTP 1.0.4 Web error-boundary and upload-preflight hardening by @bren-wp in #118
- Run read-only Ghost FTP 1.0.5 source audit by @bren-wp in #119
- Ghost FTP 1.0.5 HTML error-safety, dead-write cleanup and Web brand completion by @bren-wp in #120
- Ghost FTP 1.0.6 atomic overwrite recovery and repository hygiene by @bren-wp in #122
- Ghost FTP 1.0.7 atomic upload residual-data cleanup by @bren-wp in #123
- Release/ghost ftp 1.1.0 quality by @bren-wp in #124
- Ghost FTP 1.1.0: 24-language hardening and cross-platform quality release by @bren-wp in #125
- Ghost FTP Windows/Linux premium consolidation (historical merged PR) by @bren-wp in #126
- Ghost FTP 0.1.0 Beta: Windows/Linux baseline, Authenticode pipeline and production hardening by @bren-wp in #127
- Work/windows linux premium 2.0.0 by @bren-wp in #128
- Add shared premium desktop theme contract by @bren-wp in #129
- Work/ghostftp 0.2.0 desktop quality by @bren-wp in #130
- Stabilize Windows chrome and add in-app brand icon by @bren-wp in #131
- Release Ghost FTP 0.2.1 Beta desktop quality update by @bren-wp in #132
- Improve Ghost FTP file-pane sorting workflow by @bren-wp in #133
- Add keyboard-first Windows file workflow by @bren-wp in #134
- Add truthful transfer progress, speed and ETA by @bren-wp in #135
- Improve privacy-safe connection diagnostics by @bren-wp in #136
- Ghost FTP 1.0.0 Stable — release, Packages, privacy and reliability hardening by @bren-wp in #137
- Ghost FTP 1.0.0 Stable — optional Authenticode without generated production keys by @bren-wp in #138
- Ghost FTP 1.0.0 — post-release documentation and policy consistency by @bren-wp in #140
- Update Ghost FTP proprietary license to 1.3 by @bren-wp in #141
- Forget Linux SFTP secrets when sessions close by @bren-wp in #142
- Track SFTP protected-secret ownership by @bren-wp in #143
- Harden SFTP pending trust credential ownership by @bren-wp in #144
- Ghost FTP 1.1.0: Classic Light, UI quality and security hardening by @bren-wp in #147
- Harden Ghost FTP 1.1.1 desktop defaults, privacy and connection quality by @bren-wp in #149
- Hardening/ghostftp 1.1.1 deep quality by @bren-wp in #148
- Keep terminal language help in sync with the 24-language registry by @bren-wp in #150
- Refine Site Manager left navigation by @bren-wp in #151
- Prepare Ghost FTP 1.1.2 Stable by @bren-wp in #152
- Work/site manager navigation quality by @bren-wp in #153
- Post-1.1.2 security hardening and canonical release flow by @bren-wp in #154
- Fix Windows integrated uninstall registry contract by @bren-wp in #156
- Harden remote tree directory verification by @bren-wp in #157
- Harden local download root against path-swap races by @bren-wp in #158
- Release Ghost FTP 1.1.3 by @bren-wp in #159
- Stabilize process-tree cancellation regression by @bren-wp in #160
- Harden Ghost FTP 1.1.4 quality and desktop performance by @bren-wp in #161
- Prepare Ghost FTP 1.1.4 stable release by @bren-wp in #162
- Harden Ghost FTP for 1.1.5 and separate official product branding by @bren-wp in #163
- Prepare Ghost FTP 1.1.5 Stable release by @bren-wp in #165
- Harden local recursive delete against path-swap traversal by @bren-wp in #166
- Harden local mkdir against base path swaps by @bren-wp in #167
- Bind SFTP trust fingerprint directly to scanned key by @bren-wp in #168
- Fail closed on spoofable remote cleanup diagnostics by @bren-wp in #169
- Prepare Ghost FTP 1.1.6 Stable release by @bren-wp in #171
- Fail closed when a Ghost FTP release already exists by @bren-wp in #172
- Anchor tree-download directory preparation to opened filesystem roots by @bren-wp in #173
- Add distro-neutral Linux portable archives by @bren-wp in #174
- Document 1.1.6 as the published stable release by @bren-wp in #175
- Publish verified Linux portable archives in future releases by @bren-wp in #176
- Improve Windows footer spacing at minimum workspace height by @bren-wp in #177
- Add verified Linux distro-specific packaging by @bren-wp in #178
- Verify Linux distro package installation lifecycle by @bren-wp in #179
- Docs: align Linux distribution and install verification contract by @bren-wp in #180
- Windows: fix modal close lifecycle and modernize dialog theming by @bren-wp in #181
- Windows: replace chained settings prompts with one modern dialog by @bren-wp in #182
- Windows: unify modal palette and keyboard behavior by @bren-wp in #183
- Windows: theme decision dialogs and localize profile privacy flow by @bren-wp in #184
- Tmp by @bren-wp in #185
- Release/1.1.7 UI polish 20260908 by @bren-wp in #186
- Release: prepare Ghost FTP 1.1.7 Stable by @bren-wp in #187
- Docs: publish complete authentic local UI evidence by @bren-wp in #188
- Harden child-process diagnostic privacy boundary by @bren-wp in #189
- Preserve MLSD fallback classification after diagnostic redaction by @bren-wp in #190
- Redact ssh-keyscan diagnostics from user-facing errors by @bren-wp in #191
- Stop retaining raw child-process diagnostics in tool errors by @bren-wp in #192
- Security: block Linux transport PATH shadowing by @bren-wp in #193
- Security: pin Linux AskPass to running executable identity by @bren-wp in #194
- Security: pin config state directory identity by @bren-wp in #196
- Security: pin installer directory identity by @bren-wp in #197
- Fix: preserve foreign Windows shortcuts by @bren-wp in #198
- Security: delete owned Windows shortcuts by verified handle by @bren-wp in #199
- Security: harden Linux AskPass executable provenance by @bren-wp in #195
- Security: bind legacy uninstaller cleanup to ownership proof by @bren-wp in #200
- Security: preserve unowned Start Menu parent directory by @bren-wp in #201
- Security: bind integrated Windows uninstall to executable identity by @bren-wp in #202
- Fix: keep Windows workspace inside monitor work area by @bren-wp in #203
- Docs: add production engineering and website prompts by @bren-wp in #204
- Release: prepare Ghost FTP 1.1.8 Stable by @bren-wp in #205
- Feature: add secure remote text edit engine by @bren-wp in #206
- Feature: add built-in remote editor to Windows and Linux by @bren-wp in #207
- Fix: refresh remote metadata after editor save by @bren-wp in #208
- Release: reset Ghost FTP public line to 0.0.1 by @bren-wp in #209
- Hardening: post-0.0.1 reliability, UI contracts and documentation by @bren-wp in #210
- Feature: safe transfer queue priority reordering by @bren-wp in #211
- Linux: add transfer queue priority parity by @bren-wp in #212
- Linux: harden transfer queue action state and errors by @bren-wp in #213
- Windows: eagerly bind state directory filesystem identity by @bren-wp in #216
- Windows: enforce installer artifact and integrated-uninstall contract by @bren-wp in #215
- Desktop: add safe local and server current-folder filters by @bren-wp in #217
- Feature: bounded recursive local and server search by @bren-wp in #218
- Feature: conservative directory comparison and synchronized navigation by @bren-wp in #219
- Fix: harden directory comparison review edge cases by @bren-wp in #220
- Release prep: Ghost FTP 0.0.2 by @bren-wp in #221
- Docs: bind roadmap to Ghost FTP 0.0.2 by @bren-wp in #222
- Feature: bandwidth-aware transfer controls by @bren-wp in #223
- Packaging: unify Windows downloads and promote distro-specific Linux artifacts by @bren-wp in #224
- Release prep: Ghost FTP 0.0.3 packaging and bandwidth release contract by @bren-wp in #225
- Queue priority: add Top and Bottom with queued-only stable ordering by @bren-wp in #226
- Android: add native FTP/FTPS client and APK build by @bren-wp in #229
- Android: add saved sites, bookmarks and start directories by @bren-wp in #230
- Android: stage remote uploads before final commit by @bren-wp in #231
- Android: stage local downloads before final name commit by @bren-wp in #232
- Android: make active FTP transfers cancellable by @bren-wp in #233
- Android: fail closed on passive data setup errors by @bren-wp in #234
- Android: add bounded truthful transfer progress model by @bren-wp in #236
- Android: wire transfer progress to real I/O by @bren-wp in #237
- feat: add account-bound navigation bookmarks and profile start directories by @bren-wp in #227
- Android: serialize transfer cancellation with final-name commit by @bren-wp in #240
- Android: add mobile navigation workspace and runtime-owned surfaces by @bren-wp in #241
- CI: authentic cross-platform UI screenshot pipeline by @bren-wp in #242
- Fix: validate cross-platform UI screenshot workflow by @bren-wp in #243
- Fix Android authentic foreground validation by @bren-wp in #244
- Retry Android drawer semantics before failing by @bren-wp in #246
- Prepare Ghost FTP 0.0.4 platform parity and Android completion by @bren-wp in #247
New Contributors
Full Changelog: https://github.com/bren-wp/Ghost-FTP/commits/ghostftp-v0.0.4