MetaSync is a secure and reliable file synchronization service that uses multiple cloud synchronization services as untrusted storage providers.

View the Project on GitHub UWNetworksLab/metasync


Warning! MetaSync is currently alpha version! Use it only for research-purpose, and do not put any important files under MetaSync repository.
Warning! Note that we're currently working on major design change for MetaSync.

Required Softwares

MetaSync written in Python. Currently it's developed and tested only with Python 2.7.

To install and use it, it needs Python 2.7 interpreter and python-setuptools package. In addition, it requires phantomjs (>=1.9.2) binary in executable path.


Or you can clone the current devlopment version from github: git clone

Release History: Link


After extracting the tarball (or cloning the project), run
python install

You can test if it's installed correctly by

$ metasync --version
MetaSync 0.2

How to use

MetaSync allows users to use multpile synchornization services under it. Now it currently supports: Dropbox, Google Drive, OneDrive,, and Baidu. We are working on adding more providers. To use those services, users need have accounts for them before using MetaSync with the services.

Basic commands for MetaSync are similar with version control systems (e.g., git)

Initilizing a Repository

MetaSync users can initialize multiple repositories under various services, which are differentiated through namespaces. In a directory to initialize you can initialize a repo with

$ metasync init [namespace]

For example,

$ metasync init demo
do you use encryption (y/n)?
> n
input storage backends, (e.g., dropbox,google,box,baidu,onedrive,disk)
    dropbox@auth : account with auth info
    google@auth  : account with auth info
    box@auth     : account with auth info
    baidu@auth : baidu account with auth info
    onedrive@auth : onedrive account with auth info
    disk@path    : mock disk service rooting on path
> dropbox,google
input the number of replicas (default=2)
> 1

To specify which services you want to use, you can input the provider names separted with comma. Currently, it supports only one account per service, but we will allow multiple accounts in the next version.

If you haven't used MetaSync for those services, it will ask your account information for them.

Cloning a repository

Similarly, you can clone a repository from other comptuers (or other location in the same computer)

$ metasync clone demo
input one of the storage backends, (e.g., dropbox,google,box)
  for testing, use disk@/path (e.g., disk@/tmp)
> dropbox
do you use encryption (y/n)?
> n

Managing files

To add a new or modified file to the repository, you need explicitly checkin those files

$ metasync checkin [files]

Those checked files are currently maintained within the local tree. To merge it into the master for other devices to sync against, you need to call

$ metasync push

On the other hand, to fetch and update files, run

$ metasync fetch
$ metasnyc update

You can check the current status

$ metasync status

Your branch is ahead of master by 1 commit(s).

Changes not checked in:
    modified:   toto

Garbage Collection

Currently, non-used object files are not automatically removed, so you need to periodically run garbage collection to aviod running out of your service storage.
$ metasync gc

Report Issues

MetaSync is an alpha-released version, and we expect many bugs still remain. Please try it out and share any issues with us via Issue tracker.