void_crawl_core 0.5.0

Rust-native CDP browser automation core — stealth-patched headless Chrome, profile leasing, captcha detection
[package]
name = "void_crawl_core"
version = "0.5.0"
edition.workspace = true
license.workspace = true
rust-version.workspace = true
description = "Rust-native CDP browser automation core — stealth-patched headless Chrome, profile leasing, captcha detection"
homepage = "https://github.com/CascadingLabs/VoidCrawl"
repository = "https://github.com/CascadingLabs/VoidCrawl"
documentation = "https://docs.rs/void_crawl_core"
readme = "../../README.md"
keywords = ["chrome", "cdp", "browser", "automation", "stealth"]
categories = ["web-programming", "api-bindings"]

[lints]
workspace = true

[features]
default = []
# Encode a recording to an animated GIF in-process. Pure Rust, no external
# binary; `image`'s GIF encoder handles quantization.
encode-gif = ["image/gif"]
# Encode a recording to MP4/WebM by shelling out to an `ffmpeg` binary on
# PATH. No extra crates — the dependency is the binary itself.
encode-ffmpeg = []

[dependencies]
chromiumoxide = { version = "0.9", default-features = false }
tokio = { version = "1", features = ["full"] }
futures = "0.3"
thiserror = "2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
schemars = "1"
# Linear-time (RE2-style) regex engine for anti-bot vendor fingerprinting.
# No backtracking → safe to run on attacker-controlled responses every fetch.
regex = "1"
globset = "0.4"
base64 = "0.22"
# Frame decode/crop/re-encode for screen recording. Codecs limited to the two
# formats CDP's screencast emits — this is not a general image stack, and the
# default feature set would pull in a dozen decoders we never touch.
image = { version = "0.25", default-features = false, features = ["jpeg", "png"] }
reqwest = { version = "0.13", default-features = false, features = ["rustls-no-provider", "json"] }
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12"] }
tempfile = "3"
fd-lock = "4"
uuid = { version = "1", features = ["v4"] }
# Content-safety gate for downloads: pure-Rust YARA engine (signatures) +
# magic-byte type detection. Both MIT/Apache-2.0, no external daemon.
# default-features off drops the binary-format modules (pe/macho/dotnet/…) we
# don't use — and with them the `rsa`/`dsa` crypto crates (RUSTSEC-flagged) and
# other heavy transitive deps. Our ruleset is string-only, so the core suffices.
yara-x = { version = "1.7", default-features = false }
infer = "0.16"

[dev-dependencies]
tempfile = "3"