Currently, many companies provide cloud storage services, but each has its own proprietary client and their functionality, as a rule, leaves much to be desired. The existing alternatives did not suit me for many reasons, so I decided to make my own universal client - shadowcloud
Something like this:
What can
Direct download (without using a local disk) to Google Drive, Yandex Disk (WebDAV), Cloud Mail.Ru, Dropbox
Full default encryption, a large selection of algorithms and settings
Password protected database
Checksums and Deduplication
Removes file size limit
Replication or splitting files across different repositories
Unlimited streaming media
Creates previews and extracts metadata and text of documents.
Versioning files and the entire directory structure
Markdown notes, code highlighting
Quick save web pages with embedded resources
Caching files in memory
Use as a local disk using FUSE (winfsp required)
Open source, almost every aspect is configured via shadowcloud.conf
Generate an encryption key (later you need to import it on other devices)
Configure Cloud Storage
Create a data region and connect a storage to it (the region ID must match on all devices)
After that, you can go to the file panel, select a region and upload documents.
Little about implementation
The program is written in Scala and almost entirely built on the Akka framework (actors, streams, http, persistence), the frontend is written entirely in Scala.js.
Bouncy Castle is used for encryption and optional libsodium (default algorithms: Blake2b / ChaCha20 / ECIES / ECDSA).
Apache Tika and JavaCV are excluded from the light version because of their large size, they are used to extract metadata from documents and create previews for video recordings.