Show HN: A file server for Android, end-to-end encryption, web 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
7 comments
[ 2.5 ms ] story [ 31.4 ms ] threadIt 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!
[0] https://syncthing.net/
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!
Thank you for reporting this!
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
Thank you for your interest and feedback, it means a lot to me!