| Crates.io | browser_launcher |
| lib.rs | browser_launcher |
| version | 1.0.1 |
| created_at | 2025-12-25 14:21:31.206702+00 |
| updated_at | 2025-12-25 14:21:31.206702+00 |
| description | A cross-platform Rust library for launching browsers with extensive configuration options |
| homepage | https://github.com/chouzz/browser_launcher |
| repository | https://github.com/chouzz/browser_launcher |
| max_upload_size | |
| id | 2004595 |
| size | 91,930 |
A powerful, cross-platform Rust library for launching browsers (Chrome, Edge, Safari, Firefox, etc.) with extensive configuration options. Supports multiple browsers on Windows, macOS, and Linux.
Add this to your Cargo.toml:
[dependencies]
browser_launcher = "1.0.0"
cargo install browser_launcher
use browser_launcher::{Launcher, Options, BrowserType};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut options = Options::default();
options.starting_url = Some("https://www.google.com".to_string());
options.browser = Some(BrowserType::Chrome);
options.headless = Some(true);
let mut launcher = Launcher::new(options);
match launcher.launch() {
Ok(mut launched_browser) => {
println!("Launched browser with PID: {}", launched_browser.pid);
println!("Remote debugging port: {}", launched_browser.port);
// Wait for the browser to exit
let _ = launched_browser.process.wait()?;
println!("Browser process has exited.");
}
Err(e) => {
eprintln!("Error launching browser: {}", e);
}
}
Ok(())
}
Launch Chrome with default settings:
browser_launcher_cli
Launch Edge in headless mode:
browser_launcher_cli --browser edge --headless --starting-url "https://example.com"
Launch with custom window size and security disabled:
browser_launcher_cli \
--browser chrome \
--window-size 1920x1080 \
--disable-web-security \
--starting-url "https://example.com"
The library supports multiple browsers:
BrowserType::Chrome - Google ChromeBrowserType::ChromeCanary - Google Chrome CanaryBrowserType::Chromium - ChromiumBrowserType::Edge - Microsoft EdgeBrowserType::Brave - Brave BrowserBrowserType::Opera - OperaBrowserType::Vivaldi - VivaldiBrowserType::Custom(path) - Custom browser executableThe Options struct provides extensive configuration:
use browser_launcher::{Options, BrowserType};
let options = Options {
// Browser selection
browser: Some(BrowserType::Edge),
// Basic settings
starting_url: Some("https://example.com".to_string()),
port: Some(9222),
user_data_dir: Some("/tmp/browser-data".to_string()),
// Launch modes
headless: Some(true),
incognito: Some(false),
// Window settings
window_size: Some((1920, 1080)),
// Security settings
disable_web_security: Some(false),
no_sandbox: Some(false),
ignore_ssl_errors: Some(false),
// Content settings
disable_images: Some(false),
disable_javascript: Some(false),
// Network settings
proxy_server: Some("http://proxy:8080".to_string()),
user_agent: Some("Custom User Agent".to_string()),
// Additional flags
browser_flags: Some(vec!["--custom-flag".to_string()]),
additional_args: Some(vec!["--extra-arg=value".to_string()]),
..Default::default()
};
The library automatically detects installed browsers:
use browser_launcher::{BrowserFinder, BrowserType};
let finder = BrowserFinder::default();
let browsers = finder.find_all();
for browser in browsers {
println!("Found {}: {}", browser.name(), browser.executable_path);
if let Some(version) = browser.get_version() {
println!("Version: {}", version);
}
}
The CLI tool supports all major browser launch options:
--browser <BROWSER>: Browser type (chrome, chromium, edge, brave, opera, vivaldi)--headless: Run in headless mode--incognito: Run in incognito/private mode--window-size <WIDTHxHEIGHT>: Set window size (e.g., 1920x1080)--no-sandbox: Disable sandbox (use with caution)--disable-web-security: Disable web security features--ignore-ssl-errors: Ignore SSL certificate errors--allow-insecure-content: Allow running insecure content--disable-extensions: Disable browser extensions--disable-plugins: Disable plugins--disable-images: Disable image loading--disable-javascript: Disable JavaScript execution--proxy-server <URL>: Set proxy server--host-resolver-rules <RULES>: Set host resolver rules--user-agent <STRING>: Set custom user agent--user-data-dir <PATH>: Set user data directory--port <PORT>: Set remote debugging port--starting-url <URL>: Set initial URL to load--browser-flags <FLAGS>: Additional browser flags (comma-separated)--additional-args <ARGS>: Additional arguments (comma-separated)use browser_launcher::{Launcher, Options, BrowserType};
let options = Options {
browser: Some(BrowserType::Chrome),
headless: Some(true),
window_size: Some((1920, 1080)),
starting_url: Some("https://example.com".to_string()),
browser_flags: Some(vec![
"--screenshot=output.png".to_string(),
"--hide-scrollbars".to_string(),
]),
..Default::default()
};
let mut launcher = Launcher::new(options);
launcher.launch()?;
use browser_launcher::{Launcher, Options, BrowserType};
let options = Options {
browser: Some(BrowserType::Chrome),
headless: Some(true),
disable_images: Some(true),
disable_extensions: Some(true),
user_agent: Some("Mozilla/5.0 (compatible; WebScraper/1.0)".to_string()),
starting_url: Some("https://target-site.com".to_string()),
..Default::default()
};
let mut launcher = Launcher::new(options);
launcher.launch()?;
browser_launcher_cli \
--browser chrome \
--disable-extensions \
--disable-plugins \
--starting-url "http://localhost:3000"
browser_launcher_cli \
--browser edge \
--disable-web-security \
--ignore-ssl-errors \
--allow-insecure-content \
--starting-url "https://test-site.com"
CHROME_PATH: Specify custom Chrome executable pathBROWSER_PATH: Specify custom browser executable path (preferred)LIGHTHOUSE_CHROMIUM_PATH: Legacy Chromium path (deprecated)HEADLESS: Set to any value to enable headless modeRun the test suite:
cargo test
Run integration tests:
cargo test --test integration_tests
git checkout -b feature-namecargo testgit commit -am 'Add feature'git push origin feature-namecargo build
cargo run --bin browser_launcher_cli -- --help
src/
โโโ browser.rs # Browser detection and types
โโโ browser_launcher.rs # Main launcher implementation
โโโ cli.rs # CLI interface
โโโ flags.rs # Default Chrome flags
โโโ lib.rs # Library exports and tests
โโโ utils.rs # Utility functions
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Inspired by the chrome-launcher TypeScript library.