(开源)eSearch
约 3988 字大约 13 分钟
2026-09-10
ESearch
A from-scratch search engine and browser engine built entirely in Rust
一个完全用 Rust 从零构建的搜索引擎与浏览器引擎
Zero dependency on Chromium, WebKit, Gecko, V8, or any third-party browser/search engine. Every layer from URL parsing to pixel rendering is implemented from first principles in pure Rust.
ESearch is a unified engine architecture that serves as both a browser engine and a search engine in a single codebase. The crawler, indexer, and retrieval modules share the same HTML parser and network stack as the browser, eliminating redundant parsing layers found in traditional architectures.
Why ESearch
| Dimension | ESearch | Chromium |
|---|---|---|
| Language | Rust (memory-safe, no GC) | C++ (manual memory management) |
| External engine deps | Zero — built from scratch | Wraps V8, Blink, network stack |
| Binary size (release) | 492 KB | ~200 MB |
| Search engine | Built-in (inverted index + TF-IDF) | None (relies on external SE) |
| AI integration | Native trait-based layer | Bolted on via extensions |
| TLS/HTTPS | Native (system curl + Schannel) | Bundled BoringSSL |
| GUI | Native Win32 window (FFI) | Cross-platform Aura |
| Unsafe code in core | None | Pervasive |
Core Principles
- From scratch, not a fork — No wrapping or forking existing engines. Every layer of the stack is implemented from first principles.
- Memory-safe from wire to pixel — The entire stack runs in Rust's safe subset. No
unsafeblocks in core modules. Buffer overflows, use-after-free, and data races are prevented at compile time. - Unified architecture — Browser and search engine share one HTML parser, one network stack, one rendering pipeline. No redundant layers.
- AI-native — A pluggable AI capability trait (
AiCapability) is built into the engine core, not bolted on as an extension. The defaultLocalAiuses rule-based NLP requiring no ML model, with a trait design that allows seamless integration of remote LLMs. - Lightweight footprint — The release binary is 492 KB with full LTO. Orders of magnitude smaller than Chromium's ~200 MB.
Features
Browser Engine
- HTML5 tokenizer — State-machine-based, byte-level single-pass scanner
- DOM tree builder — Stack-based construction with void element and auto-closing handling
- CSS engine — Tokenizer, selector engine (type/class/ID/descendant/child/attribute), specificity cascade, computed styles,
get_property()query API - Layout engine — Full box model (margin/border/padding/content), block + inline layout, Flexbox (flex-direction, justify-content, align-items, flex-grow/shrink, gap), CSS Grid (grid-template-columns/rows, fr units, repeat(), gap, grid-area placement)
- Render engine — GPU-ready architecture:
Vertexstructs,RenderCommandenum,RenderBatch,RenderBackendtrait,CpuBackend(software rasterizer, default),GpuBackendstub,Framebuffer(RGBA 4bpp with alpha blending), WGSL shader source embedded, BMP and PPM output - JavaScript engine — Lexer, recursive-descent parser (precedence climbing), tree-walking interpreter with closures (
Rc<RefCell<Environment>>), prototype chain (__proto__), async/await (Promise + microtask), arrow functions,newconstructor withthisbinding, built-in objects (Math, Object, Array, String, JSON, Promise) - Native GUI window — Win32 API FFI bindings, message loop,
BrowserWindowwith tab bar, navigation buttons, address bar, status bar, Morandi pink theme (#C0778E) - TLS/HTTPS — HTTPS URL parsing, dual TLS backend (native system curl + Schannel by default, optional rustls), auto-routing based on URL scheme
- Multi-tab navigation — Tab management with back/forward history, keyboard shortcuts (Ctrl+T/W/L/N, F5, Esc)
Search Engine
- Web crawler — BFS URL frontier, robots.txt parsing, URL deduplication, link extraction with relative URL resolution
- Inverted index — Term-to-posting-list mapping, normalized TF, smoothed IDF (
ln(1 + N/df)) - TF-IDF ranking — Term frequency x inverse document frequency with position tracking
- Query parser — AND (implicit), OR (
OR), NOT (-), phrase queries ("...") - Result formatting — Ranked output with score, URL, title, and content snippet
AI Layer
- Summarization — Extractive summarization via sentence scoring (keyword density + position bias)
- Keyword extraction — Term frequency analysis with configurable count
- Content classification — Article / Product / News / Blog / Documentation / Forum / Social / Search
- Semantic similarity — Jaccard coefficient on token sets
- Question answering — Keyword-matched sentence extraction
- Page analysis — One-call comprehensive analysis: summary, keywords, classification, sentiment, reading time, language detection
- Extensible —
AiCapabilitytrait allows plugging in remote LLM APIs without changing the engine core
Quick Start
Prerequisites
- Rust toolchain (1.98.1+ stable,
x86_64-pc-windows-msvctarget) - Visual Studio 2022 Build Tools (MSVC linker + Windows SDK 10.0.26100+)
Build
git clone https://github.com/techjiang/ESearch.git
cd ESearch
# Debug build
cargo build
# Optimized release build (LTO + panic=abort, 492 KB binary)
cargo build --release
# Run all 176 tests
cargo test
# Launch the GUI browser (default on Windows)
cargo run --bin esearch-browser
# Launch in CLI mode
cargo run --bin esearch-browser -- --cliGUI Mode
ESearch Browser v0.2.0 — GUI Mode
A native Win32 window opens with:
- Tab bar at top with Morandi pink theme
- Navigation buttons (back, forward, reload, home)
- Address bar with text cursor
- Go button and new-tab button
- Status bar at bottom
Keyboard shortcuts:
Ctrl+T New tab Ctrl+W Close tab
Ctrl+L Focus URL Ctrl+N New tab
F5 Reload Esc UnfocusCLI Mode
ESearch Browser v0.2.0
esearch> open https://example.com
Loading https://example.com...
HTTP 200 - https://example.com
Title: Example Domain
Preview: Example Domain This domain is for use in illustrative examples...
esearch> crawl https://example.com
Crawling from https://example.com (max 50 pages)...
Crawled 1 documents, 15 unique terms, 15 total postings
esearch> search example domain
Search: "example domain" (1 results)
1. [score: 0.6931] https://example.com
Title: Example Domain
esearch> analyze
=== AI Page Analysis ===
URL: https://example.com
Content Type: Article
Language: en
Sentiment: Neutral
Reading Time: 1 min
Keywords: domain, example, use, illustrative
esearch> render output.bmp
Rendered to output.bmpProgrammatic API
Each crate is independently usable. Parse HTML and extract text:
use esearch_html;
let html = "<html><body><h1>Hello</h1><p>World</p></body></html>";
let doc = esearch_html::parse(html);
let title = doc.title(); // Option<String>
let text = esearch_html::extract_text(html); // "Hello World"Build a search index and query it:
use esearch_index::InvertedIndex;
use esearch_search::{SearchEngine, format_results};
let mut index = InvertedIndex::new();
index.add_document("http://a.com", Some("Rust Guide".into()), "rust programming language");
index.add_document("http://b.com", Some("Python Guide".into()), "python programming language");
let engine = SearchEngine::new(index);
let results = engine.search("rust programming");
println!("{}", format_results(&results));Evaluate JavaScript with closures, prototypes, and async/await:
use esearch_js;
let code = r#"
function Animal(name) { this.name = name; }
Animal.prototype.speak = function() { return this.name + " speaks"; };
var a = new Animal("Cat");
a.speak();
"#;
let result = esearch_js::eval(code).unwrap();
println!("{}", result); // "Cat speaks"Fetch HTTPS URLs:
use esearch_net::{Url, HttpClient};
let url = Url::parse("https://example.com").unwrap();
let client = HttpClient::new().with_timeout(10);
let response = client.get(&url).unwrap(); // auto-TLS
println!("Status: {}", response.status.code);Analyze a page with AI:
use esearch_ai;
let text = "Rust is a systems programming language focusing on safety and performance.";
let analysis = esearch_ai::analyze_page(text, "http://example.com");
println!("Type: {}", analysis.content_type);
println!("Keywords: {}", analysis.keywords.join(", "));
println!("Summary: {}", analysis.summary);Workspace Structure
ESearch/
|-- Cargo.toml # Workspace manifest (11 crates)
|-- ARCHITECTURE.md # Detailed architecture document
|-- CHANGELOG.md # Version history
|-- CONTRIBUTING.md # Contribution guidelines
|-- CITATION.cff # Citation metadata
|-- crates/
| |-- esearch-net/ # Network stack (URL, HTTP/1.1, TLS/HTTPS)
| |-- esearch-html/ # HTML5 tokenizer + DOM tree builder
| |-- esearch-css/ # CSS parser + selector engine + computed styles
| |-- esearch-layout/ # Box model + block/inline/Flexbox/Grid layout
| |-- esearch-render/ # GPU-ready renderer (Vertex, RenderBatch, CpuBackend, WGSL)
| |-- esearch-js/ # JS engine (closures, prototypes, async/await, arrow fn)
| |-- esearch-crawler/ # Web crawler (URL frontier, robots.txt, dedup)
| |-- esearch-index/ # Inverted index + TF-IDF ranking + tokenizer
| |-- esearch-search/ # Query parser (AND/OR/NOT/phrase) + SearchEngine
| |-- esearch-ai/ # AI capability layer (summary, keywords, QA)
| `-- esearch-browser/ # App binary (Win32 GUI, CLI, tabs, navigation)
`-- tools/ # Build utilities (import lib generator, COFF stubs)Total: 10,453 lines of Rust across 11 crates + tools, 176 unit tests, 0 compiler warnings.
Crate Dependency Graph
esearch-net (no deps)
|
+-- esearch-html (no deps)
| |
| +-- esearch-css (depends: html)
| | |
| | +-- esearch-layout (depends: html, css)
| | |
| | +-- esearch-render (depends: layout)
| |
| +-- esearch-index (depends: html)
| |
| +-- esearch-search (depends: index)
|
+-- esearch-crawler (depends: net, html)
|
+-- esearch-ai (no deps)
|
+-- esearch-browser (depends: all above)Test Coverage
| Crate | Lines | Tests | Key Test Areas |
|---|---|---|---|
| esearch-net | 877 | 22 | URL parsing, HTTP response, HTTPS detection, TLS errors |
| esearch-html | 866 | 12 | Tokenizer states, DOM construction |
| esearch-css | 364 | 5 | Selector parsing, specificity, computed styles, get_property |
| esearch-layout | 1,387 | 19 | Box model, Flexbox, Grid, flex direction/justify/align/gap |
| esearch-render | 1,003 | 20 | Color, vertex, render batch, CPU backend, WGSL, framebuffer |
| esearch-js | 2,288 | 35 | Lexer, parser, closures, prototypes, async/await, arrow fn |
| esearch-crawler | 327 | 6 | Robots.txt, link extraction, dedup |
| esearch-index | 311 | 7 | Tokenizer, TF-IDF, ranking, build from HTML |
| esearch-search | 289 | 6 | Query parsing, search execution, formatting |
| esearch-ai | 378 | 7 | Summary, keywords, classification, QA, similarity |
| esearch-browser | 2,363 | 37 | Tabs, address bar, UI layout, hit testing, rendering |
| Total | 10,453 | 176 | All passing, 0 warnings |
Feature Flags
| Feature | Default | Description |
|---|---|---|
gui | yes | Native Win32 GUI window (esearch-browser) |
cpu-backend | yes | Software rasterizer backend (esearch-render) |
gpu-backend | no | GPU rendering backend via wgpu (esearch-render) |
png-export | no | PNG image export (esearch-render) |
native-tls | yes | System curl + Schannel TLS (esearch-net) |
pure-rust-tls | no | Pure Rust TLS via rustls (esearch-net) |
Roadmap
Near-term
- Font rendering (TrueType/OpenType glyph rasterization)
- HTTP/2 multiplexed connections
- WebAssembly runtime
- DevTools protocol
- Plugin/extension system
Mid-term
- Multi-process architecture (sandboxed tabs)
- WebGL/WebGPU support
- Cross-platform GUI (Linux Wayland/X11, macOS Cocoa)
- Full ECMAScript spec compliance
- Media playback (video/audio codecs)
Long-term
- Mobile platform support (Android/iOS)
- Distributed crawling and sharded index
- GPU-accelerated text shaping and layout
- Service worker / PWA support
Documentation
- ARCHITECTURE.md — Detailed architecture and module descriptions
- docs/USAGE.md — Complete usage guide with all CLI/GUI commands
- docs/DEVELOPMENT.md — Developer guide: crate APIs, build system, testing
- CHANGELOG.md — Version history
- CONTRIBUTING.md — How to contribute
Contributing
Contributions are welcome. See CONTRIBUTING.md for guidelines on code style, testing, and pull request workflow.
License
MIT. See LICENSE for the full text.
ESearch
一个完全用 Rust 从零构建的搜索引擎与浏览器引擎
零依赖 Chromium、WebKit、Gecko、V8 或任何第三方浏览器/搜索引擎。 从 URL 解析到像素渲染的每一层均以第一性原理用纯 Rust 实现。
ESearch 是一种统一引擎架构,在单一代码库中同时作为浏览器引擎和搜索引擎运行。爬虫、索引器和检索模块与浏览器共享同一套 HTML 解析器和网络栈,消除了传统架构中冗余的解析层。
为什么选择 ESearch / Why ESearch
| 维度 | ESearch | Chromium |
|---|---|---|
| 语言 | Rust(内存安全,无 GC) | C++(手动内存管理) |
| 外部引擎依赖 | 零 — 从零构建 | 封装 V8、Blink、网络栈 |
| 二进制大小(release) | 492 KB | ~200 MB |
| 搜索引擎 | 内置(倒排索引 + TF-IDF) | 无(依赖外部搜索引擎) |
| AI 集成 | 原生 trait 层 | 通过扩展附加 |
| TLS/HTTPS | 原生(系统 curl + Schannel) | 内置 BoringSSL |
| GUI | 原生 Win32 窗口(FFI) | 跨平台 Aura |
| 核心模块 unsafe 代码 | 无 | 普遍存在 |
核心原则
- 从零构建,非分叉 — 不封装或分叉现有引擎。技术栈的每一层均以第一性原理实现。
- 从网络到像素的内存安全 — 整个技术栈运行在 Rust 的安全子集中。核心模块无
unsafe块。缓冲区溢出、释放后使用和数据竞争在编译时被阻止。 - 统一架构 — 浏览器和搜索引擎共享一个 HTML 解析器、一个网络栈、一个渲染管线。无冗余层。
- AI 原生 — 可插拔的 AI 能力 trait(
AiCapability)内建于引擎核心,而非作为扩展附加。默认的LocalAi使用基于规则的 NLP,无需 ML 模型,trait 设计允许无缝集成远程 LLM。 - 轻量级体量 — Release 二进制仅 492 KB(全 LTO)。比 Chromium 的 ~200 MB 小数个数量级。
功能特性 / Features
浏览器引擎
- HTML5 分词器 — 基于状态机的字节级单遍扫描器
- DOM 树构建器 — 基于栈的构建,处理空元素和自动闭合标签
- CSS 引擎 — 分词器、选择器引擎(类型/类/ID/后代/子选择器/属性选择器)、特异性级联、计算样式、
get_property()查询 API - 布局引擎 — 完整盒模型(margin/border/padding/content),块级 + 行内布局,Flexbox(flex-direction、justify-content、align-items、flex-grow/shrink、gap),CSS Grid(grid-template-columns/rows、fr 单位、repeat()、gap、grid-area 定位)
- 渲染引擎 — GPU 就绪架构:
Vertex结构体、RenderCommand枚举、RenderBatch、RenderBackendtrait、CpuBackend(软件光栅化器,默认)、GpuBackend桩、Framebuffer(RGBA 4bpp 带 alpha 混合)、嵌入 WGSL 着色器源码、BMP 和 PPM 输出 - JavaScript 引擎 — 词法分析器、递归下降解析器(优先级爬升)、树遍历解释器,支持闭包(
Rc<RefCell<Environment>>)、原型链(__proto__)、async/await(Promise + 微任务)、箭头函数、new构造器与this绑定、内置对象(Math、Object、Array、String、JSON、Promise) - 原生 GUI 窗口 — Win32 API FFI 绑定、消息循环、
BrowserWindow含标签栏、导航按钮、地址栏、状态栏、莫兰迪粉色主题(#C0778E) - TLS/HTTPS — HTTPS URL 解析、双 TLS 后端(默认原生系统 curl + Schannel,可选 rustls)、基于 URL 协议的自动路由
- 多标签导航 — 标签管理含前进/后退历史、键盘快捷键(Ctrl+T/W/L/N、F5、Esc)
搜索引擎
- 网页爬虫 — BFS URL 前沿队列、robots.txt 解析、URL 去重、链接提取与相对 URL 解析
- 倒排索引 — 词项到倒排列表映射、归一化 TF、平滑 IDF(
ln(1 + N/df)) - TF-IDF 排序 — 词频 x 逆文档频率,带位置跟踪
- 查询解析器 — AND(隐式)、OR(
OR)、NOT(-)、短语查询("...") - 结果格式化 — 排序输出含评分、URL、标题和内容摘要
AI 层
- 摘要 — 基于句子评分的抽取式摘要(关键词密度 + 位置偏置)
- 关键词提取 — 词频分析,可配置数量
- 内容分类 — 文章 / 产品 / 新闻 / 博客 / 文档 / 论坛 / 社交 / 搜索
- 语义相似度 — 基于 token 集合的 Jaccard 系数
- 问答 — 关键词匹配句子提取
- 页面分析 — 一次调用完成综合分析:摘要、关键词、分类、情感、阅读时间、语言检测
- 可扩展 —
AiCapabilitytrait 允许接入远程 LLM API 而无需更改引擎核心
快速开始 / Quick Start
前置条件
- Rust 工具链(1.98.1+ stable,
x86_64-pc-windows-msvc目标) - Visual Studio 2022 Build Tools(MSVC 链接器 + Windows SDK 10.0.26100+)
构建
git clone https://github.com/techjiang/ESearch.git
cd ESearch
# Debug 构建
cargo build
# 优化的 release 构建(LTO + panic=abort,492 KB 二进制)
cargo build --release
# 运行全部 176 个测试
cargo test
# 启动 GUI 浏览器(Windows 上默认)
cargo run --bin esearch-browser
# 以 CLI 模式启动
cargo run --bin esearch-browser -- --cliGUI 模式
ESearch Browser v0.2.0 — GUI Mode
A native Win32 window opens with:
- Tab bar at top with Morandi pink theme
- Navigation buttons (back, forward, reload, home)
- Address bar with text cursor
- Go button and new-tab button
- Status bar at bottom
Keyboard shortcuts:
Ctrl+T New tab Ctrl+W Close tab
Ctrl+L Focus URL Ctrl+N New tab
F5 Reload Esc UnfocusCLI 模式
ESearch Browser v0.2.0
esearch> open https://example.com
Loading https://example.com...
HTTP 200 - https://example.com
Title: Example Domain
Preview: Example Domain This domain is for use in illustrative examples...
esearch> crawl https://example.com
Crawling from https://example.com (max 50 pages)...
Crawled 1 documents, 15 unique terms, 15 total postings
esearch> search example domain
Search: "example domain" (1 results)
1. [score: 0.6931] https://example.com
Title: Example Domain
esearch> analyze
=== AI Page Analysis ===
URL: https://example.com
Content Type: Article
Language: en
Sentiment: Neutral
Reading Time: 1 min
Keywords: domain, example, use, illustrative
esearch> render output.bmp
Rendered to output.bmp编程 API
每个 crate 可独立使用。解析 HTML 并提取文本:
use esearch_html;
let html = "<html><body><h1>Hello</h1><p>World</p></body></html>";
let doc = esearch_html::parse(html);
let title = doc.title(); // Option<String>
let text = esearch_html::extract_text(html); // "Hello World"构建搜索索引并查询:
use esearch_index::InvertedIndex;
use esearch_search::{SearchEngine, format_results};
let mut index = InvertedIndex::new();
index.add_document("http://a.com", Some("Rust Guide".into()), "rust programming language");
index.add_document("http://b.com", Some("Python Guide".into()), "python programming language");
let engine = SearchEngine::new(index);
let results = engine.search("rust programming");
println!("{}", format_results(&results));用闭包、原型链和 async/await 执行 JavaScript:
use esearch_js;
let code = r#"
function Animal(name) { this.name = name; }
Animal.prototype.speak = function() { return this.name + " speaks"; };
var a = new Animal("Cat");
a.speak();
"#;
let result = esearch_js::eval(code).unwrap();
println!("{}", result); // "Cat speaks"获取 HTTPS URL:
use esearch_net::{Url, HttpClient};
let url = Url::parse("https://example.com").unwrap();
let client = HttpClient::new().with_timeout(10);
let response = client.get(&url).unwrap(); // auto-TLS
println!("Status: {}", response.status.code);用 AI 分析页面:
use esearch_ai;
let text = "Rust is a systems programming language focusing on safety and performance.";
let analysis = esearch_ai::analyze_page(text, "http://example.com");
println!("Type: {}", analysis.content_type);
println!("Keywords: {}", analysis.keywords.join(", "));
println!("Summary: {}", analysis.summary);工作区结构 / Workspace Structure
ESearch/
|-- Cargo.toml # Workspace manifest (11 crates)
|-- ARCHITECTURE.md # Detailed architecture document
|-- CHANGELOG.md # Version history
|-- CONTRIBUTING.md # Contribution guidelines
|-- CITATION.cff # Citation metadata
|-- crates/
| |-- esearch-net/ # Network stack (URL, HTTP/1.1, TLS/HTTPS)
| |-- esearch-html/ # HTML5 tokenizer + DOM tree builder
| |-- esearch-css/ # CSS parser + selector engine + computed styles
| |-- esearch-layout/ # Box model + block/inline/Flexbox/Grid layout
| |-- esearch-render/ # GPU-ready renderer (Vertex, RenderBatch, CpuBackend, WGSL)
| |-- esearch-js/ # JS engine (closures, prototypes, async/await, arrow fn)
| |-- esearch-crawler/ # Web crawler (URL frontier, robots.txt, dedup)
| |-- esearch-index/ # Inverted index + TF-IDF ranking + tokenizer
| |-- esearch-search/ # Query parser (AND/OR/NOT/phrase) + SearchEngine
| |-- esearch-ai/ # AI capability layer (summary, keywords, QA)
| `-- esearch-browser/ # App binary (Win32 GUI, CLI, tabs, navigation)
`-- tools/ # Build utilities (import lib generator, COFF stubs)总计:11 个 crate + tools 共 10,453 行 Rust 代码,176 个单元测试,0 个编译器警告。
Crate 依赖图
esearch-net (no deps)
|
+-- esearch-html (no deps)
| |
| +-- esearch-css (depends: html)
| | |
| | +-- esearch-layout (depends: html, css)
| | |
| | +-- esearch-render (depends: layout)
| |
| +-- esearch-index (depends: html)
| |
| +-- esearch-search (depends: index)
|
+-- esearch-crawler (depends: net, html)
|
+-- esearch-ai (no deps)
|
+-- esearch-browser (depends: all above)测试覆盖 / Test Coverage
| Crate | 行数 | 测试数 | 关键测试领域 |
|---|---|---|---|
| esearch-net | 877 | 22 | URL 解析、HTTP 响应、HTTPS 检测、TLS 错误 |
| esearch-html | 866 | 12 | 分词器状态、DOM 构建 |
| esearch-css | 364 | 5 | 选择器解析、特异性、计算样式、get_property |
| esearch-layout | 1,387 | 19 | 盒模型、Flexbox、Grid、flex direction/justify/align/gap |
| esearch-render | 1,003 | 20 | 颜色、顶点、渲染批次、CPU 后端、WGSL、帧缓冲 |
| esearch-js | 2,288 | 35 | 词法分析、解析器、闭包、原型链、async/await、箭头函数 |
| esearch-crawler | 327 | 6 | Robots.txt、链接提取、去重 |
| esearch-index | 311 | 7 | 分词器、TF-IDF、排序、从 HTML 构建 |
| esearch-search | 289 | 6 | 查询解析、搜索执行、格式化 |
| esearch-ai | 378 | 7 | 摘要、关键词、分类、问答、相似度 |
| esearch-browser | 2,363 | 37 | 标签页、地址栏、UI 布局、点击测试、渲染 |
| 总计 | 10,453 | 176 | 全部通过,0 警告 |
Feature Flags / 功能开关
| Feature | 默认 | 说明 |
|---|---|---|
gui | 是 | 原生 Win32 GUI 窗口(esearch-browser) |
cpu-backend | 是 | 软件光栅化后端(esearch-render) |
gpu-backend | 否 | 通过 wgpu 的 GPU 渲染后端(esearch-render) |
png-export | 否 | PNG 图片导出(esearch-render) |
native-tls | 是 | 系统 curl + Schannel TLS(esearch-net) |
pure-rust-tls | 否 | 纯 Rust TLS via rustls(esearch-net) |
路线图 / Roadmap
近期
- 字体渲染(TrueType/OpenType 字形光栅化)
- HTTP/2 多路复用连接
- WebAssembly 运行时
- DevTools 协议
- 插件/扩展系统
中期
- 多进程架构(沙箱标签页)
- WebGL/WebGPU 支持
- 跨平台 GUI(Linux Wayland/X11、macOS Cocoa)
- 完整 ECMAScript 规范合规
- 媒体播放(视频/音频编解码器)
远期
- 移动平台支持(Android/iOS)
- 分布式爬虫和分片索引
- GPU 加速文本整形和布局
- Service Worker / PWA 支持
文档 / Documentation
- ARCHITECTURE.md — 详细架构与模块说明
- docs/USAGE.md — 完整使用指南含全部 CLI/GUI 命令
- docs/DEVELOPMENT.md — 开发者指南:crate API、构建系统、测试
- CHANGELOG.md — 版本历史
- CONTRIBUTING.md — 如何贡献
贡献 / Contributing
欢迎贡献。请参阅 CONTRIBUTING.md 了解代码风格、测试和 Pull Request 工作流程。
许可证 / License
MIT。完整文本见 LICENSE。
ESearch — 从零构建,非分叉衍生。 / Built from scratch, not a fork.
