zftp is in active development. This page describes the repository as it stands: the two-layer app/engine split, the build layout and the front-end surface. The roadmap column marks each area as implemented or planned against the code as it stands — it is not a claim of coverage beyond the codebase. Nothing here claims a working capability that is not yet in the codebase.
Two-layer split
| layer | repository | responsibility |
|---|---|---|
| desktop app | zftp (this repo) | Tauri v2 shell, cyberpunk HUD front-end, action-to-engine wiring, embedded terminal |
| transfer engine | zftp-core | bookmark + URL/.duck parsing, session manager, transport backends, transfer queue, logs, stats — decoupled from any GUI |
Build layout
| path | role |
|---|---|
| app/src-tauri | thin Tauri host: registers zftp_invoke + terminal + the app-layer overlay commands (nettools.rs, srvtools.rs, sites.rs, filetools.rs, xfer.rs, creds.rs) and the native menu; setup mounts the engine |
| crates/zftp-core | the embeddable file-transfer engine (submodule, tauri feature) |
| crates/zpwr-embed-terminal | shared embedded PTY terminal (submodule) |
| crates/zpwr-i18n | shared i18n runtime (submodule) |
| crates/… | the rest of the shared stack, all submodules: zgui-core, zgui-bridge, zwire-host, zpwr-file-browser, zpwr-hooks-editor, and the zpdf-core / zemail-core / zoffice-core engines (see .gitmodules) |
| frontend | app shell; engine-view/terminal/i18n assets synced from the submodules before each dev/build |
| scripts | clean · bust · rebuild · nuke (cyberpunk-styled, ported from Audio-Haxor) |
Front-end surface
The HUD (mounted from zftp-core/frontend) renders a bookmark list with live status dots, a connect/disconnect action, a remote-file browser with a name filter, a transfer queue with per-transfer progress, a live log viewer, a connect-to-server modal (enter a scheme://user@host/path URL), a command palette, and the shared embedded terminal. It drives the engine entirely through invoke('zftp_invoke', { cmd, args }) and listens for zftp-event; all wiring is CSP-safe (no inline handlers).
An app-owned Network Toolkit overlay (frontend/nettools.js, ⇧⌘N / ⌘K palette) adds host-side server testing and discovery: DNS resolve, a TCP reachability probe with latency, a parallel scan of the well-known file-transfer ports, the local outbound IP, and importable entries from ~/.ssh/config, ~/.ssh/*.pub and ~/.netrc (secrets never surfaced). It calls the app-local nettools.rs commands directly (not zftp_invoke) and is fully CSP-safe.
An app-owned Transfer Planner overlay (frontend/planner.js, ⇧⌘P / ⌘K palette) surfaces the engine's own transfer-planning commands — transfer.estimate (preflight cost/ETA), queue.schedule (weighted-fair scheduler), transfer.segments, transfer.backoff and transfer.resume_check — that the mounted view never exposes. Unlike the other overlays it dispatches through the engine via zftp_invoke; every command is pure-compute, so it works with no live transport. Adds no Rust (those commands are already registered) and is fully CSP-safe.
Roadmap
| area | status |
|---|---|
| App shell + HUD + engine wiring | implemented |
| Bookmark model + URL/.duck import | implemented in engine |
| Session manager + transfer queue + logs + throughput | implemented in engine |
| Local-filesystem transport (browse + transfer) | implemented in engine |
| Network transports (FTP/FTPS/SFTP/WebDAV, plus SCP) | implemented in engine (default net feature; OpenDAL + russh) |
| Cloud object stores (S3/GCS/Azure/B2/Swift/Drive/Dropbox/OneDrive/Box) | implemented in engine (OpenDAL backends) |
| Keychain credentials + recursive bidirectional sync | implemented in engine (keyring; newest-wins sync) |
| Full preferences | planned |