skicka.pwy.io:99
Skicka (from Swedish send) allows to send files between machines - no installation required!
Transmitting a file is as easy as piping its data through curl
:
cat your-file.txt | curl --data-binary @- skicka.pwy.io:99
... noting down the link returned by that command and running curl
/ wget
on the target machine:
curl http://skicka.pwy.io:99/foo-bar > your-file.txt
# or
wget http://skicka.pwy.io:99/foo-bar
Alternatively, if your target machine doesn't have those tools, but it does have a web browser, you can pass a file name when uploading it:
cat your-file.txt | curl --data-binary @- 'skicka.pwy.io:99?name=your-file.txt'
... and then simply open the link returned by that command in your web browser - it will download the file as a regular attachment.
You can also transfer arbitrary data (including binary):
echo 'Hello, World!' | curl --data-binary @- skicka.pwy.io:99
How it works
Skicka is a proxy - when you run cat | curl
, it doesn't store the file but rather keeps the TCP connection alive and then forwards it when you download the file on the target machine.
It's very much like magic-wormhole, just installation-free!
This also means that links generated by Skicka are one-shot - you can't download the same file twice (unless you run another cat | curl
, of course).
Why
Many times I've had to transfer files between non-developer Linux <-> Windows machines, where installing Python tools was not an easy task, and hence zero-installation Skicka.
Roadmap
- A simple web interface so that it's possible to transmit files without using terminal.
Limits
-
8 GB maximum file size,
-
120 seconds between running
cat | curl
and starting to download the file (note that the download itself can take longer, it's just that you must start the downloading in 2 minutes, otherwise the connection will get closed), -
My server (in Hetzner) has a monthly 20 TB upload limit, so take that into consideration as well.
Note that those limits pertain only the public instance at skicka.pwy.io:99
- you can change the limits (passed through command-line arguments) if you want to launch a self-hosted instance.
Self-hosting
All options have reasonable defaults, so just running the executable should do it:
cargo run --release
You might want to adjust the listening port:
cargo run --release -- --listen 0.0.0.0:1234
... or maybe specify the motto (present when someone does GET /
):
cargo run --release -- --motto "good say, sir! :3\r\n"
License
MIT License
Copyright (c) 2023 Patryk Wychowaniec