| Crates.io | remozipsy |
| lib.rs | remozipsy |
| version | 0.2.0 |
| created_at | 2025-04-19 19:45:06.426747+00 |
| updated_at | 2026-01-05 20:39:14.478534+00 |
| description | Remote Zip Sync - sync remote zip to local fs |
| homepage | https://gitlab.com/xMAC94x/remozipsy |
| repository | https://gitlab.com/xMAC94x/remozipsy |
| max_upload_size | |
| id | 1640912 |
| size | 435,365 |
remozipsy is a crate enabling incremental synchronization of zip archives from a remote location. It avoids redownloading the entire archive, instead it only fetches files that have changed since the previous download (by comparing file hashes). This optimizes download times over slow connections.
This crate is designed to efficiently update large datasets consisting of many individual files, with periodic updates. The logic was originally written for Airshipper, the game launcher for Veloren, to update the game more efficiently, but has been split out for general use.

RemoteZip, FileSystem) enabling custom storage backendsreqwest and tokio::fsAdd the following dependency to your Cargo.toml:
[dependencies]
remozipsy = "0.2.0"
See examples/sync_remote_zip.rs for a detailed example.
use remozipsy::{Config, Statemachine, reqwest::ReqwestRemoteZip, tokio::TokioLocalStorage};
#[tokio::main(flavor = "multi_thread", worker_threads = 4)]
pub async fn main() -> Result<(), Box<dyn std::error::Error>> {
let remote = ReqwestRemoteZip::with_url("https://getsamplefiles.com/download/zip/sample-1.zip")?;
let local = TokioLocalStorage::new("./extract", Vec::new());
let state = Statemachine::new(remote, local, Config::default());
while let Some((progress, next_state)) = state.progress().await {
state = next_state;
println!("Progress: {progress:?}");
tokio::task::yield_now().await;
}
Ok(())
}
The main idea is to progress the internal statemachine with statemachine.progress().
remozipsy worksRANGE header to only fetch part of a remote file, luckily many webservers (and github releases) support this feature.For more details, see the documentation and explore examples.
Pull Requests welcome! Start by checking open issues or feature requests in our GitLab repo.