zftp-core is in active development. The figures on this page are derived from the crate source as it stands today (Cargo.toml, src/lib.rs, src/ffi.rs): version, crate-types, the dotted commands matched in Engine::invoke, and the exported C symbols. The "planned" column lists work that is not yet implemented — it is a roadmap, not a claim of coverage.
Module map
| module | role today | planned |
|---|---|---|
| lib (Engine) | one dotted command surface via Engine::invoke; event sink; connect/transfer orchestration | background transfer workers, auto-reconnect |
| model | protocol · bookmark · session · status · stats · remote-file · transfer · log · settings types | per-protocol option matrices |
| protocol | connection-URL parse (scheme://user@host:port/path) + scheme resolution | IPv6 literal hosts, query-string options |
| bookmark | build from URL; import Cyberduck .duck plist bookmarks; import FileZilla sitemanager.xml sites (bookmark.import_filezilla) | other-client bookmark import |
| manager | per-bookmark session lifecycle state machine; logs; throughput sampling | reconnect policies |
| transfer | download/upload/sync queue: enqueue, concurrency cap, progress, cancel, clear | recursive directory walk, resume offsets, throttling |
| transport (local · remote · scp) | protocol-blind Transport trait; fully-wired local std::fs backend; wired network backends (default net feature) — OpenDAL drives FTP/FTPS/SFTP/WebDAV + cloud object stores, russh drives SCP/SFTP | recursive directory walk, resume offsets |
| creds | CredStore trait + session-only in-memory store (no plaintext on disk) | macOS Keychain / Linux Secret Service backend, cloud OAuth |
| log · stats | bounded per-session log buffer; throughput rate sampler | log export, historical stats |
| store | profile (bookmarks + settings) JSON load/save | profile versioning / migration |
| ffi | C ABI: zftp_init · zftp_invoke · zftp_set_event_callback · zftp_string_free | richer event payloads |
tauri_plugin (feature tauri) | Tauri v2 plugin glue + mountable webui | per-window capability scoping |
Build surfaces
The crate declares crate-type = ["rlib", "staticlib", "cdylib"]. The rlib links natively into Rust/Tauri hosts; the staticlib/cdylib expose the C ABI for non-Rust hosts. The default net feature gates the real per-protocol network backends; building --no-default-features yields a pure model/manager/transfer-queue core (with the local-filesystem transport still wired) that compiles in headless CI. The optional tauri feature adds the GUI plugin layer.
Verification
The crate carries 83 in-source unit tests across the engine and its modules: the command surface (version, bookmark add/list/get/remove, FileZilla and .duck import, an honest connect-needs-transport path when built without net, a real local connect, a real local byte-copy transfer, a network-transfer error path, an fs.list path, unknown-command tagging), plus module-level tests in model (protocol scheme/port, bookmark URL, transfer progress), protocol (URL parse), bookmark (.duck + FileZilla parse), manager (state transitions), transfer (queue ordering/cancel), transport/local (real list + copy), transport/remote and transport/scp, creds, discovery, encoding, stats, store, log and util. Tests run without network access and pass identically in headless Linux CI; with the net feature off, network protocols return an honest needs_transport error rather than a faked connection.