browserflare 0.2.0

Rust client for Cloudflare Browser Rendering APIs (crawl, screenshot, PDF)
Documentation

browserflare

Rust client for Cloudflare Browser Rendering APIs.

Supports crawling, screenshots, and PDF generation.

Prefer a GUI App? Look at our desktop app - browserflare.xyz.

What's New in 0.2.0

All API functions (start_crawl, take_screenshot, generate_pdf, etc.) now take an explicit &ApiConfig parameter instead of fetching credentials internally. This makes the library testable against mock servers via the new test_config() helper. See CHANGELOG.md for the full list of changes and a migration guide.

Installation

[dependencies]
browserflare = "0.2.0"
tokio = { version = "1", features = ["full"] }
reqwest = "0.12"

Setup

Set your Cloudflare credentials as environment variables (or in a .env file):

CF_ACCOUNT_ID=your_account_id
CF_API_TOKEN=your_api_token

Usage

Screenshot

use browserflare::{
    get_screenshot_api_config, take_screenshot, save_screenshot, ScreenshotPayload,
};

#[tokio::main]
async fn main() -> browserflare::Result<()> {
    let client = reqwest::Client::new();
    let config = get_screenshot_api_config()?;
    let payload = ScreenshotPayload {
        url: "https://browserflare.xyz".into(),
        ..Default::default()
    };
    let result = take_screenshot(&client, &config, &payload).await?;
    save_screenshot("https://browserflare.xyz", &result.bytes, &result.content_type, None)?;
    Ok(())
}

Crawl

use browserflare::{
    get_api_config, start_crawl, poll_until_complete, save_results, CrawlPayload,
};

#[tokio::main]
async fn main() -> browserflare::Result<()> {
    let client = reqwest::Client::new();
    let config = get_api_config()?;
    let payload = CrawlPayload {
        url: "https://browserflare.xyz".into(),
        limit: Some(10),
        formats: Some(vec!["markdown".into()]),
        ..Default::default()
    };
    let job_id = start_crawl(&client, &config, &payload).await?;
    let result = poll_until_complete(&client, &config, &job_id, 3, None).await?;
    save_results(&job_id, &result, Some(&["markdown".into()]))?;
    Ok(())
}

PDF

use browserflare::{get_pdf_api_config, generate_pdf, save_pdf, PdfPayload};

#[tokio::main]
async fn main() -> browserflare::Result<()> {
    let client = reqwest::Client::new();
    let config = get_pdf_api_config()?;
    let payload = PdfPayload {
        url: Some("https://browserflare.xyz".into()),
        ..Default::default()
    };
    let result = generate_pdf(&client, &config, &payload).await?;
    save_pdf("https://browserflare.xyz", &result.bytes, None)?;
    Ok(())
}

Testing

The library includes 49 tests covering API calls (via mock HTTP), file I/O, and job management.

cargo test

To test against a mock server in your own code, use the test_config helper:

use browserflare::{test_config, start_crawl, CrawlPayload};

let config = test_config("http://localhost:8080");
let result = start_crawl(&client, &config, &payload).await;

License

MIT