English | 中文
This project is based on n0-computer/sendme v0.31.0
It is an example application using iroh with the iroh-blobs protocol to send files and directories over the internet.
This repository serves two purposes: it provides a command-line application (CLI) for end users, and it also exposes library APIs so other Rust projects can reuse the iroh-based transfer functionality.
It is also useful as a standalone tool for quick copy jobs.
Iroh will take care of hole punching and NAT traversal whenever possible, and fall back to a relay if hole punching does not succeed.
Iroh-blobs will take care of blake3 verified streaming, including resuming interrupted downloads.
sendmer works with 256 bit node ids and is, therefore, location transparent. A ticket will remain valid if the IP address changes. Connections are encrypted using TLS.
cargo install sendmer
sendmer send <file or directory>
This will create a temporary iroh node that serves the content in the given file or directory. It will output a ticket that can be used to get the data.
The provider will run until it is terminated using Control-C. On termination, it
will delete the temporary directory.
This currently will create a temporary directory in the current directory. In the future this won't be needed anymore.
sendmer receive <ticket>
This will download the data and create a file or directory named like the source in the current directory.
It will create a temporary directory in the current directory, download the data (single file or directory), and only then move these files to the target directory.
On completion, it will delete the temp directory.
All temp directories start with .sendmer-.
develop guid: DEVELOPMENT.md
# publish a directory
sendmer send ./my-folderThe command prints a ticket you can share. Keep the provider running until the receiver finishes (Ctrl-C to stop).
# download using a ticket
sendmer receive <ticket>By default the data is downloaded into the current directory using a
temporary .sendmer-... folder and moved into place when complete.
sendmer send ./file --no-progress
sendmer receive <ticket> --no-progressYou can embed sendmer in other Rust programs by calling the exported
library functions start_share and download:
use sendmer::{start_share, download, SendOptions, ReceiveOptions};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// start_share(path, SendOptions { ... }, Some(event_emitter)).await?;
// download(ticket, ReceiveOptions { ... }, Some(event_emitter)).await?;
Ok(())
}