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 google;
46pub mod js;
47pub mod network;
48pub mod render;
49
50pub use api::rpc::{JsonRpcHandler, RpcError, RpcRequest, RpcResponse};
51pub use browser::builder::BrowserBuilder;
52pub use browser::engine::{BrowserEngine, TabSummary};
53pub use browser::tab::{BrowserTab, NavigationReport};
54pub use dom::markdown::HtmlToMarkdown;
55pub use dom::{
56 AiOverview, DomTree, FormInfo, FormInputInfo, ImageResult, InteractiveElement,
57 InteractiveParser, KnowledgePanel, LinkInfo, NewsResult, OrganicResult, PageObservation,
58 PageRenderer, RealBrowserScreenshot, ScreenshotResult, SearchResults, VideoResult,
59};
60pub use google::{
61 GenericGoogleResult, GoogleAutocompleteResult, GoogleEndpoints, GoogleParser,
62 GoogleSearchResult, OrganicResult as GoogleOrganicResult,
63};
64pub use network::fingerprint::{DeviceProfile, Fingerprint};
65pub use render::{HtmlRenderer, LayoutEngine, PaintEngine};