Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


build release

juicesync is a tool to copy your data in object storage between any clouds or regions, it also supports local disk, SFTP, HDFS and many more.

This tool shares code with juicefs sync, so if you are already using JuiceFS Community Edition, you should use juicefs sync instead.

Due to release planning, juicesync may not contain the latest features and bug fixes of juicefs sync.

How does it work

juicesync will scan all the keys from two object stores, and comparing them in ascending order to find out missing or outdated keys, then download them from the source and upload them to the destination in parallel.



brew install juicedata/tap/juicesync

binary release

From here

Build from source

Juicesync requires Go 1.16+ to build:

go get


Please select the corresponding upgrade method according to different installation methods:

  • Use Homebrew to upgrade
  • Download a new version from release page


Please check the juicefs sync command documentation for detailed usage.

SRC and DST must be an URI of the following object storage:

  • file: local disk
  • sftp: FTP via SSH
  • s3: Amazon S3
  • hdfs: Hadoop File System (HDFS)
  • gcs: Google Cloud Storage
  • wasb: Azure Blob Storage
  • oss: Alibaba Cloud OSS
  • cos: Tencent Cloud COS
  • ks3: Kingsoft KS3
  • ufile: UCloud US3
  • qingstor: Qing Cloud QingStor
  • bos: Baidu Cloud Object Storage
  • qiniu: Qiniu Object Storage
  • b2: Backblaze B2
  • space: DigitalOcean Space
  • obs: Huawei Cloud OBS
  • oos: CTYun OOS
  • scw: Scaleway Object Storage
  • minio: MinIO
  • scs: Sina Cloud Storage
  • wasabi: Wasabi Object Storage
  • ibmcos: IBM Cloud Object Storage
  • webdav: WebDAV
  • tikv: TiKV
  • redis: Redis
  • mem: In-memory object store

Please check the full supported list here.

SRC and DST should be in the following format:


Some examples:

  • local/path
  • user@host:port:path
  • file:///Users/me/code/
  • hdfs://hdfs@namenode1:9000,namenode2:9000/user/
  • s3://my-bucket/
  • s3://access-key:secret-key-id@my-bucket/prefix
  • wasb://account-name:account-key@my-container/prefix
  • gcs://
  • oss://test
  • cos://test-1234
  • obs://my-bucket
  • bos://my-bucket
  • minio://myip:9000/bucket
  • scs://
  • webdav://host:port/prefix
  • tikv://host1:port,host2:port,host3:port/prefix
  • redis://localhost/1
  • mem://


  • It's recommended to run juicesync in the target region to have better performance.
  • Auto discover endpoint for bucket of S3, OSS, COS, OBS, BOS, SRC and DST can use format NAME://[ACCESS_KEY:SECRET_KEY@]BUCKET[/PREFIX]. ACCESS_KEY and SECRET_KEY can be provided by corresponding environment variables (see below).
  • When you get "/" in ACCESS_KEY or SECRET_KEY strings,you need to replace "/" with "%2F".
  • S3:
    • The access key and secret key for S3 could be provided by AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, or IAM role.
  • Wasb(Windows Azure Storage Blob)
    • The account name and account key can be provided as connection string by AZURE_STORAGE_CONNECTION_STRING.
  • GCS: The machine should be authorized to access Google Cloud Storage.
  • OSS:
    • The credential can be provided by environment variable ALICLOUD_ACCESS_KEY_ID and ALICLOUD_ACCESS_KEY_SECRET , RAM role, EMR MetaService.
  • COS:
    • The AppID should be part of the bucket name.
    • The credential can be provided by environment variable COS_SECRETID and COS_SECRETKEY.
  • OBS:
    • The credential can be provided by environment variable HWCLOUD_ACCESS_KEY and HWCLOUD_SECRET_KEY .
  • BOS:
    • The credential can be provided by environment variable BDCLOUD_ACCESS_KEY and BDCLOUD_SECRET_KEY .
  • Qiniu: The S3 endpoint should be used for Qiniu, for example, If there are keys starting with "/", the domain should be provided as QINIU_DOMAIN.
  • sftp: if your target machine uses SSH certificates instead of password, you should pass the path to your private key file to the environment variable SSH_PRIVATE_KEY_PATH, like SSH_PRIVATE_KEY_PATH=/home/someuser/.ssh/id_rsa juicesync [src] [dst].
  • Scaleway:
    • The credential can be provided by environment variable SCW_ACCESS_KEY and SCW_SECRET_KEY .
  • MinIO:
    • The credential can be provided by environment variable MINIO_ACCESS_KEY and MINIO_SECRET_KEY .