All checks were successful
ci / fast (linux) (push) Successful in 6m46s
Install BMAD workflow framework with agent commands and templates. Create product brief, PRD, project context, and architecture decision document covering networking/persistence strategy, JS engine evolution path, threading model, web_api scaling, system integration, and tab/process model. Add generated project documentation (architecture overview, component inventory, development guide, source tree analysis). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
123 lines
6.7 KiB
Markdown
123 lines
6.7 KiB
Markdown
# Component Inventory — rust_browser
|
|
|
|
**Generated:** 2026-03-05 | **Scan Level:** Deep
|
|
|
|
## Crate Inventory by Layer
|
|
|
|
### Layer 0: Foundation
|
|
|
|
| Crate | Files | Key Exports | Purpose |
|
|
|---|---|---|---|
|
|
| **shared** | 3 | `Point`, `Size`, `Rect`, `Color`, `NodeId`, `StyleId`, `LayoutId`, `BrowserUrl`, `EdgeSizes`, `CornerRadii`, `FontStyle`, `FontWeight`, `ImageId` | Common types, geometry primitives, ID types, error handling |
|
|
|
|
### Layer 1: JavaScript Engine
|
|
|
|
| Crate | Files | Key Exports | Purpose |
|
|
|---|---|---|---|
|
|
| **js_parser** | 35 | `JsParser`, `Tokenizer`, `Program`, `Statement`, `Expression`, `Token`, `ParseError` | JavaScript tokenization and AST parsing |
|
|
| **js_vm** | 48 | `JsVm`, `JsValue`, `Interpreter`, `Environment`, `VmConfig`, `HostEnvironment`, `JsFunction`, `RuntimeError`, `OutputSink` | JavaScript interpreter/virtual machine |
|
|
| **js** | 1 | `JsEngine`, `JsError` (+ re-exports from js_parser, js_vm) | High-level JS engine facade |
|
|
|
|
### Layer 1: Document/Style Pipeline
|
|
|
|
| Crate | Files | Key Exports | Purpose |
|
|
|---|---|---|---|
|
|
| **html** | 9 | `HtmlParser` (parse, parse_into, parse_fragment, tokenize) | HTML5 tokenization and tree building |
|
|
| **dom** | 10 | `Document`, `Node`, `NodeKind`, `ElementData`, `Attribute`, `TreeIterator` | Arena-based DOM tree representation |
|
|
| **css** | 36 | `CssParser`, `CssTokenizer`, `Stylesheet`, `CssValue`, `Declaration`, `Rule`, `Selector`, `Unit`, `FontFaceRule` | CSS parsing, tokenization, data structures |
|
|
| **selectors** | 17 | `SelectorEngine`, `MatchedRule`, `Selector`, `SimpleSelector`, `Combinator`, `PseudoClass`, `PseudoElement`, `Specificity`, `AncestorFilter` | CSS selector matching, specificity, cascade |
|
|
| **style** | 34 | `StyledDocument`, `StyleContext`, `ComputedStyles`, `Display`, `Position`, `Float`, `Clear`, `BoxSizing`, `Overflow`, `TextAlign`, `VerticalAlign` | Style computation: cascade, inheritance, UA defaults |
|
|
|
|
### Layer 1: Layout & Rendering
|
|
|
|
| Crate | Files | Key Exports | Purpose |
|
|
|---|---|---|---|
|
|
| **layout** | 60 | `LayoutEngine`, `LayoutNode`, `TextMeasurer`, `FixedWidthTextMeasurer`, `ProportionalTextMeasurer`, `FontMetrics` | Layout engine: block, inline, flex, table, positioned |
|
|
| **display_list** | 13 | `DisplayListBuilder`, `DisplayItem` (SolidRect, Border, Text, Image, BackgroundImage, LinearGradient, BoxShadow, PushClip, PopClip), `DisplayList` | Backend-agnostic painting commands |
|
|
| **render** | 14 | `Renderer`, `CpuRasterizer`, `PixelBuffer` | CPU rasterization of display lists |
|
|
| **graphics** | 1 | `GraphicsBackend` | Graphics backend abstraction (placeholder) |
|
|
|
|
### Layer 1: Infrastructure
|
|
|
|
| Crate | Files | Key Exports | Purpose |
|
|
|---|---|---|---|
|
|
| **net** | 7 | `NetworkStack`, `HttpLoader`, `FileLoader`, `DataUriLoader`, `Response`, `LoadResult`, `LoadId` | HTTP/HTTPS, file://, data: URI loading with caching |
|
|
| **image** | 1 | `ImageStore`, `ImagePipeline`, `DecodedImage` | Image decoding: PNG, JPEG, GIF, WebP, SVG |
|
|
| **fonts** | 5 | `FontProvider`, `FontRequest`, `TextMetrics`, `ScaledFontMetrics`, `GlyphMask` | Font loading, metrics, text measurement, rasterization |
|
|
| **storage** | 1 | `StorageEngine` | Persistent storage (placeholder) |
|
|
| **platform** | 4 | `PlatformContext`, `EventLoop`, `Window`, `WindowConfig`, `WindowEvent`, `KeyCode`, `MouseButton`, `Modifiers` | OS window/event loop abstraction (winit + softbuffer) |
|
|
| **web_api** | 14 | `WebApiFacade`, `EventTarget`, `EventListenerRegistry`, `TaskQueue`, `MicrotaskQueue`, `PromiseRegistry`, `DispatchResult` | JS↔DOM bridge, events, scheduling, promises |
|
|
|
|
### Layer 2: Browser Runtime
|
|
|
|
| Crate | Files | Key Exports | Purpose |
|
|
|---|---|---|---|
|
|
| **browser_runtime** | 5 | `BrowserRuntime`, `BrowsingContext`, `Navigation`, `NavigationState`, `NavigationId` | Tab management, navigation lifecycle, history |
|
|
|
|
### Layer 3: Application Shell
|
|
|
|
| Crate | Files | Key Exports | Purpose |
|
|
|---|---|---|---|
|
|
| **app_browser** | 31 | `main()`, `run_windowed_mode()`, `run_render_mode()` | Desktop binary: CLI, pipeline orchestration, browser chrome, hit testing, form handling |
|
|
|
|
## Application Shell Components (app_browser)
|
|
|
|
| Module | Purpose |
|
|
|---|---|
|
|
| **main** | CLI argument parsing, mode selection |
|
|
| **app_state** | Mutable browser state (page, scroll, focus) |
|
|
| **chrome** | Browser UI chrome (URL bar, status) |
|
|
| **pipeline** | HTML → styled DOM → layout → display list → render |
|
|
| **event_handler** | User input dispatch (keyboard, mouse) |
|
|
| **render_mode** | Offline rendering orchestration |
|
|
| **net_utils** | URL loading helpers |
|
|
| **hit_test** | Click target resolution from display list |
|
|
| **form** | Form input state and handling |
|
|
| **focus_outline** | Keyboard focus visualization |
|
|
|
|
## Display List Item Types
|
|
|
|
| Item | Purpose |
|
|
|---|---|
|
|
| `SolidRect` | Colored rectangle fill |
|
|
| `Border` | Border edge rendering (4 sides) |
|
|
| `Text` | Rendered text with font/color/position |
|
|
| `Image` | Raster image content |
|
|
| `BackgroundImage` | Background image with position/repeat/size |
|
|
| `LinearGradient` | CSS linear gradient fill |
|
|
| `BoxShadow` | Drop shadow and inset shadow |
|
|
| `PushClip` / `PopClip` | Clipping region stack |
|
|
|
|
## CSS Property Coverage
|
|
|
|
The style system handles properties across these categories:
|
|
|
|
| Category | Examples |
|
|
|---|---|
|
|
| **Box Model** | margin, padding, border, width, height, box-sizing |
|
|
| **Display/Flow** | display, position, float, clear, overflow |
|
|
| **Text** | font-family/size/weight/style, text-align, text-transform, line-height, white-space |
|
|
| **Color/Background** | color, background-color/image/position/repeat/size, opacity |
|
|
| **Flexbox** | flex-direction, justify-content, align-items, flex-grow/shrink/basis |
|
|
| **Table** | table-layout, border-collapse, border-spacing |
|
|
| **Visual** | visibility, z-index, box-shadow, border-radius |
|
|
| **CSS Variables** | Custom properties with var() substitution |
|
|
|
|
See `docs/CSS2.1_Implementation_Checklist.md` for detailed property-level status.
|
|
|
|
## JavaScript Feature Coverage
|
|
|
|
The JS engine supports:
|
|
|
|
| Category | Features |
|
|
|---|---|
|
|
| **Values** | undefined, null, boolean, number, string, object, array, function, symbol (partial) |
|
|
| **Operators** | Arithmetic, comparison, logical, bitwise, assignment, typeof, instanceof |
|
|
| **Control Flow** | if/else, for, while, do-while, switch, for-in, for-of, try/catch/finally |
|
|
| **Functions** | Declarations, expressions, arrow functions, closures, rest/spread, default params |
|
|
| **Objects** | Literals, methods, getters/setters, computed properties, destructuring |
|
|
| **Built-ins** | Math, JSON, Array methods, String methods, Object methods, Date, RegExp, Map, Set |
|
|
| **ES6+** | let/const, template literals, classes, promises, iterators, generators (partial) |
|
|
|
|
See `docs/js_feature_matrix.md` for detailed feature-level status.
|