Skip to main content

headless_engine/
lib.rs

1//! # Headless Engine
2//!
3//! An ultra-lightweight (<30MB RAM), detection-free pure-Rust headless browser engine
4//! architected specifically for AI agents, web scraping, and Go-based MCP servers.
5//!
6//! ## Quick Start (Rust SDK)
7//! ```no_run
8//! use headless_engine::{BrowserTab, DeviceProfile};
9//!
10//! #[tokio::main]
11//! async fn main() -> anyhow::Result<()> {
12//!     let mut tab = BrowserTab::with_profile(DeviceProfile::ChromeWindows)?;
13//!     let report = tab.navigate("https://en.wikipedia.org/wiki/Rust_(programming_language)").await?;
14//!     println!("Title: {}", report.page_title);
15//!
16//!     let markdown = tab.extract_markdown(None).unwrap();
17//!     println!("Clean LLM Markdown:\n{}", markdown);
18//!
19//!     Ok(())
20//! }
21//! ```
22//!
23//! ## Multi-Tab Engine Example
24//! ```no_run
25//! use headless_engine::{BrowserEngine, DeviceProfile};
26//!
27//! #[tokio::main]
28//! async fn main() -> anyhow::Result<()> {
29//!     let mut engine = BrowserEngine::new()?;
30//!     let tab1 = engine.create_tab(Some(DeviceProfile::ChromeWindows))?;
31//!     let tab2 = engine.create_tab(Some(DeviceProfile::SafariIos))?;
32//!
33//!     engine.get_tab_mut(&tab1).unwrap().navigate("https://news.ycombinator.com/").await?;
34//!     engine.get_tab_mut(&tab2).unwrap().navigate("https://google.com/").await?;
35//!
36//!     Ok(())
37//! }
38//! ```
39
40#![allow(dead_code)]
41
42pub mod api;
43pub mod browser;
44pub mod dom;
45pub mod js;
46pub mod network;
47pub mod render;
48
49pub use api::rpc::{JsonRpcHandler, RpcError, RpcRequest, RpcResponse};
50pub use browser::builder::BrowserBuilder;
51pub use browser::engine::{BrowserEngine, TabSummary};
52pub use browser::tab::{BrowserTab, NavigationReport};
53pub use dom::markdown::HtmlToMarkdown;
54pub use dom::{
55    AiOverview, DomTree, FormInfo, FormInputInfo, ImageResult, InteractiveElement,
56    InteractiveParser, KnowledgePanel, LinkInfo, NewsResult, OrganicResult, PageObservation,
57    PageRenderer, ScreenshotResult, SearchResults, VideoResult,
58};
59pub use network::fingerprint::{DeviceProfile, Fingerprint};
60pub use render::{HtmlRenderer, LayoutEngine, PaintEngine};