Send files from one browser to another without uploading them anywhere.
Transfers are end-to-end encrypted, and the key is part of the link. Try it on uploadnt.com or read how it works.
Build the image with Docker or Podman:
just web && bun deploy/provenance.ts web/build
docker build -f deploy/selfhost/Dockerfile -t uploadnt .On the server, put deploy/selfhost/compose.yaml in a folder with deploy/relay as relay, and add:
relay/turn_secret: a random stringtunnel.env:TUNNEL_TOKEN=and your Cloudflare tunnel token- your relay's hostname in
TURN_URLSincompose.yaml
Then run docker compose up -d and open UDP and TCP 3478 and UDP 49160-49999 for the relay.
To deploy from your fork's CI instead, run REPO=you/uploadnt deploy/selfhost/update.sh on a timer. It only runs images that GitHub attests your CI built.
You can replace the tunnel with any reverse proxy that supports WebSockets. The relay is optional, but without it there is no plan b for people who can't connect directly.
Set your domain in deploy/wrangler.toml and run just deploy. For plan b, add TURN_KEY_ID and the TURN_KEY_API_TOKEN secret for Cloudflare's TURN, or TURN_URLS and TURN_SECRET for your own coturn.
just verify https://uploadnt.comChecks that the live site matches the files GitHub Actions built and attested.
You need Rust, wasm-pack, Bun and just.
bun install
just serveThen open localhost:8787.