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};