[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94632":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":14,"lastSyncTime":37,"discoverSource":38},94632,"moli","lexmount\u002Fmoli","lexmount","Best browser for AI agents, built in Rust.","https:\u002F\u002Fbrowser.lexmount.com",null,"Rust",379,23,2,1,0,249,54.14,"Other",false,"main",true,[24,25,26,27,28,29,30,31,32,33],"ai-agents","ai-tools","browser","browser-automation","cloud-browser","playwright","puppeteer","rust","servo","web","2026-08-24 04:01:22","\u003Cp align=\"center\">\n  \u003Cimg\n    src=\"assets\u002Fmoli-browser-banner.jpg\"\n    alt=\"Moli Browser — Structure first. Pixels on demand. Open source browser for AI agents.\"\n    width=\"1086\"\n  \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Moli\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>English\u003C\u002Fstrong> |\n  \u003Ca href=\"README.zh-CN.md\">简体中文\u003C\u002Fa> |\n  \u003Ca href=\"README.ja.md\">日本語\u003C\u002Fa> |\n  \u003Ca href=\"README.de.md\">Deutsch\u003C\u002Fa> |\n  \u003Ca href=\"README.fr.md\">Français\u003C\u002Fa> |\n  \u003Ca href=\"README.es.md\">Español\u003C\u002Fa>\n\u003C\u002Fp>\n\nMoli is a headless browser for AI agents, built around an \"on-demand\nrendering\" design and ready for production use.\n\nBy default, it executes real JavaScript, maintains a real DOM, and exposes real\nbrowser APIs. It computes layout or renders pixels only when they are actually\nneeded.\n\nUse it through the CLI, CDP, WebDriver Classic, or WebDriver BiDi.\n\n## Showcase\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"assets\u002Fmoli-game.jpg\">\n    \u003Cimg\n      src=\"assets\u002Fmoli-game.jpg\"\n      alt=\"An HTML5 game rendered by Moli and inspected through Chrome DevTools\"\n      width=\"1200\"\n    \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Csub>An HTML5 game rendered by Moli and inspected live through Chrome DevTools.\u003C\u002Fsub>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"assets\u002Fmoli-devtools-rust-lang.jpg\">\n    \u003Cimg\n      src=\"assets\u002Fmoli-devtools-rust-lang.jpg\"\n      alt=\"rust-lang.org rendered by Moli and inspected through Chrome DevTools\"\n      width=\"1200\"\n    \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Csub>rust-lang.org rendered by Moli, with its live DOM, CSS, and geometry available in Chrome DevTools.\u003C\u002Fsub>\n\u003C\u002Fp>\n\n## Quick start\n\nBuild from the workspace root:\n\n```bash\ncargo build --release -p moli\n```\n\n### Extract a page\n\nRender the page as Markdown with Moli's default completion strategy:\n\n```bash\n.\u002Ftarget\u002Frelease\u002Fmoli fetch \\\n  --dump markdown \\\n  --wait-until done \\\n  https:\u002F\u002Fexample.com\n```\n\nOr directly return a compact, model-friendly semantic tree:\n\n```bash\n.\u002Ftarget\u002Frelease\u002Fmoli fetch \\\n  --dump semantic_tree_text \\\n  --wait-selector body \\\n  https:\u002F\u002Fexample.com\n```\n\nRun `fetch --help` for the complete option list, including output formats,\npage-load\u002Fresponse waits, profiles, proxy settings, resource policies, and\ntracing options.\n\n### Start the automation server\n\n```bash\n# Basic automation server for DOM-first workloads\n.\u002Ftarget\u002Frelease\u002Fmoli serve\n\n# Enable real geometry, coordinate input, and screenshot\u002Fscreencast surfaces\n.\u002Ftarget\u002Frelease\u002Fmoli serve --layout\n\n# Also fetch optional image, font, audio, video, media, and text-track resources\n.\u002Ftarget\u002Frelease\u002Fmoli serve --layout --resource\n```\n\nThe same endpoint serves all three protocols: CDP, WebDriver Classic, and\nWebDriver BiDi. Playwright can connect directly over CDP:\n\n```js\nimport { chromium } from \"playwright\";\n\nconst browser = await chromium.connectOverCDP(\"http:\u002F\u002F127.0.0.1:9222\");\nconst context = browser.contexts()[0];\nconst page = context.pages()[0] ?? await context.newPage();\n\nawait page.goto(\"https:\u002F\u002Fexample.com\");\nconsole.log(await page.locator(\"body\").innerText());\n\nawait browser.close();\n```\n\n## Why Moli\n\nThree qualities matter most for agent workloads, and Moli brings them together:\n\n- **Full-featured** — real JavaScript, DOM, CSS, networking, storage, layout,\n  screenshots, and standard automation protocols, all integrated into one\n  headless browser.\n- **Fast** — most automation requests never need visual rendering, so\n  structure-first operations skip layout and paint entirely.\n- **Resource-efficient** — layout and pixels are generated only when needed,\n  so Moli does not have to continuously maintain and update a fully rendered\n  visual state.\n\nWhat most browser automation tasks actually need is page structure, not a\ncontinuously rendered visual world. Moli treats the native DOM and style state\nas the single source of truth, triggering layout or software paint only for\noperations that genuinely require them.\n\n| Agent request | What Moli does |\n| --- | --- |\n| Extract HTML\u002FMarkdown, query the DOM, run JS, inspect network\u002Fstorage | Reads browser runtime state directly — does not trigger layout or paint |\n| Read an element's box, hit-test coordinates, send coordinate input | Runs one layout calculation and keeps only the latest geometry snapshot |\n| Capture a screenshot or refresh a screencast | Rebuilds from the current DOM\u002Fstyle, renders a fresh frame, and discards it after use |\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"assets\u002Fmoli_ondemand_rendering_flow.svg\">\n    \u003Cimg\n      src=\"assets\u002Fmoli_ondemand_rendering_flow.svg\"\n      alt=\"How Moli handles a request: DOM-first by default, with layout and paint built fresh only on demand\"\n      width=\"680\"\n    \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\nMoli still includes the complete set of capabilities: V8, CSS, layout, text\nshaping, hit-testing, software paint, and more. The only difference is *when*\nvisual work runs and *how long* its results are retained. This cost model is\nespecially well suited to crawling, browser-use agents, retrieval pipelines,\nevaluation environments, and reinforcement-learning workloads.\n\n## Current capabilities\n\n- **Complete web runtime** — streaming HTML parsing, native DOM, V8 JavaScript,\n  modules\u002Ftimers\u002Fmicrotasks\u002Fevents, iframes and workers, CSS cascade,\n  Fetch\u002FXHR\u002FWebSocket, cookies, WebCrypto, and profile-scoped storage\n  (localStorage, IndexedDB, OPFS).\n- **Extraction-optimized outputs** — the CLI directly produces HTML, Markdown,\n  JSON, semantic text trees, and frame-aware serialization, with\n  selector\u002Fscript\u002Fresponse waits and network tracing.\n- **Unified automation binary** — CDP, WebDriver Classic, and WebDriver BiDi\n  share the same kernel and scheduler. No separate ChromeDriver, geckodriver,\n  or browser installation is required.\n- **Real visual capabilities on demand** — add `--layout` to enable complete box\n  construction, Taffy layout, Parley text layout, layout-backed\n  hit-testing\u002Finput, viewport\n  screenshots, and low-frequency CPU-rendered DevTools screencast frames.\n- **Controllable operational options** — profiles, cookies, HTTP cache, proxies,\n  resource families, connection limits, timeouts, private-network policy,\n  user-agent overrides, structured logging, and network diagnostics are all\n  available.\n\n## Moli's relationship with Lexmount\n\nMoli is Lexmount's open-source headless browser; Lexmount Browser is the managed\ncloud runtime and control plane built around it.\n\n**The open-source headless browser is fully usable without Lexmount Browser.**\n\n## Cost controls\n\nExpensive browser operations in Moli require an explicit opt-in and are never\nenabled by default:\n\n| Mode or option | Behavior |\n| --- | --- |\n| Default | `LayoutPolicy::Mock` — deterministic geometry in a compatible format, with no real layout or paint |\n| `--layout` | `LayoutPolicy::OnDemand` — real layout, geometry, hit-testing, coordinate input, screenshots, screencast |\n| `--resource` | Fetch all optional visual\u002Fmedia resource families |\n| `--image`, `--font`, `--audio`, `--video`, `--media`, `--text-track` | Enable one specific optional resource family |\n| `--profile-dir`, `--http-cache-dir`, `--cookie-file` | Selectively enable the persistence required by the workload |\n\nLayout is an on-demand snapshot rather than continuously maintained state. The\nfirst geometry request (a cold start) builds one complete layout from the\ncurrent DOM\u002Fstyle and retains only the latest `LayoutPassOutput`. After that,\nordinary geometry reads may reuse the snapshot even if the page has changed;\nscreenshots and screencasts always rebuild and never reuse stale results.\n\n## Architecture\n\nMoli is a standalone browser kernel, not a Chromium wrapper. It is built in\nRust, has its own ownership and lifecycle rules, and relies on:\n\n- `libcurl` — network transport and multi-request runtime\n- `html5ever` — HTML parsing\n- `rusty_v8` \u002F V8 — JavaScript execution\n- Servo\u002FStylo — selectors, cascade, computed style\n- Taffy + Parley — box and text layout\n- AnyRender\u002FVello CPU, `usvg`, and the Rust image ecosystem — software rendering\n\nDocument and style have a single source of truth: the native DOM and its Stylo\nintegration. Every real refresh rebuilds layout from that source, converts the\nresult into immutable, DOM-independent data, and then discards the temporary\nstate created during that layout and paint pass. The system has no incremental\nlayout tree, damage graph, retained display list, GPU compositor, or persistent\nwindow.\n\n## Test data\n\nThe following two measured data sets show Moli's current capability envelope.\nThe tests cover real websites, real automation clients, focused Chromium\u002FWPT\nbehavior checks, and a large nextest regression suite.\n\n### Mixed public-web crawl test\n\nThe test covers 192 public URLs from major Chinese and international sites. A\npage only counts as successful if it produces meaningful content after\nJavaScript runs — an HTTP 200, challenge page, login wall, empty response, or\nshell-only application does not count.\n\n| Browser | Useful pages | Success rate | Median time | Median RSS |\n| --- | ---: | ---: | ---: | ---: |\n| **Moli** | **103** | **53.6%** | **1.43 s** | **73 MiB** |\n| Chrome Headless | 101 | 52.6% | 1.43 s | 773 MiB |\n| Lightpanda | 85 | 44.3% | 0.97 s | 40 MiB |\n| Obscura | 57 | 29.7% | 1.30 s | 39 MiB |\n\n### Sample agent workload\n\n| Metric | Moli | Chromium |\n| --- | ---: | ---: |\n| CDP ready | 34.85 ms | 169.37 ms |\n| Episode active p50 | 33.40 ms | 57.13 ms |\n| Peak PSS | 102.46 MiB | 348.82 MiB |\n| Peak processes \u002F threads | 1 \u002F 24 | 11 \u002F 123 |\n\nIn the current WPT selection used to validate Moli's agent-browser scope, one\ncomplete run recorded **1.612 million passing tests**.\n\n## Project scope\n\nWithin the agent-browser scenarios defined in its documentation, Moli is ready\nfor production use and remains under active development.\n\nIts current intentional boundaries include:\n\n- No GUI browser, persistent window, GPU compositor, or retained multi-frame\n  paint architecture.\n- It does not pursue pixel-for-pixel parity with Chrome or provide\n  high-fidelity Canvas\u002FWebGL\u002Fmedia playback.\n- It covers selected CDP, WebDriver Classic, and WebDriver BiDi functionality\n  rather than implementing full protocol parity.\n- `--layout` supports software screenshots and raster-backed CDP PDF\n  generation, but not every Chrome screenshot or print mode is implemented.\n- Resource loading, geometry freshness, and visual rendering cost remain\n  explicit policy choices instead of being continuously enabled by default.\n\nUnsupported protocol paths return explicit errors — Moli never pretends that a\nbrowser action, event, network observation, or visual result occurred.\n\nMaintainers can publish a tagged binary release from GitHub Actions by following\nthe [release guide](RELEASING.md).\n\n## License\n\nUnless a file or directory states otherwise, you may use Moli under either the\n[Apache License 2.0](LICENSE-APACHE) or the [MIT License](LICENSE-MIT), at your\noption. Separately licensed third-party components and fixtures remain subject\nto their own licenses and notices.\n","Moli 是一款专为 AI 代理设计的开源无头浏览器，采用 Rust 编写，核心特点是按需渲染（on-demand rendering）：维持真实 DOM、执行真实 JavaScript、暴露标准浏览器 API，但仅在需要时计算布局或生成像素。支持 CLI、Chrome DevTools 协议（CDP）、WebDriver Classic 和 WebDriver BiDi 多种接入方式，可输出 Markdown、语义树等模型友好格式。适用于网页内容结构化提取、AI 自动化任务编排、RAG 数据采集及需要高保真 DOM 与低开销渲染的生产级 AI 浏览场景。","2026-08-13 02:30:05","CREATED_QUERY"]