Cloud file and email Sync, file Sharing, Backup and Encryption solution written in Rust.
The purpose of this project is to offer an easy and reliable way to sync files and emails between multiple providers and share files between multiple storage providers (like Google Drive, Dropbox, S3, SFTP servers, ...) and local files. Also simple way for backup of your files and emails and encryption. It offers real time sync (from simple Copy One-way to Two-way Sync) all handled in the cloud, without the explicit need of local clients.
[!WARNING]
For now it's in PoC phase, it has some or the core components, like encryption, basic Google Drive client and a basic CLI app.
It's using rencfs for encryption and gdrive-rs for accesing Google Drive.
[!IMPORTANT]
It you could take this SURVEY to express your opinion about the current solution and offer your opinion on what features you would want from a service like this it would help a lot.
You can see rhe results of the survey.
[!NOTE]
In many cases we'll use present tense for several functionality, even though they are not yet implemented, it's used to give an idea of what the system could be.
You can see more details on what's working now, play with the CLI app and see a short demo.
Working on having these in up to 2 months:
Docker
ability to sync 2 folders in the filesystemrclone
in Docker
and mount Google Drive
and Dropbox
or MS OneDrive
in 2 foldersrencfs
rclone
and expose them with FUSE
It would be possible to have something in about 6 months with this functionality:
Google Drive
and Dropbox
or MS OneDrive
For this phase we will still be using rclone
to access providers, this is to simplify the access. But for future plan is to:
Kafka
and window them (group them) with Flink
files tree merge
algorithm which will do the merge, resolve conflicts and applying changes to the other providers or local filesThis is what it's planned to have in the end.
What separates it from other products
Feel free to fork it, change and use it in any way that you want. If you build something interesting and feel like sharing pull requests are always appreciated.
If you want to give it a quick try and not setup anything locally you can
You can compile it, run it, and give it a quick try in browser. After you start it from above
sudo apt-get update && sudo apt-get install fuse3
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
mkdir sync && mkdir sync/repo sync/a sync/b
Add some files in sync/a
and then run th sync
cargo run --release --bin syncoxiders -- --repo sync/repo sync/a sync/b
Now check sync/b
it should have same content as file/a
.
For now this is working
It DOESN'T work
git clone git@github.com:radumarias/syncoxiders.git && cd syncoxiders
To build from source, you need to have Rust installed, you can see more details on how to install it here.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Accordingly, it is customary for Rust developers to include this directory in their PATH
environment variable.
During installation rustup
will attempt to configure the PATH
. Because of differences between platforms, command
shells,
and bugs in rustup
, the modifications to PATH
may not take effect until the console is restarted, or the user is
logged out, or it may not succeed at all.
If, after installation, running rustc --version
in the console fails, this is the most likely reason.
In that case please add it to the PATH
manually.
Project is setup to use nightly
toolchain in rust-toolchain.toml
, on first build you will see it fetch the nightly.
Make sure to add this you your $PATH
too
export PATH="$PATH::$HOME/.cargo/bin"
Also, these deps are required (or based on your distribution):
sudo pacman -Syu && sudo pacman -S base-devel act
sudo apt-get update && sudo apt-get install build-essential act
sudo dnf update && sudo dnf install && dnf install @development-tools act
cargo build
cargo build --release
cargo run --release --bin syncoxiders -- --repo REPO A B
See here how to configure for RustRover and for VsCode.
You can use the .devcontainer
directory from the project to start a container with all the necessary tools to build
and run the app.
Please see CONTRIBUTING.md.
The minimum supported version is 1.75
.