There are for sure plenty of awesome and efficient ways to achieve file transfer but (this repository wouldn't exist otherwise), here is my proposal.
I will try to make a non-exhaustive but representative list of how files are transfered nowadays.
Lots of people are enjoying an "instantaneous" and contextualized way to share files via communication apps. This could be any personal/company messenger or collaborative platform. I'm also including in this category every cloud file storage provider.
Pro:
- widely adopted
- sequential upload/download that doesn't require peers to be up during the whole process
- generally using HTTP available in most places
Cons:
- fills servers with data that might not need to be stored a long period
- most providers does not provide end to end encryption
- (very) limited capacity with free plans
- HTTP resumability is not its strongest strength
Some skilled user can setup servers that enable secured transfer like OpenSSH. That enable to use a wide ecosystem of tools, like scp, rsync etc.
Pro:
- secured, private, convenient, automatable
Cons:
- lots of burden to setup (port forwarding, account management...)
- those protocols often needs to be extensively configured because they permit more than simple file transfer
Pro:
- efficient, decentralized and scalable
- particularly adapted for large files
- easily resumable
Cons:
- hard to setup for quick transfer and casual users
- often associated with illegal data transfer by most users
Good old cold storage.
Pro:
- very eco-friendly
- privacy
- large file transfer
Cons: obvious
Here are the core pillars that I want convey to be based on:
- Respect privacy and be secured -> end to end encryption, open source code
- Be decentralized -> let's stop using someone's else computers! no data stored on third party servers, data should be conveyed in a P2P way
- Be usable anywhere -> no platform should be omitted, nowadays we have all technologies to include everyone :)
- Be user friendly -> anyone should be able to use it with minimum skills -> focus on ergonomics, GUI, internationalization
- Free of charge, open and unlimited -> no subscriptions, no transfer limits
This seems to be obvious qualities that everyone wants, but I struggle to find a tools meeting all of these..
This also might seems to be an unreachable goal by some individual, but I think we have the matter to make it :)
This will be a tool Desktop/Mobile/Web/CLI application that will rely on Bittorrent protocol with some superset tooling to transfer any kind of files.
A custom relay server will connect two or more peers together with a full-duplex TCP/WS/WebRTC (TCP will be preferred whenever possible) connexion based on a common file sharing session.
This session will be granted access with a common "key", this key can be under the form of PAKE, QR Code, local peer discovery or even later, with account system.
Once the users are in the file sharing session, they will share a symmetric key that will be used to encrypt all files E2E. The relay server will never get this previous key.
Then the initial seeder will compress, encrypt and upload a torrent file on a custom tracker. Then the transfer can be done via the Bittorrent protocol.
The goal of convey is to automatize and secure the whole torrenting process, the end user will not even necessarily be aware of the underlying used protocol.