Low-latency file drop web app
Find a file
2024-03-27 16:53:02 -04:00
cli no more websocket ack messages, just use lower-level backpressure 2023-09-09 17:03:35 -04:00
resources organize images better 2022-04-30 01:46:21 -04:00
src prevent filling up the disk 2024-03-27 16:53:02 -04:00
static use requestAnimationFrame for cleaner progress bar updates 2024-03-07 14:34:10 -05:00
templates use both name and property attributes for opengraph metadata tags, so more places will render the preview card properly 2023-12-17 14:14:22 -05:00
.gitignore add quick and dirty CLI client 2022-05-24 21:45:37 -04:00
Cargo.lock prevent filling up the disk 2024-03-27 16:53:02 -04:00
Cargo.toml prevent filling up the disk 2024-03-27 16:53:02 -04:00
flake.lock flake update 2024-03-27 15:26:36 -04:00
flake.nix ditch crate2nix, use fenix instead of oxalica/rust-overlay 2022-12-09 16:06:50 -05:00
LICENSE MIT license 2022-04-28 00:49:21 -04:00
README.md prevent filling up the disk 2024-03-27 16:53:02 -04:00

transbeam logo: a laser warning sign in trans flag colors

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:
    echo -n 'Password: '; head -1 | tr -d '\n' | argon2 $(openssl rand -base64 32) -id -t 2 -m 14 -p 1 -e
    
    (If you're setting this in a .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 the Forwarded or X-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_MIN_DISK_FREE: minimum amount of free disk space on the filesystem where transbeam uploads are stored (default: 8G). transbeam will not accept uploads that would reduce free disk space lower than this value, even if they would otherwise be within the max upload size and max storage size.
  • 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 form Incorrect 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. See env_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."