Atualmente, muitas empresas fornecem serviços de armazenamento em nuvem, mas cada uma tem seu próprio cliente proprietário e sua funcionalidade, em regra, deixa muito a desejar.
As alternativas existentes não me agradaram por muitas razões, então decidi fazer meu próprio cliente universal - shadowcloud
Algo assim:

O que pode
- Download direto (sem usar um disco local) para o Google Drive, Yandex Disk (WebDAV), nuvem Mail.Ru, Dropbox
- Criptografia completa por padrão, uma grande variedade de algoritmos e configurações
- Banco de Dados Protegido por Senha
- Soma de verificação e redução de redundância
- Remove o limite de tamanho do arquivo
- Replicar ou dividir arquivos em diferentes repositórios
- Streaming de mídia ilimitado
- Cria visualizações e extrai metadados e texto de documentos
- Arquivos de versão e toda a estrutura de diretórios
- Notas de remarcação, destaque de código
- Salve páginas da web rapidamente com recursos incorporados
- Cache de arquivo na memória
- Use como um disco local usando o FUSE (requer winfsp)
- Código aberto, quase todos os aspectos são configuráveis via shadowcloud.conf


Como usar
Na verdade, o repositório
Para usá-lo é necessário:
- Gere uma chave de criptografia (mais tarde você precisará importá-la para outros dispositivos)
- Configurar armazenamento em nuvem
- Crie uma região de dados e conecte o armazenamento a ela (os IDs da região devem corresponder a todos os dispositivos)

Depois disso, você pode acessar o painel com arquivos, selecionar uma região e fazer upload de documentos.
Um pouco sobre implementação
O programa é escrito em Scala e é quase inteiramente construído na estrutura Akka (atores, fluxos, http, persistência), o frontend é escrito inteiramente em Scala.js.
Bouncy Castle e opcionalmente libsodium são usados para criptografia (algoritmos padrão: Blake2b / ChaCha20 / ECIES / ECDSA).
O Apache Tika e o JavaCV são excluídos da versão light devido ao seu tamanho grande; são usados para extrair metadados dos documentos e criar visualizações para vídeos.