Inspiration

Sharing a large file between two devices usually means uploading it to someone's cloud first. We wanted a way to send files directly from one device to another, with no middleman able to read them.

What it does

QuickDrop transfers files and text directly between two devices over an encrypted WebRTC connection. One person creates a session and shows a QR code or a 6-digit code, and the other joins with it. Both devices show an 8-digit verification code to compare, so they know nobody is intercepting the connection. Files up to 20 GB can be sent, and there is an in-app text chat.

How we built it

A TypeScript monorepo (pnpm) with a React and Vite client and a small Node.js signalling server using WebSockets, only used to introduce the two devices. File data travels peer to peer over a WebRTC data channel. Encryption uses the Web Crypto API: an ECDH P-256 key exchange, HKDF to derive keys, and AES-256-GCM for the data.

Challenges we ran into

Connecting devices across different networks: Establishing a peer-to-peer connection required coordinating WebRTC signaling and handling the connection states clearly. Transferring large files reliably: Sending files in chunks, managing backpressure, tracking progress, and checking file integrity required careful coordination between both browsers. Making privacy part of the design: The signaling server helps devices connect, while file and text data travel through the encrypted data channel rather than being stored by the server. Designing a simple pairing flow: Supporting both QR scanning and short-code entry meant making the experience understandable across phones and computers.

Accomplishments that we're proud of

Built a browser-based app for transferring files and text directly between devices. Added QR-code and short-code pairing, with a verification step to help users confirm they connected to the intended device. Implemented chunked file transfers with progress feedback, cancellation, and integrity checking. Created a responsive, installable web app without requiring user accounts or file uploads to cloud storage. Documented the project’s architecture, technology choices, and privacy goals.

What we learned

WebRTC can support direct browser-to-browser transfers, but connection setup and network conditions need careful handling. Chunking and backpressure help make file transfers more manageable and avoid overwhelming the data channel or browser memory. Security depends on the whole connection flow—including pairing, key handling, and signaling—not just encryption alone. Clear connection states and transfer feedback are essential when a process depends on two devices communicating. Building for both desktop and mobile browsers means accounting for differences in camera access, file saving, and available browser APIs.

What's next for QuickDrop

A TURN relay for restrictive networks, multi-file queues, and a stronger pairing method (PAKE).

Built With

Share this project:

Updates

Submission history