Show HN: A file server for Android, end-to-end encryption, web access
Recently I've been playing with an idea of a file server on my Android phone, with a web browser access.
I wanted to replace:
- AirDroid - sending files to my own PC or laptop.
- ShareIt - sending big files over the local network to my family devices.
- Dropbox - sharing select files with other people over the Internet.
Requirements I had in mind:
- end-to-end encryption, no sign ups, no accounts, no passwords
- local connection if devices are on the same network
- asynchronous access, server should work seamlessly in the background
This week I finally managed to stitch the pieces together and get something usable and useful. I now have full access to my phone on my laptop browser, I can share files with a link without uploading to the cloud, and the local network is used whenever possible.
The file server app is on the PlayStore[1], web-client is here[2], and you can check out the roadmap[3].
Shoutouts to these great tools that made it possible:
- libsodium[4], and it's JS version, are used for the end-to-end encryption
- StreamSaver.js[5], to save large files from a non-HTTP transport without buffering it in RAM. Had to patch it to add back pressure when the download is paused.
Current limitations:
- p2p only works on local networks, wait until WebRTC transport is implemented in the server
- when downloading several files, a Zip is generated, with a 4Gb size limit, wait until I figure out the way to fix this. With a single file, it's downloaded in plain and without limits.
Please roast this thing!
--
[1] PlayStore: https://play.google.com/store/apps/details?id=im.recall.android
[2] Web client: http://web.recall.im
[3] Roadmap: https://recall.im
[4] LibSodium: https://github.com/jedisct1/libsodium
[5] StreamSaver.js: https://github.com/jimmywarting/StreamSaver.js
[*] A demo of some files I shared, served by my phone: http://web.recall.im/#peer=c7e0f38a7f60752b4fa3017807fc731f2c8cb87b3d7d35c8131196c74daa847c;share_id=476c946195b047d3898c51291cd37dfb I was wondering how it compares to Syncthing[0], which I currently use to sync files between my phone and PC. It looks like the main difference is that Recall doesn't require you to install anything on the receiving device. You can just install Recall on your phone, and then download files via a web page. So basically you get the privacy of Syncthing with the convenience of Dropbox. That's really cool! The primary difference is that Syncthing is focusing on synchronization, meaning that some files/folders take space on both devices and are kept in sync. It's essentially a cron-ed rsync (Dropbox is built around the same concept internally). Recall is primarily a file server. The analogy that I have is that it's a zero-config FTP server with a web client with a nicer UX. Auto-sync of select files is on my roadmap, but at this point it's just a 'remote access to your files in a browser'. Another big diff is that Syncthing is open source, so it's security and privacy are verifiable. Recall is closed source at this point (although you could peek at the JS client to figure out how it works), and I'm not yet ready to make a promise to open it in the near future. So, be aware. Thank you for your kind words, I really appreciate that! I tried install it from the play store, but Strange! Can you please share the device model? Thank you for reporting this! DROID INFO REPORT DEVICE Model: moto e6 play (bali) Manufacturer: motorola Baseband Version: MOLY.LR12A.R3.MP.V71.11.P15 RIL Version: android reference-ril 1.0 Build Number: POA29.550-99 Build Fingerprint: motorola/bali/bali:9/POA29.550-99/5fb8e:user/release-keys Bootloader: bali-8627a2f-20200807101233-20200807233812 Java VM: ART 2.1.0 OS Version: P (9) SDK: 28 DISPLAY Resolution: 720x1440 pixels Software Density: 320 dpi (xhdpi) Refresh Rate: 59.26 Hz PROCESSOR CPU Architecture: ARMv7 Processor rev 4 (v7l) Board: bali Chipset: MT6739WW Cores: 4 Clock Speed: 1495 MHz - 1495 MHz Instruction Sets: armeabi-v7a, armeabi CPU Features: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm aes pmull sha1 sha2 crc32 CPU Governor: schedplus Kernel Version: 4.4.146+ Kernel Architecture: armv7l GRAPHICS Renderer: PowerVR Rogue GE8100 Vendor: Imagination Technologies OpenGL Version: OpenGL ES 3.2 RAM Total: 1862 MB Java Heap: 256 MB STORAGE Internal: 23.5 GB External: 14.8 GB FEATURES Bluetooth: Yes Bluetooth LE: Yes GPS: Yes NFC: No USB Accessory: Yes WiFi: Yes WiFi Direct: Yes SENSORS ACCELEROMETER LIGHT PROXIMITY I'm sorry to say that you have 32bit CPU (ARMv7), and I only build for 64bit versions. There are quite a few libraries I need to compile myself to build the app, and supporting several architectures is too much work for me at the moment. If you leave your email at the website I will notify you when the 32-bit build is ready. Thank you for your interest and feedback, it means a lot to me! Ok. Thanks.
I saw it requires Android 7, but mine is 9. This app is incompatible with your device.