Weave Browser Engine
Search and Perceive
Search and perceive APIs for the agent browser: structured query, page extraction, and entity perception primitives.
Purpose
Agent browser engine for fetch, parse, search, perceive, research, protocol routing, and HTTP serving.
This page follows the real source shape for Weave Browser Engine and explains the workflow a developer is likely to use first.
Developer workflow
Start from the smallest constructor or builder, perform one meaningful operation, inspect the returned state, then add the relevant policy, storage, or network integration. The examples below should be expanded whenever the crate API changes.
Primary types to know
DuckDuckGoEngine— libs/weave-browser-engine/src/search.rsFetchOptions— libs/weave-browser-engine/src/fetch.rsFetchRequest— libs/weave-browser-engine/src/serve.rsHnsResolver— libs/weave-browser-engine/src/protocol.rsHttpResolver— libs/weave-browser-engine/src/protocol.rsHttpsResolver— libs/weave-browser-engine/src/protocol.rsLocalPerceptionBackend— libs/weave-browser-engine/src/perceive.rsPerceiveRequest— libs/weave-browser-engine/src/serve.rsProtocolRouter— libs/weave-browser-engine/src/protocol.rsResearchConfig— libs/weave-browser-engine/src/research.rsResearchRequest— libs/weave-browser-engine/src/serve.rsSearchRequest— libs/weave-browser-engine/src/serve.rs
Example shape
use weave_browser_engine::perceive::{perceive, detect_type, mime_for_ext};
use weave_browser_engine::search::search;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// search() picks the named engine ("duckduckgo" / "bing" / etc.) and returns
// a JSON envelope { results: [{ title, snippet, url }], engine, top }.
let results = search("weave p2p", 5, "duckduckgo").await?;
let count = results["results"].as_array().map(|a| a.len()).unwrap_or(0);
// perceive() dispatches to the local backend by file extension. detect_type
// and mime_for_ext are the shared classifiers callers reuse for routing.
let kind = detect_type("md");
let mime = mime_for_ext("md");
let perception = perceive("./README.md").await.ok();
println!(
"search_hits={} file_kind={} file_mime={} perceived={}",
count,
kind,
mime,
perception.is_some(),
);
Ok(())
}