You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit d7d2def
Browse filesBrowse the repository at this point in the historyBrowse files
|`gosub_ipc`| Transport between the engine and its child processes |
36
40
37
41
For the full crate listing see [`docs/crates.md`](docs/crates.md).
38
42
@@ -41,76 +45,92 @@ For the full crate listing see [`docs/crates.md`](docs/crates.md).
41
45
42
46
The engine is under active development. What works today:
43
47
44
-
-**Multi-zone / multi-tab model** — zones isolate cookies and storage; tabs are controlled via `TabCommand`
45
-
-**Async networking** — streaming HTTP fetcher with priority queues, inflight coalescing, redirect handling, and per-zone cookie isolation
46
-
-**Event-driven UA interface** — `TabCommand` flows in; `EngineEvent` (navigation, downloads, redraw, crashes) flows out on a control bus, with per-resource detail on a separate opt-in stream
47
-
-**HTML5 and CSS3 parsing** — spec-compliant parsers for both, including shadow DOM (parsing, flat-tree traversal, CSS scoping)
48
-
-**Resource pipeline** — parser-driven sub-resource discovery; stylesheets, images, web fonts and data URLs all fetched through one fetcher, with hierarchical cancellation
49
-
-**Layout and paint** — block, inline, flex and grid via Taffy, floats, absolute and fixed positioning, and CSS tables via `gosub_lattice`
50
-
-**Form controls** — text editing, and colour / date / time pickers opened by the embedder through `EngineEvent::PickerRequested`
-**Conformance measurement** — a gated web-platform-tests run in CI, plus a reftest runner; see [docs/wpt.md](docs/wpt.md) for where the numbers stand
53
-
54
-
**[`docs/status.md`](docs/status.md) is the detailed version of this list** — per component,
48
+
-**Multi-zone / multi-tab model** - zones isolate cookies and storage; tabs are controlled via `TabCommand`
49
+
-**Async networking** - streaming HTTP fetcher with priority queues, inflight coalescing, redirect handling, and per-zone cookie isolation; `gemini`, `gopher` and `finger` next to `http(s)`, `data` and `file`
50
+
-**Process isolation** - on Linux, networking, cookies, image decoding, file-backed `localStorage` and rendering (with Parley or cosmic-text fonts) run in sandboxed child processes, on by default once the embedder calls `child_process::dispatch_with::<C>()` first in `main`; see [docs/process-isolation.md](docs/process-isolation.md)
51
+
-**Web security policies** - CORS, mixed content, referrer policy, ORB, an SSRF policy over address spaces, and per-document security state
52
+
-**Encrypted storage** - every SQLite store (cookies, localStorage, places, config) opens with an optional SQLCipher key
53
+
-**Event-driven UA interface** - `TabCommand` flows in; `EngineEvent` (navigation, downloads, redraw, crashes) flows out on a control bus, with per-resource detail on a separate opt-in stream
54
+
-**HTML5 and CSS3 parsing** - spec-compliant parsers for both, including shadow DOM (parsing, flat-tree traversal, CSS scoping)
55
+
-**Resource pipeline** - parser-driven sub-resource discovery; stylesheets, images, web fonts and data URLs all fetched through one fetcher, with hierarchical cancellation
56
+
-**Layout and paint** - block, inline, flex and grid via Taffy, floats, absolute and fixed positioning, and CSS tables via `gosub_lattice`
57
+
-**Mobile** - `<meta name="viewport">` layout width and pinch zoom through a visual viewport; the engine runs on Android, in-process
58
+
-**Form controls** - text editing, and colour / date / time pickers opened by the embedder through `EngineEvent::PickerRequested`
See [`process-isolation.md`](process-isolation.md) for the process model these crates serve. Both are optional dependencies of `gosub_engine`.
88
+
89
+
### gosub_sandbox
90
+
91
+
OS-level privilege capping for the engine's child processes: syscall filters, namespaces, Landlock and child-process spawning, with backends for Linux, macOS and Windows. Elsewhere (Android included) its lockdowns exit any child rather than run it unconfined, and the engine keeps everything in-process.
92
+
93
+
### gosub_ipc
94
+
95
+
The transport between the broker and its children: byte channels, length-framed messages, file descriptor passing, and shared memory for rendered tiles and response bodies.
See [`javascript.md`](javascript.md) for how these crates stack together. Note: the whole scripting stack is currently **built but not wired** — no page script is executed yet.
0 commit comments