The sync client splits files into 4 MB blocks and fingerprints each one. Only blocks the server hasn't seen are uploaded, straight to object storage, so edits to big files and duplicate files cost almost nothing. A metadata service records each file version as a list of block hashes and appends it to a change journal; other devices are told 'something changed' over a long-lived connection and pull just the new blocks.
Functional requirements
- Upload, download, rename, move and delete files and folders
- Automatic sync across a user's devices
- Share files and folders with other users
- Version history and restore
- Work offline and reconcile on reconnect
Non-functional requirements
- Never lose a file; files are stored with high durability
- Sync within seconds of a change
- Efficient: re-upload only changed parts of large files
- Strong consistency for metadata (no two 'latest' versions without a conflict copy)
Extensions
- LAN sync between devices on the same network.
- Selective sync and on-demand placeholder files.
- Full-text search over documents.
- Client-side encryption.