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 · profile_crypto | build from URL; import Cyberduck .duck plist bookmarks, FileZilla sitemanager.xml sites and WinSCP sessions (bookmark.import_filezilla · bookmark.import_winscp); per-protocol option support matrix (bookmark.option_support); passphrase-encrypted profile export/import (profile.encrypt · profile.decrypt) | — |
| manager | per-bookmark session lifecycle state machine; logs; throughput sampling | reconnect policies |
| transfer · tokenbucket · retry · pool · schedule | download/upload/sync queue: enqueue, concurrency cap, progress, cancel, clear; resume checks and byte-range segmentation (transfer.resume_check · transfer.segments · transfer.multipart_plan); token-bucket and fair-share bandwidth shaping (bandwidth.token_bucket · bandwidth.fair_share); retry classification and backoff; connection pooling; transfer-window scheduling and budget caps (schedule.* · queue.schedule) | — |
| 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 · netrc · knownhosts · ssh_config | CredStore trait + session-only in-memory store (no plaintext on disk); the default keychain feature persists to the platform secret store over keyring (creds.store · creds.load · creds.delete); .netrc parsing, SSH known-hosts verification and fingerprints, and ssh_config host resolution | 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 |
| ftp · ftps · sftp · scp · webdav · s3 · gcs · swift · b2 · azure · proxy | The per-protocol wire logic parsed and built in-crate rather than delegated: FTP replies, PASV/EPSV/PORT/EPRT, FEAT, MLSx and FXP; FTPS negotiation; the SFTP packet layer (init, attrs, extensions, statvfs, path ops); SCP control lines and walks; WebDAV PROPFIND bodies and multistatus; S3 SigV4 signing, presign, listing and multipart completion; GCS resumable uploads; Swift temp URLs; B2 authorization; Azure signing; and SOCKS5 / HTTP CONNECT proxying | — |
| listing · tree · dircache · filter · perms · path | Server listing parsing across dialects, serialised remote trees and tree diffs, the directory cache, glob/regex filter rules, POSIX mode formatting and recursive chmod, and remote path normalisation | — |
| delta · manifest · sign · sidecar · hash · fingerprint · verify | rsync-style signature/delta push (delta.signature · delta.plan · delta.push), build/verify manifests, detached signatures and sidecar files, and checksum compute/verify over a transferred file | — |
| erasure · shardset · swarm · replicate · consensus · plan | Erasure-coded dispersal across several remotes with health, repair and reconstruct (erasure.*), multi-remote swarm fetch/replicate/audit, and the cross-remote consensus and planning layer above them | — |
| archive · remote_edit · base64 · retry | Remote .tar/.zip index reading without a full download, the remote-edit round-trip map, and the shared codec/retry helpers | — |
| 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. discovery (Bonjour/zeroconf LAN scan) and keychain (OS secret-store credential persistence) are on by default too and can each be switched off independently; the optional tauri feature adds the GUI plugin layer.
Verification
The crate carries 370 in-source unit tests (357 with --no-default-features) 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.