ZFTP-CORE // ENGINEERING REPORT

// module map · command surface · FFI exports · test status

Home Cyberduck Port Source
0.1.0version
3crate-types (rlib · staticlib · cdylib)
38engine commands
4C-ABI exports

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

modulerole todayplanned
lib (Engine)one dotted command surface via Engine::invoke; event sink; connect/transfer orchestrationbackground transfer workers, auto-reconnect
modelprotocol · bookmark · session · status · stats · remote-file · transfer · log · settings typesper-protocol option matrices
protocolconnection-URL parse (scheme://user@host:port/path) + scheme resolutionIPv6 literal hosts, query-string options
bookmarkbuild from URL; import Cyberduck .duck plist bookmarks; import FileZilla sitemanager.xml sites (bookmark.import_filezilla)other-client bookmark import
managerper-bookmark session lifecycle state machine; logs; throughput samplingreconnect policies
transferdownload/upload/sync queue: enqueue, concurrency cap, progress, cancel, clearrecursive 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/SFTPrecursive directory walk, resume offsets
credsCredStore trait + session-only in-memory store (no plaintext on disk)macOS Keychain / Linux Secret Service backend, cloud OAuth
log · statsbounded per-session log buffer; throughput rate samplerlog export, historical stats
storeprofile (bookmarks + settings) JSON load/saveprofile versioning / migration
ffiC ABI: zftp_init · zftp_invoke · zftp_set_event_callback · zftp_string_freericher event payloads
tauri_plugin (feature tauri)Tauri v2 plugin glue + mountable webuiper-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.