Hacker News new | past | comments | ask | show | jobs | submit login
Sharedrop – Easy P2P file transfer powered by WebRTC (github.com/cowbell)
242 points by todsacerdoti on June 3, 2020 | hide | past | favorite | 73 comments



Firebase is a really attractive service to quickly and easily bring powerful features to any app, but I can't help it.. I feel like I'd be including yet another way for Google to track people. Therefore I avoid any app with Firebase in them, no matter how cool they are. Am I overly suspicious here?


Yeah I like firebase for sure. At the same time I was hoping this was all from scratch. Within the past few years it’s really getting discouraging knowing everything is tracked and ready to lock you in w dependency. Google search and some other changes they have made recently feel insulting almost


Snapdrop.net[0] is a similar PWA that specifically avoids using Firebase (or any db). I saw it on here some time ago, but don't recall if it was a Show HN.

[0]: https://github.com/RobinLinus/snapdrop

Edit: just seen this was mentioned earlier down thread.


I just avoid it because I don't want to have to find a new app when Google shuts Firebase down.


Not really. You shouldn't have to audit network traffic and de-compile an app before you can trust it.


yes, you are. Google has no incentive to spy on Firebase projects because any project using firebase could contain sensitive data and any company that believed Google would spy on the data would not use them so Google would lose market. The same is true for AWS and Azure


But since Google knows that companies believe that they won't spy on them for the reasons you've outlined, then so long as they're real cautious about it...


Wait, are market incentives really the basis for hoping that Google doesn't spy on Firebase data?

I would have guessed because they'd be liable for breach of contract or GDPR or whatever.

What does Google say about its analytics applied to its Firebase customers?


yes

the same tired battle lines have been baked into tech for 12 years now, and it exhausts me to read the Google ones these days

it's sad that this is a source of innovation, but simply switching from Apple "infrastructure" and languages has been a massive step change in my productivity.

If you're really unsure, audit network traffic and the code


I use Firefox Send (works on all browsers), it's end to end encrypted and has automatic expiry: https://send.firefox.com/


For the tech savvy people, checkout ffsend as fully featured CLI tool for Send (shameless plug): https://github.com/timvisee/ffsend


Wow! Thank you so much!


I started using Firefox Send recently, I have been really impressed with the simplicity and easy of use. I haven’t tried it, but it is open source and possible to self-host if you so chose. But for the time being it remains free, and you can share up to a generous 2.5 GB if you log in with a Firefox account so I see no reason to put in the effort yet.

That being said, Sharedrop seems to be a different use case, only sharing file between folks on the same network. I applaud the effort, I will certainly like to try this out soon!


Meanwhile, I found the 2.5 GB limit on Firefox Send really frustrating this weekend when I was trying to send 80 GB of raw video files to a friend. :)

Turns out there's very few options available for really large P2P file transfers, short of hosting an FTP server.


This exact use case - sharing many GB of raw movies and pictures - is solved really well by Resilio Sync.

https://www.resilio.com/individuals/


Disclosure, I work at Dropbox: but did you consider paying for a tool? Or were you mostly interested in free options?


I tried uploading the archive to iCloud, but the server rejected it as too large. None of my other cloud storage accounts had enough free space.

Paying for extra space seemed overkill, given that this was literally a one-time P2P file transfer. I really should just be able to send a file to another IP address without having to pay for storage somewhere.



This was spotted on HN 3 weeks ago: https://github.com/schollz/croc


Would rsync have worked? A bit of googling gives this as the best set of answers I can find

https://serverfault.com/questions/53531/copy-large-file-from...

Sorry to keep bike shedding this!


Very much related to the sister comment that recommended resilio sync, I usually tell people to install the free (but equally good) synthing when I want to transfer very large files in private. I have it running anyways, and it's not too big of a hassle to install for them. It has the added benefit that you can abort and resume the transfer at any point, which is especially useful if you're transferring from some noisy machine that you want to turn off during the night.


Actually, torrents are still kinda a go-to for p2p transfers.


Setup a syncthing folder share with your friend.

Drop your 80gb in the folder

Data syncs over p2p e2ee overnight.

Friend removes the copy from their sync folder and it vanishes from yours


For 80gb I would send a usb pen via mail


I regularly send 200gb with Resilio Sync, but before sending the file I split into 10gb pieces and on the other side I put them together.


There is a new tool around which can be used to send large files p2p with end to end encryption (I'm the developer behind it).

No mobile app yet but it already works on macOS, Windows and Linux.

cryo file manager

https://cryonet.io


As it is open source you can always just run a new docker of Send, tweak the ENV variable for max file size and bobs your uncle.

https://send.mirorauhala.fi/


OP was talking about the generous 2.5 GB limit, while you're referring to the stingy 2.5 GB limit.


Indeed, that's why I posted. I found it to be an interesting juxtaposition. :)


Haha, well it is hosted free on their servers. I guess I thought it was nice compared to the 1gb you get free on Dropbox.


why not use a regular old torrent?


Curious, couldn't you have used a torrent for that?


Great question! I considered it, but I wasn't able to find a clear answer whether it was secure or not. If somebody had access to the tracker backend or were inspecting the DHT traffic, would they be able to download the files without the original .torrent file?

(Most of the BitTorrent docs assume you're intending to distribute the files publicly.)

Not that the data was really worth protecting — it was just GoPro videos from a recent ski trip. But still, I didn't want to share my (unedited) home movies publicly.


Did you consider encryption? Issue is that it adds one step at the start and at the end, which probably isn't negligible on 80gb of data.


Maybe you can try Resilio Sync (was named BT Sync before) https://www.resilio.com/individuals/#plans

I am not sure if Free version supports limited sharing But I guess you can open a folder for your one-time use then remove it afterward


Well, you could use a private tracker/one that doesn't dump it's torrent-list publicly, and mark the torrent file itself as private, so your client won't share it on the DHT. Also, encrypting is orthogonal.


Then find yourself shocked when the far end's torrent client ignores the private setting?


Which doesn't really happen, because all those private invite-only trackers hand out perma-bans for that.

So a good chunk of users will get really angry if a client comes with that bug. I haven't yet even found a way to make any ignore this.


Cool project but it's not remotely a clone of AirDrop. AirDrop is one of those things that can only be done by Apple, at least on iOS. I have many apps that have "documents" on iOS. I can select them in the app, pick "Share" and then pick "AirDrop" and send them to my Mac. AFAIK I can't do that through this. I go into those apps, select some files and pick send to Safari and I get an error, Safari doesn't support the files. I go into Safari and pick some file but Safari or iOS doesn't let me browse the files of other apps.

Maybe it's possible to make a native iOS app you could send the files to that would use same WebRTC protocol but going the other way, Mac to iOS device seems impossible. Where as I just tried it via real AirDrop. I choose a file on my Mac in Finder. Picked Share->Airdrop. Selected my iPhone. I was given the option to open the file which then gave me a list of all apps that I could send it to. I picked an app and the app's folders appeared. I chose a folder to save it to and then ran the app to check it worked. It did.

I supposed Mac to iOS you could make your native iOS app the target and then from there select the files and "share" them with other apps on the phone.


Seems like it would be a cool side project to create a minimal iOS app that simply acts as a share target for this. Similarly for android and Windows. That would make it much easier to send. You’d still have to either visit the site or scan the QR code to receive, but making sending smoother would be a dramatic improvement.

AirDrop is one of those things that is truly wonderful in how easily and simply it works, but makes me really annoyed with Apple for not opening it and allowing it to be cross platform. Android had something similar for a while but it barely worked, and Google never put any effort into making an iOS app (which obviously would not have been as good as native, but better than nothing). Bluetooth itself has a function of airdrop-like sharing actually, but it was mainly used for spam and it’s basically nonexistent in modern mobile Bluetooth stacks. Something like AirDrop that truly works well cross-platform but wasn’t easy to spam would be so wonderful.


There is a very new web standard for registering your site as a sharing target. It only works on Chrome and I assume Apple won't be rushing to implement it.

https://web.dev/web-share-target/


I want an app in the Share menu of macOS that enables me to send content to any executable (e.g. shell script). Services menu isn't the same and too many steps to set up.


Not exactly what you're looking for, but I do something similar with https://pilotmoon.com/popclip/


https://github.com/saljam/webwormhole is another great one.

* Native Client (in Go so you use pretty much everywhere)

* Uses PAKE for E2E security. Even if the server is hostile they can't get anything.


Chiming in with yet another alternative, I had success with https://github.com/psanford/wormhole-william which is also Go, but is compatible with the original python wormhole.

I think the main difference is that webwormhole tries to use STUN/firewall hole punching to connect two nodes, while the original implementation will use a TCP-TCP relay as fallback.

I recently needed to transfer a 30 GiB file within a restricted network but the firewall blocked webwormhole, so I ended up with -williams instead.

Hopefully at some point all these project can converge into something that supports ALL the solutions :-)


> "ShareDrop allows you to send files to other devices in the same local network (i.e. devices with the same public IP address)"

That's an interesting definition of "same local network". So, this doesn't work for networks not behind NAT? Or for IPv6?


I believe it means same subnet, but it's possible that it only works behind a NAT because it uses an out-of-network service (Firebase) to tell it who's on a single network (i.e. who has the same public IP).


But that's just the thing, you've written the same thing as they have.

> who's on a single network (i.e. who has the same public IP)

Those aren't even close to equivalent. Now that most ISPs offer IPv6, they aren't even equivalent most of the time.


I guess it would be a bit better to call it “inspired” by AirDrop rather than a “clone”, as it doesn’t use AWDL for discovery (rather, it seems to use Firebase).


And the internet requirement also makes it definitely not a clone. This is addressed in the readme, but still, don’t call it a clone then.


Hi! ShareDrop author here. Thanks for the suggestion - I've updated it in the repo description and in README file.


Looks like it doesn't work on iOS.

What happened to AirDrop? It used to "just work" and now it rarely works.

In the last two days I experienced: - Unable to discover devices (a constant AirDrop frustration) - Transferred a video from iPhone to Mac, had to wait for video to be converted first? - Transferred video from (different) iPhone to Mac, transfer repeatedly resulted in a corrupt 0 byte file

AirDrop has become totally unreliable.


Check you don’t have any misbehaving GHz-spectrum appliances or devices - like leaky microwave ovens and bad Bluetooth devices.

AirDrop is nice - I understand Apple’s business reasons for keeping it Apple-exclusive, but the lack of bog-standard Bluetooth file transfer in iOS is just being mean.


I've never gotten AirDrop to work. I wasted a whole day, once, double-checking software versions and hardware capabilities and reading every manual and specification and forum post I could find. It seems to be one of those features that magically works, at some times for some people, and leaves no clue why it doesn't, at other times and for other people.

It sounds like a neat feature. I wish I could use it.


Could the latter issue be due to a HVEC codec mismatch? I have an old Mac and it doesn't handle that codec well.


Yes, I investigated the conversion issue and it seems it's due to HEVC / H.265 video being the default in iOS 11, but not supported in older versions of iOS / OS X. I was transferring to a Mac running OS X 10.13 High Sierra.

I had always thought of AirDrop as a straight file transfer, but that's not the case.


Snapdrop is also available: https://github.com/RobinLinus/snapdrop


This looks quite useful for cross platform transfers on the same network. I’ve been using AirDroid [1] for quick cross platform transfers on the same network and Firefox Send for transfers over the Internet.

When I tried this on iOS (different browsers, though they’re all using the same engine underneath), it was stuck on the loading screen. Turning off content blockers didn’t have any effect.

Edit: Figured out that this doesn’t work on iDevices (at least older iOS versions). There’s an alternative called SnapDrop [2], whose FAQ has this question and answer:

> SnapDrop a fork of ShareDrop?

> No. ShareDrop is built with Ember. Snapdrop is built with vanilla ES6. I wanted to play around with Progressive Web Apps and then I got the idea of a local file sharing app. By doing research on this idea I found and analysed ShareDrop. I liked it and thought about how to improve it. ShareDrop uses WebRTC only and isn't compatible with Safari browsers. Snapdrop uses a Websocket fallback and some hacks to make Snapdrop work due to the download restrictions on iDevices.

SnapDrop looks like a better alternative to me.

[1]: https://airdroid.com

[2]: https://github.com/RobinLinus/snapdrop


I'm using "Just an Email" [1] for quite a while now, on a self-hosted server. QR-code generation has been integrated - I simply press "Start" on my computer, scan the QR code with my mobile, and can share links, files and texts in realtime. That's easy enough for my use-case.

[1]: https://github.com/mustakimali/just-an-email


To get reliable WebRTC don't you need a Turn server to relay your traffic when the NAT is too bad? Where does this get a Turn server?


Hi! ShareDrop author here. It doesn't use any TURN servers and that's why it doesn't work if one is required.


I’ve been using this for quite a while, and recently I’ve run into the trouble that the fire base account was overcapacity. Not sure if it’s been fixed since then, but I’ve had to use the QR code instead of the automatic detection. Still, really nice tool.


Seems to still be an issue:

> FIREBASE WARNING: The Firebase database 'sharedrop' has reached its peak connections limit. If you are the Firebase owner, consider upgrading. (https://sharedrop.firebaseio.com)


Looks pretty good, but it also seems to have stagnated. Latest commit was in January 2019. It would be nice to have a shorter URL for rooms, so it's easier to share with others.


I would love to have something like this but self-hosted and without the Firebase dependency. But maybe this would be a starting point.


There are many of these webrtc file sharing services. Most of the time, the traffic ends up getting relayed.


Is this actually transferring over LAN? So you could share a very large file on a slow connection?


Yes, it can


This is pretty neat, just tried it between iPhone Safari and MacOS Safari. Worked well.


> Sharedrop: HTML5 clone of Apple's AirDrop – easy P2P file transfer powered by W

Powered by W? Is W a new programming language or JavaScript framework?

It looks like @todsacerdoti is not aware that Hacker News submissions are limited to 80 characters in the title. They probably wanted to submit “HTML5 clone of Apple's AirDrop - easy P2P file transfer powered by WebRTC” which is 73 characters long and represents the current project headline on GitHub, but then they added the project name at the beginning “Sharedrop:” turning the title into a 79 characters long string cutting “WebRTC” out. I think this would have been enough: “Sharedrop - Easy P2P file transfer powered by WebRTC”.


Looking at the GitHub page, they probably wanted to write WebRTC.


I don’t think ”P2P file transfer” would be sufficient to describe the project as the Airdrop aspect makes it really different from what most people likely think of P2P file transfer.


Makes me wonder if this post was Done w a bot, script, tool, curl etc. I have been wondering how prevalent pre written comments are as well




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: