Giter Club home page Giter Club logo

transfer.zip-web's Introduction

Transfer.zip

A self-hostable web application that allows you to easily and securely transfer files between devices with no size limit. Also available on, you guessed it, https://transfer.zip.

As a hobby music producer, I often needed to share large WAVs, but existing services didn't really do it for me. Discord's 50MB limit was frustrating, and Google Drive, MEGA, Dropbox etc. felt cumbersome, so I started making transfer.zip. I rarely need to save my transfered files permanently, I just want to transfer them, and I think many others do too. Because the Quick Share feature never stores the files anywhere, there are no file size or bandwidth limitations!

Transfer.zip is easy to set up locally, to self-host or contribute to the codebase.

Features

Quick Share - End-to-end encrypted WebRTC file transfers in the browser

Quick Share uses WebRTC for peer-to-peer data transfer, meaning the files are streamed directly between peers and not stored anywhere in the process, not even on transfer.zip servers. To let peers initially discover each other, a signaling server is implemented in NodeJS using WebSockets, which importantly no sensitive data is sent through. In addition, the file data is end-to-end encrypted using AES-GCM with a client-side 256 bit generated key, meaning if someone could impersonate a peer or capture the traffic, they would not be able to decrypt the file without knowing the key. Because the file is streamed directly between peers, there are no file size or bandwidth limitations. The easiest way to Quick Share a file is to scan the QR code containing the file link and encryption key. It is also possible to copy the link and share it to the recipient over what medium you prefer the most.

Quick Share Relay - For when WebRTC is blocked

Because of how peer-to-peer works, some network firewalls may not allow direct connections between devices. In that case, the peer-to-peer connection can fallback to using the signalling server as a relay, effectively bypassing network firewall limitations.

Transfers

Transfer.zip also supports permanent file transfers, but currently not on the self-hosted version. That could be enabled in the future by making the API open source and self-hostable.

Known Problems

0-byte files gets stuck on transmit.

On Firefox mobile, sending files using Quick Share does not work at the moment. This could have something to do with the path being changed after the file has been chosen in the file picker, but not been read yet. This is under investigation.

Sending files from some Safari browsers is buggy at the moment, it has something to do with Safari terminating the WebSocket connection when unfocusing the window.

Self-Hosting

To setup self-hosting, copy the file web-server/example.env to web-server/.env. This will enable only the core features for Quick Share and the relay to function.

Then, to build and deploy transfer.zip, use docker compose.

docker compose build && docker compose up

This will listen for connections on localhost:9001, the signaling server will be proxied through the web-server on the /ws endpoint on the same port. When self-hosting, it is recommended to put transfer.zip behind a reverse-proxy with https. For Apache, the configuration needs to include these lines for the reverse proxy to function:

ProxyPreserveHost On

ProxyPass /ws ws://localhost:9001/ws
ProxyPassReverse /ws ws://localhost:9001/ws

ProxyPass / http://localhost:9001/
ProxyPassReverse / http://localhost:9001/

Local Development and Contributing

Note

This project is tested with Docker Compose V2. Docker Compose V1 will most likely fail to build.

When developing, install all dependencies with cd web-server && npm i, then run the dev.sh script. It will start the signalling server and the web server for you.

./dev.sh

transfer.zip-web's People

Contributors

robinkarlberg avatar foodelevator avatar filipsuper avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.