| Crates.io | orb-browse |
| lib.rs | orb-browse |
| version | 0.3.0 |
| created_at | 2026-01-23 01:03:20.658457+00 |
| updated_at | 2026-01-24 01:55:45.10259+00 |
| description | A TUI browser widget for Rust with WebDriver automation for terminal applications |
| homepage | |
| repository | https://github.com/icryo/orb-browse |
| max_upload_size | |
| id | 2063110 |
| size | 172,088 |
A TUI browser widget for Rust - WebDriver automation for terminal applications
orb-browse is a reusable browser component for terminal applications. It provides:
Perfect for building terminal-based web browsers, monitoring tools, or integrating web content into TUI applications.
Add to your Cargo.toml:
[dependencies]
orb-browse = "0.2"
tokio = { version = "1", features = ["full"] }
use orb_browse::{OrbBrowser, widget::{BrowserWidget, BrowserState, BrowserEvent}};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let browser = OrbBrowser::new().await?;
let mut state = BrowserState::new();
// Navigate to URL
state.navigate(&browser, "https://example.com".to_string()).await?;
// In your ratatui render loop:
terminal.draw(|f| {
let widget = BrowserWidget::new(&state)
.block(Block::default().borders(Borders::ALL));
f.render_widget(widget, area);
})?;
// Handle events
state.handle_event(&browser, BrowserEvent::Refresh).await?;
Ok(())
}
See examples/widget.rs for a complete interactive TUI browser example.
use orb_browse::OrbBrowser;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create browser
let browser = OrbBrowser::new().await?;
// Navigate and capture
let screenshot = browser.capture("https://example.com", 1920, 1080).await?;
// Save screenshot
std::fs::write("screenshot.png", &screenshot)?;
// Clean up
browser.close().await?;
Ok(())
}
That's it! No ChromeDriver installation, no configuration needed.
OrbBrowserThe main browser client:
// Create browser (default 1920x1080)
let browser = OrbBrowser::new().await?;
// Create with custom size
let browser = OrbBrowser::with_size(1280, 720).await?;
// Navigate to URL
browser.goto("https://example.com").await?;
// Capture screenshot
let png_bytes = browser.capture("https://example.com", 1920, 1080).await?;
// Access underlying fantoccini client for advanced control
let client = browser.client();
// Close browser
browser.close().await?;
BrowserWidgetRatatui widget for displaying web content:
use orb_browse::widget::{BrowserWidget, BrowserState, BrowserEvent};
let mut state = BrowserState::new();
state.navigate(&browser, url).await?;
// Render in your TUI
frame.render_widget(BrowserWidget::new(&state), area);
// Handle events
state.handle_event(&browser, BrowserEvent::ScrollDown).await?;
state.handle_event(&browser, BrowserEvent::Refresh).await?;
Run the examples:
git clone https://github.com/icryo/orb-browse
cd orb-browse
# Simple automation example
cargo run --example simple
# Interactive TUI widget example
cargo run --example widget
orb-browse uses WebDriver protocol to control Chrome/Chromium:
ORB_BROWSE_CHROME_PATH - Override Chrome binary location
export ORB_BROWSE_CHROME_PATH=/usr/bin/chromium-browser
ORB_BROWSE_VERBOSE=1 - Enable verbose ChromeDriver logging for debugging
ORB_BROWSE_VERBOSE=1 cargo run
Contributions welcome! Please submit a Pull Request.
Licensed under the Apache License, Version 2.0 (LICENSE-APACHE).
Made with ๐ฆ in Rust