/skicka

Send files between machines - no installation required!

Primary LanguageRustMIT LicenseMIT

skicka.pwy.io:99

Skicka (from Swedish send) allows to send files between machines - no installation required!

Just pipe your stuff through curl:

cat your-file.txt | curl -sT - skicka.pwy.io:99

# or even:

echo 'Hello, World!' | curl -sT - skicka.pwy.io:99

... note down the link and run curl or 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 -sT - '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.

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,

  • 5 minutes 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 within 5 minutes, otherwise the connection will get closed).

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:80

... 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