4.7 KiB
4.7 KiB
transbeam
A low-latency file drop web app
features
- One-to-many transfer of large files
- Simple web UI for sender and receivers
- Word-based download codes that are easy to remember and communicate
- Receivers can begin downloading immediately, without needing to wait for the upload to finish
- Receivers can also download after the upload is complete and the sender has gone offline
- Easy to send multiple files at once - they're bundled into a zip file for receivers, with zero compression so extraction is quick
- Can also download individual files out of an uploaded collection
- Sanitises filenames, using sensible non-obnoxious defaults that should be safe across platforms
- Rudimentary password authentication for uploading files
- Fires a laser beam that turns you trans
configuration
transbeam is configured with the following environment variables:
TRANSBEAM_ADMIN_PASSWORD_HASH
: Argon2 hash of a password for accessing the admin interface. To generate:
(If you're setting this in aecho -n 'Password: '; head -1 | tr -d '\n' | argon2 $(openssl rand -base64 32) -id -t 2 -m 14 -p 1 -e
.env
file or in a shell, make sure to single-quote it to prevent text after$
characters from being interpreted as variables.)TRANSBEAM_COOKIE_SECRET
: Base64-encoded cryptographic random data for encrypting private session cookies. To generate:openssl rand -base64 64 | tr -d '\n'
TRANSBEAM_STORAGE_DIR
: path where uploaded files should be stored (default:./storage
)TRANSBEAM_STATIC_DIR
: path where the web app's static files live (default:./static
)TRANSBEAM_STATE_FILE
: path of a JSON file where transbeam will store file metadata and other persistent state (default:$TRANSBEAM_STORAGE_DIR/files.json
if that's already an existing file (for backwards compatibility),./transbeam.json
otherwise)TRANSBEAM_BASE_URL
: base URL for this transbeam instance, without trailing/
TRANSBEAM_PORT
: port to listen on localhost for http requests (default: 8080)TRANSBEAM_REVERSE_PROXY
: whether transbeam is running behind a reverse proxy (recommended), or directly exposed to the internet. If true, transbeam will only bind to localhost, and will use theForwarded
orX-Forwarded-For
headers to determine client IP addresses for logs. If false, transbeam will bind on all interfaces, and will always log the peer IP address. (default: true)TRANSBEAM_MAX_LIFETIME
: maximum number of days files can be kept for (default: 30)TRANSBEAM_MAX_UPLOAD_SIZE
: maximum size of a fileset being uploaded (default: 16G). Size values can be a bare number of bytes, or a number with a suffix. (For example, "K" or "KB" for power-of-10 kilobytes, "Ki" or "KiB" for kibibytes - suffixes are not case-sensitive.)TRANSBEAM_MAX_STORAGE_SIZE
: maximum total size of all files being stored by transbeam (default: 64G)TRANSBEAM_MNEMONIC_CODES
: generate memorable download codes using English words, rather than random alphanumeric strings (default: true)TRANSBEAM_UPLOAD_PASSWORD
: password for uploading files. This isn't meant to be a hardcore security measure, just a defense against casual internet randos filling up your storage. I strongly recommend setting up fail2ban to throttle password attempts; transbeam logs failed attempts along with IP addresses, in the formIncorrect authentication attempt from 203.0.113.12
.TRANSBEAM_CACHEBUSTER
: query string that will be appended to CSS and JS files, to force re-fetching of cached files when needed.RUST_LOG
: log levels, for the app as a whole and/or for specific submodules/libraries. Seeenv_logger
's documentation for details.
running
nix flakes
nix run git+https://git.xeno.science/xenofem/transbeam?ref=main
(The Nix package is wrapped with TRANSBEAM_STATIC_DIR
set
automatically to the correct Nix store path, so it'll serve the static
files properly no matter what directory you run it
from. TRANSBEAM_CACHEBUSTER
is set automatically to a hash of the
static files' store path, so it will change whenever the static files
change.)
non-nix
git clone https://git.xeno.science/xenofem/transbeam
cd transbeam
cargo run --release
user reviews
"transbeam is the greatest invention of all time!"
"transbeam cured my depression!"
"transbeam punched me in the face once. It was awesome."