Inspiration
Can be summarize with this xkcd: https://xkcd.com/949/ The point was to make the most universal file transfer tool. I also wanted something that respects the users' privacy by not storing the file anywhere except the users' hard drives. So it had to be peer-to-peer.
What it does
Transfer files between devices without intermediate cloud storage.
The web version allows to drop files on one side and download on the other. You can connect multiple devices to the same virtual drive, the users can drop files and download each other's.
The desktop client allows to easily generate download links for your files with a simple right-click. Could be great for professionals that require high privacy for their file exchanges.
How I built it
While most peer-to-peer transfer web tools use webRTC, it's unfortunately not reliable enough for file transfers. The main problem being that the FileAPI is not complete on all browsers, which means the downloader has to store the whole file in memory before triggering the actual download window. The other problem with WebRTC is that the read/write loop for the transfer happens in javascript, which means it's not efficient at all and gets drastically slowed down when the browser tab is not the foremost one. So NoUSB uses light relay servers to transmit the data between peers connected to the same drive.
Challenges I ran into
The main problem was setting up a scalable network of relays, and the ability to spread the download streams among these relay servers. The other problem with having to deal with all browsers and chat apps embed webviews, they all have slightly different behaviour with files downloads.
Accomplishments that I'm proud of
I think the biggest accomplishment was to bring to project to release 😂
What I learned
I learnt Rust with Tauri when making the desktop client, I've been waiting to find a good reason to learn this language.
What's next for NoUSB.co
The new desktop client does something I've been dreaming of for a while, the ability to share a file from a simple right-click on my file(s) or folder.
Built With
- digitalocean
- golang
- nuxtjs
- rust
- tauri
Log in or sign up for Devpost to join the conversation.