A day of footage
A video editor sends the day's camera files to a colourist on the same network. The files go straight across, so there is no upload to wait for.
1.0: Direct path, checked pieces
Nothing is stored in between. Sluice moves the file directly and checks each piece as it lands.
In development, pre-1.0
Today it names this computer, checks your setup and prints shell completions. Sending and receiving arrive in 1.0.
Your system asks for less motion, so the drawing stays still. This switch plays it for this visit.
Three steps, one file, and no stop in the middle. All three arrive in 1.0; today you can check an install with sluice doctor.
Pick a file or a folder. Sluice reads it where it is, so a large file needs no second copy before it moves.
1.0: send and folders
The sender gets a ticket: one line of text with the address and the file's fingerprint. Send it however you like. Keep it private, because anyone who has it can fetch the file.
1.0: the ticket
Paste the ticket on the other computer. Every piece is checked before it is written, and a dropped link resumes at the last checked piece.
1.0: checked pieces, resume
Three commands work: sluice id, sluice doctor and sluice completions. send and recv are 1.0 and do not exist yet. The CLI README lists every check, exit code and JSON field.
ok version sluice 0.1.0 for x86_64-unknown-linux-gnu, running on linux
ok home /home/you/.local/share/sluice, from SLUICE_HOME
ok access only this user can reach the home
ok layout version 1
ok lock free
ok key 32 bytes, readable only by this user
ok space 7.7 GiB free (8307675136 bytes)
skipped transport the transport checks are not built yetReal output on a fresh home. The home path is the example one.
$ sluice send ./render.movsluice1k4t… 24.0 GB $ sluice recv sluice1k4t… -o ./render.mov9.6 GB of 24.0 GB 40% block 585,937 verifiedA sketch of the 1.0 output, not a recording.
Four jobs where a stop in the cloud costs time, money or privacy. Each one names the 1.0 feature it uses.
A video editor sends the day's camera files to a colourist on the same network. The files go straight across, so there is no upload to wait for.
1.0: Direct path, checked pieces
A nightly dump goes to a server in another building. Every piece is checked as it lands, and a dropped link picks up at the last checked piece.
1.0: Resume, checked pieces
A sound engineer shares a session while it is still being recorded. The other side can read up to the last segment that checks out.
1.0: Live transfer
A researcher needs one range from a large archive. Only that range crosses the network, and the rest stays where it is.
1.0: One byte range
Sluice is not a storage service. The file goes from one computer to the other, and the middle keeps nothing.
| Question | Sluice | Upload, then download |
|---|---|---|
| Where the file waits | SluiceNowhere. It lands on the other computer. | Upload, then downloadOn the provider's servers. |
| Account | SluiceNone. | Upload, then downloadUsually one. |
| Size limit | SluiceNone from Sluice. Your disk is the limit. | Upload, then downloadUsually set by a plan. |
| Checked on arrival | SluiceEvery piece, against the file's fingerprint. 1.0 | Upload, then downloadUsually the provider checks its copy. Your two ends do not check each other. |
| After a dropped link | SluiceStarts at the last checked piece. Target: first new byte within 2 s. 1.0 | Upload, then downloadOften from the beginning, unless the service offers resume. |
Sending is 1.0 and is not built yet. A target is marked; the rest describes the design. The performance page has the method and the scenarios.
The short answers. The specification and the roadmap go further, and contributing says how to help.
Yes. The code is Apache-2.0 or MIT. You pay only for hardware and for any relay you run.
Both, in 1.0. On one network it connects directly. Across the internet it tries a direct path first. If that fails, it can use a relay you run: a server that forwards the data.
Only the two computers keep the file. The connection is encrypted, and a relay you run passes data without storing it. A ticket is a secret: anyone who has it can fetch the file.
sluice id, sluice doctor and sluice completions. Sending and receiving arrive in 1.0.
Not on one network. Across the internet, yes: a relay you run, which the two computers use to meet and punch a path to each other. Set as a meeting point, it fits on the smallest server and the file goes direct. Set as a full relay, it also carries the transfers that cannot go direct. Either way it never keeps the file.
In 1.0, the transfer resumes at the last checked piece. The target is the first new byte within 2 s. Checked data is not sent again.
The file goes straight to the other computer. There is no upload to a company's storage, no account and no plan limit. You keep the only copies.
Try doctor and say what it prints. Read the spec or the roadmap, or open an issue. Contributions and hard questions are both welcome.
The short version for engineers. The full detail is in the spec, the threat model and the decision records.
None of these is in the binary today. Sending and receiving arrive in 1.0; the performance method says which numbers are targets and which are measured.
Every 16 KiB block is checked against the file's BLAKE3 tree before it is written. A damaged block never reaches the output.
1.0
Send a file that is still growing. The sender adds each segment to a signed log, and the receiver reads up to the last segment that checks out.
1.0
Ask for a byte range and only that range is transferred. The rest of the file stays where it is.
sluice recv <ticket> --range 4G:4.1G1.0
After a dropped link, the next attempt starts at the last checked range. Target: the first new byte within 2 s.
1.0
The file is read where it is. The store keeps a reference, not a duplicate, so large files need no second copy of their data.
1.0
Direct first, your relay to meet, and the relay for data only if you allow it the speed.
Read the specification, the threat model and the decision records.
One container, built from this repository, run one of two ways. As a meeting point it carries no file bytes once the path is direct. As a full relay it carries the transfers that cannot go direct, and their bill.
docker build -f docker/relay/Dockerfile -t sluice-relay docker
docker run -d --name relay -p 443:443 -p 80:80 -p 7842:7842/udp \
-v "$PWD/certs:/etc/relay/certs:ro" \
-v "$PWD/docker/relay/meeting-point.toml:/etc/relay/relay.toml:ro" sluice-relaydocker build -f docker/relay/Dockerfile -t sluice-relay docker
docker run -d --name relay -p 443:443 -p 80:80 -p 7842:7842/udp \
-v "$PWD/certs:/etc/relay/certs:ro" sluice-relay[limits.client.rx] bytes_per_second from what the host can spare: a relayed transfer crosses it twice.The wire format, the threats, the decisions and the way performance is measured are in the repository, not on this page.
8 Gbit/s on a 10 GbE LAN, within 10% of iperf3. Under 250 MB RSS during any transfer. None of these has been measured yet.
Cold start to a printed result is under 30 ms, and it is checked on every pull request. There is no telemetry: no code sends any.