3.7 KiB
Peer-to-peer file transfers in your browser deployed with Cloudflare
Cooked up by Alex Kern & Neeraj Baid while eating Sliver @ UC Berkeley.
Made deployable by Fares Abawi using Cloudflare Tunnel.
Using WebRTC, FilePizza eliminates the initial upload step required by other web-based file sharing services. Because data is never stored in an intermediary server, the transfer is fast, private, and secure.
A hosted instance of the Cloudflare deployed FilePizza is available at filepizza.emaily.re.
What's new with FilePizza v2
- A new UI with dark mode support, now built on modern browser technologies.
- Works on most mobile browsers, including Mobile Safari.
- Transfers are now directly from the uploader to the downloader's browser (WebRTC without WebTorrent) with faster handshakes.
- Uploaders can monitor the progress of the transfer and stop it if they want.
- Better security and safety measures with password protection and reporting.
- Support for uploading multiple files at once, which downloaders receive as a zip file.
- Streaming downloads with a Service Worker.
- Out-of-process storage of server state using Redis.
Development
$ git clone https://github.com/kern/filepizza.git
$ pnpm install
$ pnpm dev
$ pnpm build
$ pnpm start
Running with Docker
$ pnpm docker:local:build
$ pnpm docker:local:up
$ pnpm docker:local:down
Deployment with Cloudflare Tunnel
- Create a Cloudflare account and add your domain.
- Get the Global API token from Cloudflare.
- Copy the envfile to
.envand fill in the required values including theCLOUDFLARE_API_KEYandHOST_DOMAIN(the link to your cloudflared domain or sub-domain). - Run the following command to build the docker file:
pnpm run docker:build - Run the following command to start the cloudflare deployment:
pnpm run deploy:full - On the first usage, you will be directed to the Cloudflare login page. After logging in, you will have to authorize the domain you specified in the
.envfileHOST_DOMAIN. - After the authorization, you will be redirected to the FilePizza app. You can now use the app with your custom domain.
Stack
- Next.js
- Tailwind
- TypeScript
- React
- PeerJS for WebRTC
- View Transitions
- Redis (optional)
FAQ
How are my files sent? Your files are sent directly from your browser to the downloader's browser. They never pass through our servers. FilePizza uses WebRTC to send files. This requires that the uploader leave their browser window open until the transfer is complete.
Can multiple people download my file at once? Yes! Just send them your short or long URL.
How big can my files be? As big as your browser can handle.
What happens when I close my browser? The URLs for your files will no longer work. If a downloader has completed the transfer, that downloader will continue to seed to incomplete downloaders, but no new downloads may be initiated.
Are my files encrypted? Yes, all WebRTC communications are automatically encrypted using public-key cryptography because of DTLS. You can add an optional password to your upload for an extra layer of security.
License & Acknowledgements
FilePizza is released under the BSD 3-Clause license. A huge thanks to iblowyourdesign for the pizza illustration.
