Expand description

This crate provides a set of APIs to access the remote filesystem using the sftp protocol and is implemented in pure Rust.

It supports sending multiple requests concurrently using WriteEnd (it can be WriteEnd::cloned), however receiving responses have to be done sequentially using ReadEnd::read_in_one_packet.

To create WriteEnd and ReadEnd, simply pass the stdin and stdout of the sftp-server launched at remote to connect.

This crate supports all operations supported by sftp v3, in additional to the following extensions:


Changelog for this crate.


Return (id, res).
Return (id, res).
Return (id, res).
Return (id, res).
Return (id, res).
Return (id, res).
The extension that the sftp-server supports.
Request Id
Payload of extended reply response when crate::request::RequestInner::Limits is sent.
The ReadEnd for the lowlevel API.
SharedData contains both the writer and the responses because:
Default value is 1970-01-01 00:00:00 UTC.
It is recommended to create at most one WriteEnd per thread using WriteEnd::clone.



Default size of buffer for up/download in openssh-portable
Default length of download buffer in openssh-portable
Default number of concurrent outstanding requests in openssh-portable
Default length of upload buffer in openssh-portable
Maximum depth to descend in directory trees in openssh-portable
Minimum amount of data to read at a time in openssh-portable


Any type that can act as a buffer.


Initialize connection to remote sftp server and negotiate the sftp version.