/usr/share/doc/nomad

Zero-overhead headless browser. Built for AI agents.

Binary size
~4 MB
Idle RSS
~6 MB
Soak throughput
~17,000 req/s
Multi-page soak
~2,900 req/s
Peak RSS (soak)
6.5 MB
Memory leak
0 KB
Output formats
11 modes
Protocol messages
30 variants
Pipeline · 7 stages
00
fetch_url
I/O · TLS

Chrome UA, native-tls JA3, shared CookieJar. Raw-TCP localhost bypass skips the reqwest connection pool.

01
parse_html
CPU · SIMD

memchr pre-scan with skip-block jumps. ~80% of pages bypass html5ever and tokenize directly into EntityArray.

02
css::match
CPU · indexed

Hash-indexed selectors by tag, class, and id. Compound and combinator selectors — no cascade recursion.

03
layout::solve
CPU · 1-pass

Single forward sweep, block and inline only. Monospace-based text sizing. No reflow loop.

04
js::sandbox
QuickJS · ghost-fleet

Lazy OnceLock QuickJS workers, initialized on first SPA or WAF page. ECS↔JS hydration bridge.

05
page_cache
Memory · zero-copy

LRU cache of pre-serialized frame bytes. Tab_id patched at byte-offset 4. Zero-clone on hit.

06
ecs::frame → wire
Wire · bincode / UDS

Structure-of-Arrays flattened into bincode. XXH3-hashed entities, state-tagged FrameDeltas.

// Every page is 11 parallel vectors in a Structure-of-Arrays layout. diff_since() produces FrameDeltas in O(N) — unchanged entities are omitted from the wire.
#vs alternatives
EngineArchRSSSoakOutputBinary
NomadDaemon~6 MB17,000/s11 formats~4 MB
Chrome HeadlessProcess/tab~400 MB23/sRaw HTML~180 MB
LightpandaProcess/req~26 MB24/sRaw markdown105 MB
PlaywrightProcess/script~180 MB33/sRaw HTML/DOM~150 MB
*Who is it for
+
LLM agent developersBrowse, extract, act in <1s per page
+
AI infra engineersHigh-throughput at 17,000 req/s
+
Data pipeline buildersSummary format ~150 B keeps LLM costs down
+
Web automation teamsStructured output with semantic roles
DaemonMessage · 30 variants
0–5daemon → clientFrame · Delta · Meta
6–15client → daemonNavigate · Scroll · JS
16–19agent opsFindEntities · ClickEntity
20–25extensionsActionLog · CompareTabs
26–29health · authHealth · Handshake