Orian
Fast object transfer for Elixir — s5cmd / Skyplane class, plus BLAKE3 content ids.
gale — Phoenix HTTP/3
ingot — Iroh + Zenoh cluster (Hex: `ingot_cluster`)
dusk — Zenoh + Iroh cluster
orian — parallel S3/S5 transfer
zeiroh — Phoenix FLAME overlay
{:orian, "~> 0.1"}
# from this repo
mix orian.install
# prefers a Burrito single binary (ERTS inside); else Mix escript
# mix orian.binary # burrito_out/orian_<os>
# Linux/macOS: ~/.local/bin Windows: %LOCALAPPDATA%\elixcoder\bin
orian cp data/* s3://bucket/prefix/
orian sync s3://src/p/ s3://dst/p/
orian ls s3://bucket/
orian --dry-run cp data/ s3://bucket/
orian run jobs.txt
orian version
Inside a Mix project that depends on Orian: mix orian cp … (same CLI).
Orian.Transfer.cp("data/*", "s3://bucket/", numworkers: 64, concurrency: 8)
| s5cmd | Skyplane | Orian | |
|---|---|---|---|
| Parallel object workers | --numworkers | gateway VMs | numworkers |
| Multipart / parts per file | --concurrency | chunk + connections | concurrency + part size |
cpsynclsrmrun | yes | cpsync | yes |
| Cross-cloud overlay VMs | no | yes | not yet (streamed S3↔S3) |
| BLAKE3 / S5 CID | no | no | yes (Zig + Rust NIF) |
S3-compatible / MinIO / gs:// XML | yes | AWS/GCP/Azure | S3 XML + endpoint-url |
High throughput is a primary goal. Dirty-CPU NIFs, HTTP keep-alive (512 sessions), 16 MiB parts, parallel range GET, Rust BLAKE3 on the hash path. See PERFORMANCE.md.
Tune like s5cmd: many small files → high numworkers; few large files → high concurrency.
Env: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION, AWS_ENDPOINT_URL.
mix bench hashes: benchmark/RESULTS.md. MIT. https://github.com/niranjanaryan/orian