An async Rust client for the Cyberdrop and Bunkr APIs, built on reqwest.
Features
- Authentication — Login, register, and token verification with permission flags.
- Album management — List, create, edit metadata, toggle public/download, and rotate share links.
- File listing — Album file listing with built-in pagination (single page or all pages).
- Uploads — Automatic upload-node discovery, streaming for small files, chunked uploads for large files, and per-file progress callbacks.
- Typed models — Explicit error types for auth failures, album-not-found, album-exists, and missing fields.
- Low-level access — Optional raw
get for endpoints not covered by higher-level methods.
Installation
[dependencies]
cyberdrop-client = "0.4"
Quick Start
Cyberdrop
use cyberdrop_client::CyberdropClient;
use std::path::Path;
#[tokio::main]
async fn main() -> Result<(), cyberdrop_client::CyberdropError> {
let client = CyberdropClient::builder().build()?;
let token = client.login("username", "password").await?;
let authed = client.with_auth_token(token.into_string());
let albums = authed.list_albums().await?;
println!("albums: {}", albums.albums.len());
let album_id = authed
.create_album("my uploads", Some("created by cyberdrop-client"))
.await?;
let uploaded = authed
.upload_file(Path::new("path/to/file.jpg"), Some(album_id))
.await?;
println!("uploaded {} -> {}", uploaded.name, uploaded.url);
Ok(())
}
Bunkr
let client = CyberdropClient::builder()
.base_url("https://dash.bunkr.cr")?
.auth_token("your_auth_token_here")
.timeout(std::time::Duration::from_secs(500))
.build()?;
Examples
Examples live in examples/ and accept args or environment variables.
Environment variables used by most examples:
CYBERDROP_USERNAME
CYBERDROP_PASSWORD
cargo run --example register -- <username> <password>
cargo run --example login -- <username> <password>
cargo run --example list_albums -- <username> <password>
cargo run --example create_album -- <username> <password> "<name>" ["<description>"]
cargo run --example edit_album -- <username> <password> <album_id> ["<new_name>"] ["<new_identifier>"]
cargo run --example list_album_files -- <username> <password> <album_id> [page]
cargo run --example request_new_album_link -- <username> <password> <album_id>
cargo run --example upload_file -- <username> <password> <path> [album_id]
Documentation
For detailed API documentation, visit docs.rs/cyberdrop-client.
Support
If this crate saves you time or helps your work, support is appreciated:
