Repository navigation
Releases
mgbrowser v0.9.32 Experimental Preview
mgbrowser v0.9.32 Experimental Preview
End-to-end live Google Search compatibility (https://www.google.com/ -> search
query -> SearchGuard knitsail challenge & SG_SS cookie -> HTTP 200 SERP
with inline data:image/ maps/thumbnails -> click first organic result ->
destination), strict <noscript> suppression whenever scripts_enabled == true,
sloppy direct-eval dynamic-binding slot isolation in boa_engine 0.22.0,
WebIDL prototype/brand/event/image/window surface completion, 256 KiB
data:image/ attribute materialization, styled Display::Inline descendant
geometry & 2,000,000-step worker compute_boxes layout parity, and the
explicit boa-interactive-page-v1 desktop script profile. Exact-source
publication and public-install receipts are recorded in the dated work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies, Apache-2.0 license, and pure-Rust implementation backends (zero
C/C++ bindings or new crates).
Root-Cause Fixes & Live Google Search Parity (v0.9.32)
- Never Activate
<noscript>Whenscripts_enabled == true(crates/mg-chassis/src/lib.rs):- Removed the
v0.9.31fallback that projected<noscript>elements and
followed<noscript><meta http-equiv="refresh">to
/httpservice/retry/enablejs("Turn on JavaScript to keep searching") when
initial scripts hitRealmState::Fatal. Per HTML §4.12.2,<noscript>is
rendered strictly and exclusively when scripting is disabled
(--disable-scripts/scripts_enabled == false).
- Removed the
- Sloppy Direct-
evalDynamicvarSlot Isolation (vendor/boa_engine-0.22.0/):- Fixed an upstream
boa_engine 0.22.0bug where sloppy directeval("var x = ...")
inside a repeatedly invoked function mutated the sharedCodeBlock
compile-timeScopeso subsequent calls createdFunctionEnvironmentslots
treating earlierevalvardeclarations as undeleted static bindings and
mis-evaluatingtypeofinGetNameOrUndefined— causing SearchGuard's
knitsailVM to silently abort ~50% of cold sessions at ~143 admissions
withHTTP 429instead of completing ~222 admissions withHTTP 200.
- Fixed an upstream
- Complete WebIDL Prototype, Event, Image & Window Surface (
crates/mg-sparkle/src/js_browser/boa/):- Installed branded
Window,Navigator(PluginArray,MimeTypeArray),
HTMLIFrameElement(contentWindow,contentDocument),HTMLMediaElement/
HTMLVideoElement/HTMLAudioElement,HTMLImageElement(naturalWidth,
naturalHeight,complete,currentSrc,decode, legacy layout
reflections),Element/Nodenamespace/attribute/visibility methods, 42
auditedWindowproperties/methods ([Global]/[Replaceable]descriptors,
getSelection,requestIdleCallback), and fullMouseEvent/UIEvent
properties (screenX/screenY,x/y,offsetX/offsetY,
layerX/layerY,movementX/movementY,view,which,
getModifierState), while preventing modern handles (navigator,history,
mevent:*,subdoc:*,abortsignal:*,xhr:*) from leaking through
host.get.
- Installed branded
- Inline
data:image/(<= 256 KiB) & Worker Layout Geometry (crates/mg-sparkle/):- Raised
data:image/srcattribute and inline image materialization limits
to256 KiB(<= 8large> 4 KiBinline images,<= 1 MiBaggregate) so
Google SERP inline base64 maps and thumbnails (19inline images up to
77 KiB) render cleanly. - Updated
geometry_style::node_rect,collect_live_stylesheets,
ensure_layout_cached, andstyled_layout::compute_boxes(2,000,000
layout budget + descendant box unions forDisplay::Inlineanchors) so
getBoundingClientRect()and Playwrightlocator.click()hit-test organic
SERP links accurately.
- Raised
- Interactive Desktop Script Profile (
boa-interactive-page-v1):- Interactive desktop browsing (
mgbrowserdefault GUI launch or
--interactive-script-profile) usesResourceProfile::InteractivePageV1
(32Mopcodes,16 MiBcumulative source,64 MiBoutstanding /512 MiB
cumulative worker allocations,5 CPU s,768 MiBRLIMIT_AS,10 s
active time) with identical seccomp,RLIMIT_NOFILE = 3, and
RLIMIT_FSIZE = 0confinement, while preservingboa-page-process-v1
unchanged across all library defaults, worker selftests, WPT runners, and CI
gates.
- Interactive desktop browsing (
- Preserved WPT Coverage:
- Static WPT reftest coverage (
558 PASS / 391 FAIL / 62 UNSUPPORTEDof
1,011) and Window WPT coverage (16/16files,79/79final subtests)
remain intact with zero regressions, within the unchanged< 8 MiBrelease
archive limit.
- Static WPT reftest coverage (
mgbrowser v0.9.31 Experimental Preview
mgbrowser v0.9.31 Experimental Preview
W3C Beacon (navigator.sendBeacon), WebIDL host method-override and expando
assignment semantics across navigator/console/history/DOM wrappers,
Navigation Timing (performance.timing & performance.navigation), ECMA-262
Annex B string/date compatibility (String.prototype.substr,
trimLeft/trimRight, Date.prototype.toGMTString), same-origin
iframe.contentWindow intrinsic constructors, and <noscript> fallback
projection when initial page scripts hit cooperative EngineLimit with zero
rendered items — resolving all JavaScript console errors and blank-screen traps
on Google Search (https://www.google.com/ -> /search?... ->
/httpservice/retry/enablejs with 0 diagnostics). Exact-source publication
and public-install receipts are recorded in the dated work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies, Apache-2.0 license, and pure-Rust implementation backends (zero
new crate dependencies).
Beacon API, WebIDL Method Overrides & Navigation Timing (v0.9.31)
- W3C
navigator.sendBeacon(url, data?)(crates/mg-sparkle/src/js_browser/boa/web_apis.rs):- Brand-checks
Navigatorreceivers (TypeErroron unbound/alienthis),
resolvesurlagainst the document URL requiringhttp:orhttps:
schemes (TypeErroron invalid URLs orjavascript:/data:/about:
schemes), validates optionalUSVString,URLSearchParams, and
BufferSource(ArrayBuffer,TypedArray,DataView) payloads, enforces
the 64 KiB (65,536-byte) keepalive quota (falsewhen exceeded,true
within bounds), and exposes standard read-onlyNavigatorproperties
(cookieEnabled,onLine,webdriver,pdfViewerEnabled,vendor,
languages,maxTouchPoints,hardwareConcurrency).
- Brand-checks
- WebIDL Host Method Overrides & Expando Properties (
crates/mg-sparkle/src/js_browser/boa.rs):- Distinguishes read-only IDL data attributes (such as
navigator.userAgent,
navigator.webdriver,document.nodeType, andevent.type, which remain
non-writable in sloppy and strict mode) from regular WebIDL operations and
expandos acrossnavigator,console,history, and DOM/event wrappers
(preserving[LegacyUnforgeable]locationrestrictions anddefineProperty
wrapper invariants).
- Distinguishes read-only IDL data attributes (such as
- Navigation Timing, Annex B &
iframe.contentWindowIntrinsics (crates/mg-sparkle/src/js_browser/boa/):- Adds
performance.timing(navigationStart,fetchStart,responseStart,
domInteractive,domComplete,loadEventEnd, etc.) and
performance.navigation(type,redirectCount,TYPE_*constants). - Registers ECMA-262 Annex B
String.prototype.substr(UTF-16 code-unit
slicing with negative start andInfinity/NaNhandling),
String.prototype.trimLeft/trimRight, and
Date.prototype.toGMTString. - Populates same-origin
iframe.contentWindowwith standard realm
constructors (Object,Array,String,Number,RegExp,Promise,
Uint8Array,JSON, etc.) and platform globals (navigator,
performance,screen).
- Adds
Cooperative EngineLimit Empty-Projection <noscript> Fallback (v0.9.31)
- Blank-Screen Prevention on Challenge Pages (
crates/mg-chassis/src/lib.rs):- When an initial page script realm hits cooperative
RealmState::Fatal
(OPCODE_LIMIT = 1_000_000) before revealing any body items
(doc.items.is_empty()),mg-chassischecks whether the unscripted
document provides<noscript>fallback items or a<meta http-equiv="refresh">
target (refresh_count < 4) and adopts that fallback projection while
preservingInitialScriptOutcomediagnostics, worker accounting, and
ScriptWorkStatus::Blocked. - Note: Google's server-side SearchGuard (
SG_SS/ BotGuard) still redirects
non-Chrome clients away from live SERP results; the full Google search
destination goal remains incomplete and deferred as documented in
AGENTS.md.
- When an initial page script realm hits cooperative
Preserved Resource & Isolation Profile
- All
boa-page-process-v1limits remain unchanged (OPCODE_LIMIT = 1_000_000,
32 MiBoutstanding /64 MiBcumulative worker allocations,RLIMIT_NOFILE = 3,
RLIMIT_FSIZE = 0,RLIMIT_CPU = 1, seccomp confinement, and< 8 MiB
compressed release archive ceiling). - Static WPT reftest coverage (
558 PASS / 391 FAIL / 62 UNSUPPORTEDof
1,011) and Window WPT coverage (16/16files,79/79final subtests)
remain intact with zero regressions.
mgbrowser v0.9.30 Experimental Preview
mgbrowser v0.9.30 Experimental Preview
Responsive CSS Grid ([named-lines], fit-content(), repeat(auto-fill | auto-fit, ...)), generalized intrinsic box sizing (min-content, max-content,
fit-content), CSS box-shadow and text-shadow Gaussian blur rendering,
multi-stop (2..=16) linear/repeating-linear/radial/repeating-radial gradients,
CSS 2D transform (translate, scale, matrix), clip: rect(...) /
clip-path: inset(... round ...) and text-overflow: ellipsis, pure-Rust HTML5
<canvas> 2D immediate-mode rasterization and PNG export, browser-hosted ES
<script type="module"> execution, DOM Observers (MutationObserver,
ResizeObserver, IntersectionObserver) and CustomElementRegistry
(window.customElements), @font-face unicode-range subset filtering,
large-page (> 1 MiB) CDP utility-world automation (news.google.com), honest
Linux desktop User-Agent compatibility (www.npr.org), independent per-tab
page zoom (25%..=500%), persistent user-local localStorage, and tab session
snapshot & restore. Exact-source publication and public-install receipts are
recorded in the dated work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies, Apache-2.0 license, and pure-Rust implementation backends (zero
new crate dependencies).
CSS Visual Parity, Responsive Grid & Intrinsic Sizing (v0.9.30)
- Named Grid Lines,
fit-content()&repeat(auto-fill | auto-fit)(crates/mg-sparkle/):- Parses explicit
[line-name]line lists ongrid-template-columnsand
grid-template-rows, synthesizes implicit<area>-start/<area>-end
lines fromgrid-template-areas, resolvesgrid-column/grid-rownamed
lines andspan <name>placements, mapsfit-content(<length-percentage>)
tracks, and expandsrepeat(auto-fill | auto-fit, ...)track definitions
against container dimensions while collapsing emptyauto-fittracks to
0px(rendering MDN Web Docs--layout-no-sidebar-extendedin full styled
layout without readable-flow fallback).
- Parses explicit
- Generalized Intrinsic Sizing & HTML5
<canvas>Replaced Layout (crates/mg-sparkle/):- Supports
min-content,max-content, andfit-contentkeywords across
width,height,min-width,min-height,max-width,max-height, and
flex-basisacross block, inline, flex, and grid formatting contexts, plus
HTML5<canvas>300x150intrinsic fallback and HTMLwidth/height
attribute sizing.
- Supports
- Shadows, Multi-Stop Gradients, 2D Transforms, Clipping & Ellipsis (
crates/mg-sparkle/):box-shadow(0..=8reverse-painted layers) with analytical rounded-rect
signed-distance Gaussian blur, outer border-box cutout masking, andinset
padding-box clipping;text-shadow(0..=4layers) with blurred glyph
rasterization beneath text runs.- Multi-stop (
2..=16)linear-gradient,repeating-linear-gradient,
radial-gradient, andrepeating-radial-gradientbackgrounds with CSS
Images 3 stop fixup and color-transition midpoints. - CSS 2D
transform(translate,translateX,translateY,translate3d,
scale,scaleX,scaleY,matrix) withtransform-origin, stacking
context creation, andposition: fixedcontaining-block establishment. - Screen-reader
clip: rect(...)andclip-path: inset(... round ...)
zero-area visual hiding and rounded inset clipping, plus single-line
text-overflow: ellipsis(U+2026) truncation.
- Measured WPT Coverage:
- Static flexbox reftest lane advances from
541to 558 PASS / 391 FAIL /
62 UNSUPPORTED of 1,011 (+17genuine new passes overv0.9.29, zero
losses;expectations.jsonmanually ratcheted to protect all558passes
and949runnable cases). - Separate real-Browser Window lane retains 16 / 16 files and 79 / 79 final
subtests (100%).
- Static flexbox reftest lane advances from
HTML5 <canvas> 2D, ES Modules, DOM Observers & Web Components (v0.9.30)
- Pure-Rust HTML5
<canvas>2D Engine (crates/mg-sparkle/src/js_browser/boa/canvas.rs,crates/mg-chassis/):- Implements
HTMLCanvasElement.getContext('2d')(<= 2048x2048,<= 1,048,576
pixels, worker-memory-accounted premultiplied RGBA buffer):fillRect,
strokeRect,clearRect, subpaths (beginPath,moveTo,lineTo,
quadraticCurveTo,bezierCurveTo,arc,arcTo,ellipse,rect,
roundRect),Path2D, nonzero/evenodd scanlinefill& dashed/joined
stroke,clip, affineDOMMatrixstate stack,CanvasGradient&
CanvasPattern, shadow blur, Porter-DuffglobalCompositeOperation,
zero-FD embedded bitmapfillText/strokeText/measureText,
getImageData/putImageData/drawImage, pure-Rust LZ77+Huffman PNG
encoding (toDataURL/toBlob), and livedocument.resourcesprojection
into Sparkle's styled layout painter.
- Implements
- Browser-Hosted ES
<script type="module">, Observers & Custom Elements (crates/mg-sparkle/src/js_browser/boa/,crates/mg-chassis/):- Preloads bounded inline and external
<script type="module">graphs (<= 16
modules,<script type="importmap">specifier resolution, live namespace
bindings,import.meta.url, and parent-brokered same-origin dynamic
import(), withnomodulesuppression in browser sessions while keeping
standaloneBoaPageRealm::start/boa_workerassertions untouched). - Implements microtask-batched
MutationObserver(childList,attributes,
characterData,subtree), layout-syncedResizeObserverand
IntersectionObserver, andCustomElementRegistry(customElements.define,
get,whenDefined,upgrade,connectedCallback,disconnectedCallback,
attributeChangedCallback), plusElement.animate/getAnimationsand
window.visualViewport.
- Preloads bounded inline and external
Real-Site Compatibility, Large-Page CDP & Desktop Session UX (v0.9.30)
@font-faceunicode-rangeFiltering, Wikipedia Sprite/SVG/JS Compatibility & Large-Page CDP (crates/mg-sparkle/,crates/mg-chassis/):- Filters
@font-facerules against document text codepoints before fetching
font binaries so multi-subset stylesheets (such as MDN's Cyrillic/Greek/Latin
font sheets) download matching subsets instead of exhaustingMAX_FONTSon
unused scripts. - Updates
USER_AGENTto"Mozilla/5.0 (X11; Linux x86_64) mgbrowser/0.9.30",
resolving CDN crawler-signature TLS tar-pitting on sites such aswww.npr.org. - Adds
window.Image(new Image(width?, height?)), raises the browser-session
addEventListenercap to2,048memory-accounted listeners (while keeping
the standaloneBoaPageRealm::startcontract cap at32), supports bounded
external/inline SVG<style>blocks and acyclic internal<use href="#id">
sprite references, resolves intrinsicbackground-size: autoand
background-positionoffsets with element-box clipping for CSS sprites,
multipliescoloralpha (color: transparent) during text painting,
suppresses spurious gradient diagnostics for MediaWiki's transparent
linear-gradient(transparent, transparent), url(...)fallback idiom, and
replaces per-reply full-HTML string materialization with zero-allocation
serialized-byte validation (www.wikipedia.orgexecutes all page scripts
and renders its SVG wordmark sprite with0JS/CSS/SVG errors or warnings). - Synthesizes a bounded (
<= 128 KiB,<= 2,500nodes)<script>-free DOM
snapshot when opening an on-demand CDP automation session on oversize (> 1 MiB) HTML documents or after page-script budget exhaustion so Playwright
page.title()and utility-world queries succeed well within the 2-second
active wall budget on pages likeen.wikipedia.org,news.google.com, and
developer.mozilla.org.
- Filters
- Per-Tab Page Zoom, Persistent
localStorage& Session Restore (crates/mg-chassis/,src/):- Independent per-tab page content zoom (
25%..=500%,Alt+=/Alt+-/
Alt+0,Ctrl+MouseWheel, address-bar zoom badge, and Hamburger Menu zoom
row) separate from whole-browser UI scale. - Atomic
0o600(O_NOFOLLOW,flock,<= 512 KiB) user-local persistence
forwindow.localStorage(local-storage.json, cleared onCtrl+Shift+Delete)
and open-tab session snapshots (session.json, restorable via Menu ->
Restore session,chrome://newtab, or--restore-session).
- Independent per-tab page content zoom (
Remaining Limitations
- Modern-web compatibility remains bounded: cross-origin dynamic
import(),
WebGL/WebGPU, HTML5<video>/<audio>codecs, Service Workers, cross-origin
CORS preflights, CSS 3D transforms/keyframe animations, and full Chromium
multi-process site isolation are not implemented. - Resource budgets (
16stylesheets,32requests,2 MiBtotal resources,
1 MiBpage script source,2048px/1,048,576-pixel image/canvas cap) and
the seccomp-confined script worker (RLIMIT_NOFILE = 3,RLIMIT_FSIZE = 0,
not a whole-browser sandbox) remain unchanged. Do not use this preview for
banking, sensitive authenticated browsing, or arbitrary hostile websites.
mgbrowser v0.9.29 Experimental Preview
mgbrowser v0.9.29 Experimental Preview
Pinned unmodified Playwright 1.58.2 browser automation parity (connectOverCDP
over HTTP and WebSocket plus chromium.launch over --remote-debugging-pipe),
pure-Rust HTTP gzip/deflate/br decompression, responsive <picture> /
srcset and data:image/* decoding, credential-free cross-origin HTTPS
stylesheets and bounded CSS @import, CSS grid-template-areas / grid-area
2-column desktop layout, inline position: relative containing-block fallback,
flex-item BFC float isolation, viewBox-only and large-viewBox inline <svg>
sizing with Stylo style="..." and xmlns:xlink support, legacy vendor-prefixed
-moz-border-radius aliasing and Chromium-aligned DevTools Console css-parse
filtering, and real-site Boa DOM/JS compatibility (ECMAScript Annex B HTML-like
comments, DOM wrapper expandos, reflected HTML attributes, document.currentScript,
document.write, and blank/srcdoc <iframe> contentDocument/contentWindow).
Exact-source publication and public-install receipts are recorded in the dated
work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies, Apache-2.0 license, and pure-Rust implementation backends (zero
new crate dependencies).
Pinned Playwright 1.58.2 Automation & CDP Parity (v0.9.29)
- CDP Target Auto-Attachment, Isolated Utility Worlds & Pipe Transport (
src/cdp.rs,src/main.rs,crates/mg-sparkle/src/js_browser/):- Full
Target.setAutoAttach(flatten: true,waitForDebuggerOnStart),
Runtime.runIfWaitingForDebugger,Page.createIsolatedWorld/ utility-world
Runtime.evaluate&Runtime.callFunctionOn(awaitPromise,returnByValue,
element argument & return marshaling,executionContextCreated/Destroyed/
Clearedeven when page scripts are disabled with--disable-scripts),
Pagelifecycle events (frameAttached,frameNavigated,domContentEventFired,
loadEventFired,lifecycleEvent,javascriptDialogOpening),DOM/CSS
inspection,Networkrequest/response events (including stylesheet HTTP 404
reporting),Inputmouse/keyboard/insertText,Emulation.setDeviceMetricsOverride,
Browser.setDownloadBehavior(DownloadProgress/downloadWillBegin), and
Chromium FD3/4NUL-delimited--remote-debugging-pipe+--headless
virtual framebuffer mode. - Passes the unchanged
tools/playwright/acceptance.mjsprobe (playwright-core
1.58.2, both HTTP and WebSocketchromium.connectOverCDPpaths) and
tools/playwright/launch.test.mjs(chromium.launchwith locators,
screenshots, and downloads) while rejecting unknown CDP methods explicitly.
- Full
Real-Site CSS, SVG, HTTP & DOM Compatibility (v0.9.29)
- HTTP Decompression, Cross-Origin HTTPS Stylesheets & Bounded
@import(crates/mg-chassis/):- Pure-Rust
Accept-Encoding: gzip, deflate, brresponse decoding (flate2+
brotli-decompressor) with strict decoded-byte caps preventing zip/brotli
amplification; credential-free cross-origin HTTPS<link rel="stylesheet">
and@importloading (depth<= 4, cycle-checked, line/column-preserving)
within the unchanged16-sheet,32-request,2 MiBresource budget. - Responsive
<img srcset>/<picture><source>candidate selection and
boundeddata:image/{png,jpeg,gif,svg+xml}inline URI decoding.
- Pure-Rust
- Slashdot, Lobsters, Wikipedia & Rust-Lang Visual Layout Parity (
crates/mg-sparkle/):- Byte-length-preserving author CSS normalization for legacy
-moz-border-radius
(plus corner variants,-moz-box-sizing,-webkit-box-sizing,-moz-opacity,
-moz-box-shadow) preserving 1-based line/column diagnostic locations, paired
with Chromium-aligned DevTools Console filtering of declarative CSS Syntax §5
css-parseignored declarations. - Stylo
style="..."computed cascade on<svg>and SVG descendants,xmlns:xlink
/xmlns:svg/xml:space/xml:langattributes, inert<defs>/<symbol>
/<metadata>, proportionalsvg_target_sizescaling for large-coordinate
viewBoxicons withinMAX_SIDE = 2048/MAX_PIXELS = 1,048,576, and
containing-width sizing forviewBox-only inline<svg>elements lacking
width/heightattributes. - CSS Grid
grid-template-areasexplicit track sizing andgrid-areanamed
placement resolution (rendering Wikipedia's Vector 2022 2-column desktop
layout at>= 1120px), CSS 2.1 §10.1 inlineposition: relativecontaining-block
fragment union fallback, and isolated float state acrossTaffyflex/grid item
measurement and BFC painting (fixingclear: bothstory lists inside flex
containers onlobste.rs).
- Byte-length-preserving author CSS normalization for legacy
- Real-Site Boa JS & DOM Compatibility (
crates/mg-sparkle/src/js_browser/boa/):- Byte-length-preserving ECMAScript Annex B.1.1
<!--/-->comment
normalization, DOM wrapper JS expando property storage with worker memory
accounting and strict/sloppy read-only IDL semantics, reflected HTML element
properties,<script>/<style>text serialization,document.currentScript,
boundeddocument.write/writeln/open/close, andsubdoc:-backed
same-origin blank/srcdoc<iframe>contentDocumentandcontentWindow.
- Byte-length-preserving ECMAScript Annex B.1.1
- Measured WPT Coverage:
- Static flexbox reftest lane advances from
532to 541 PASS / 408 FAIL /
62 UNSUPPORTED of 1,011 (+9new passes overv0.9.28across SVG flex
items,data:image/*flex-basis content sizing, and dynamic inline-size
float/BFC measurement, zero losses;expectations.jsonratcheted to protect
all541passes). - Separate real-Browser Window lane retains 16 / 16 files and 79 / 79 final
subtests (100%).
- Static flexbox reftest lane advances from
mgbrowser v0.9.28 Experimental Preview
mgbrowser v0.9.28 Experimental Preview
Interactive HTML forms and standalone controls, arbitrary element click/focus
activation, Stylo CSS3 DOM selectors (querySelector / querySelectorAll /
matches / closest), modern DOM mutation and Event APIs (DocumentFragment,
DOMParser, outerHTML, insertAdjacentHTML, { capture, once, passive, signal }, CustomEvent), Web Platform globals (URL, URLSearchParams,
TextEncoder/TextDecoder, atob/btoa, ChaCha20 CSPRNG
crypto.getRandomValues/randomUUID, performance.now, setInterval,
requestAnimationFrame, queueMicrotask, structuredClone, matchMedia),
live layout/style queries (getComputedStyle, getBoundingClientRect,
scrollTo), localStorage/sessionStorage, document.cookie (HttpOnly
isolated), history.pushState/replaceState/popstate, and parent-brokered
same-origin fetch() / XMLHttpRequest over the seccomp-confined VERSION = 9
page worker session. Exact-source publication and public-install receipts are
recorded in the dated work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies, Apache-2.0 license, and pure-Rust implementation backends (zero
new crate dependencies).
HTML Forms, Interactive Controls & Modern Web Platform APIs (v0.9.28)
- HTML Forms, Standalone Controls & Arbitrary Element Clicks (
mg-sparkle,mg-chassis):- Projects standalone controls outside
<form>alongside form-associated
controls (checkbox, radio groups,<select>/<option>/<optgroup>with
native dropdown popup overlay,<button type="button"|"reset"|"submit">,
<textarea>,<label>for+ descendant forwarding,<details>/<summary>,
<dialog>show/showModal/close/returnValue,form.elements/submit/
reset/requestSubmit, and<div onclick>arbitrary element activation).
- Projects standalone controls outside
- Modern DOM & CSS3 Selector APIs (
crates/mg-sparkle/src/js_browser/boa/):- Stylo CSS3
querySelector,querySelectorAll,matches,closest,
CSS.supports, andCSS.escape;DocumentFragment,DOMParser,
<template>.content,cloneNode,insertBefore/replaceChild/remove/
before/after/replaceWith/prepend/append/replaceChildren,
outerHTML, andinsertAdjacentHTML/Element/Text;{ capture, once, passive, signal }listener options,AbortController/AbortSignal,
Event/CustomEvent/MouseEvent/KeyboardEvent/FocusEvent/
PopStateEvent/HashChangeEvent,dispatchEvent,click()/focus()/blur(),
anddocument.activeElement.
- Stylo CSS3
- Web Globals, Live Layout/Style Queries, Storage, History &
fetch/XHR:URL,URLSearchParams,TextEncoder/TextDecoder,atob/btoa,
parent-seeded ChaCha20crypto.getRandomValues&crypto.randomUUID,
performance.now/User Timing,setInterval,requestAnimationFrame,
queueMicrotask, cyclicstructuredClone, and Stylowindow.matchMedia.- Live
window.getComputedStyle, pixel-freecompute_boxes-backed
getBoundingClientRect/getClientRects/offset*/client*/scroll*,
andscrollTo/scrollBy/scrollIntoView. - Per-origin
localStorageand per-tabsessionStorage,HttpOnly-isolated
document.cookie, same-documenthistory.pushState/replaceState/back/
forward/go(popstate+hashchange), and parent-brokered same-origin
Headers/Request/Response/fetch()andXMLHttpRequestover the
seccomp-confinedVERSION = 9worker protocol (zero worker network or
filesystem syscalls).
- Measured WPT Coverage:
- Static flexbox reftest lane advances to 532 PASS / 417 FAIL / 62
UNSUPPORTED of 1,011 (+4new scripted/form flexbox passes overv0.9.27,
zero losses;expectations.jsonratcheted to protect all532passes). - Separate real-Browser Window lane retains 16 / 16 files and 79 / 79 final
subtests (100%).
- Static flexbox reftest lane advances to 532 PASS / 417 FAIL / 62
mgbrowser v0.9.27 Experimental Preview
mgbrowser v0.9.27 Experimental Preview
CSS layout fidelity, anti-aliased border-radius rendering and rounded clipping,
full CSS 2.1 Appendix E stacking contexts and z-index paint order, position: absolute hypothetical static positioning across block/inline/flex/grid and
position: sticky clamping, direction: rtl, CSS Sizing 4 aspect-ratio,
linear calc(% + px) in flex/grid, CSS 2.1 float/clear and BFC float
avoidance, overflow: auto | scroll and table-cell clipping, general
::before/::after pseudo-elements, visibility: collapse, and CSSOM
container-query length units. Honest upstream WPT coverage advances from 339
to 528 PASS / 421 FAIL / 62 UNSUPPORTED of 1,011 (+189 net new passes,
zero losses) on the static reftest lane and from 15/16 (77/79) to 16/16
files and 79/79 final subtests (100%) on the Window parsing lane.
Exact-source publication and public-install receipts are recorded in the dated
work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies, Apache-2.0 license, and pure-Rust implementation backends (zero
new crate dependencies).
CSS Layout Fidelity & WPT Coverage (v0.9.27)
- Rounded Corners & Clipping (
crates/mg-sparkle/src/paint.rs,styled_layout.rs):- Implements CSS Backgrounds 3 §4.5 elliptical corner resolution, overlap
scale factorf, inner padding/content radii, 4×4 supersampled boundary
anti-aliasing without outer background bleed, diagonal per-side corner
borders, and stackable roundedCanvasClipmasking across fills, text,
gradients, images, andoverflow != visible, while preserving an exact
zero-overhead fast path when all outer radii are zero.
- Implements CSS Backgrounds 3 §4.5 elliptical corner resolution, overlap
- Stacking Contexts & CSS 2.1 Appendix E Painting Order (
crates/mg-sparkle/src/styled_layout/stacking.rs):- Establishes stacking contexts for
opacity < 1.0,position: fixed | sticky,
and numericz-indexon positioned boxes and flex/grid items, ordering own
backgrounds/borders, negativez-indexchild contexts, in-flow blocks,
floats, inline/atomic-inline andorder-sorted flex/grid items, DOM-ordered
z-index: autopositioned pseudo-contexts interleaved withz-index: 0
contexts, and positivez-indexchild contexts with clip-safe paint and hit
reordering.
- Establishes stacking contexts for
- Positioned & Sticky Layout (
crates/mg-sparkle/src/styled_layout/positioned.rs,formatting.rs):- Computes hypothetical static positions for
position: absolute | fixedwith
autoinsets across block, inline, flex, and grid formatting contexts (LTR
and RTL), plusposition: stickyclamping within scrollports and containing
block content boxes.
- Computes hypothetical static positions for
- RTL,
aspect-ratio, Flex/Gridcalc(), Floats, Overflow, Pseudo-Elements & Collapse:direction: rtlacross block horizontal margins, bidi inline runs, table
columns, and Taffy flex/grid axes; CSS Sizing 4aspect-ratiotransfer and
automatic minimum sizing; linearcalc(% + px)in flex/grid; CSS 2.1 §9.5
float/clearand BFC float avoidance;overflow: auto | scrolland
table-cellpadding-box clipping; general::beforeand::after
pseudo-element cascade and layout materialization; andvisibility: collapse
flex struts and table tracks.
- CSSOM Container-Query Units & Upstream WPT Scores (
crates/mg-sparkle/src/style/declarations.rs):- Supports
cqw,cqh,cqi,cqb,cqmin, andcqmaxin CSSOM
CSSStyleDeclarationparsing and serialization without C++ bindings,
bringing the pinned WPT Window parsing lane to 16/16 passing files and
79/79 passing final subtests, while lifting the pinned WPT static flexbox
reftest lane to 528 PASS / 421 FAIL / 62 UNSUPPORTED of 1,011 (+189
new passes,0regressions).
- Supports
mgbrowser v0.9.26 Experimental Preview
mgbrowser v0.9.26 Experimental Preview
Desktop browser UX parity with Chromium: Omnibox search & live autocomplete
dropdown, chrome:// internal pages (newtab, history, bookmarks,
downloads, settings, version), Find in Page (Ctrl+F / F3 /
Shift+F3), persistent user-local Browsing History (Ctrl+H) & Clear Browsing
Data (Ctrl+Shift+Delete), pure-Rust File Downloads (Content-Disposition: attachment, <a download>, Save link as..., Ctrl+S Save Page, Ctrl+J),
toggleable Bookmarks Bar (Ctrl+Shift+B), Hard Reload (Ctrl+Shift+R), Stop
Loading (Escape / toolbar ×), Ctrl+U View Page Source, Ctrl+Shift+T
Reopen Closed Tab, Ctrl+N New Window, Ctrl+Shift+W Close Window,
Ctrl+1..9 tab switching, middle-click background link opening & tab closing,
tab-strip right-click context menu, mouse buttons 8/9 Back/Forward, and F11
EWMH fullscreen. Exact-source publication and public-install receipts are
recorded in the dated work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies and pure-Rust implementation backends (zero new crate dependencies).
Desktop Browser UX & Chrome Parity (v0.9.26)
- Omnibox Search, URL Normalization & Live Autocomplete (
crates/mg-chassis/src/omnibox.rs):- Smart input classification distinguishes explicit
http(s)://and
chrome:///about:schemes,localhost/ IPv4 / dotted hostnames
(defaulting bare domains tohttps://and loopback tohttp://), and
free-text search queries routed to the user's configured Search Engine
(DuckDuckGo,Google, orWikipedia, persisted insettings.json). - Live Omnibox autocomplete dropdown (
Up/Down/Enter/ pointer click,
up to 6 suggestions) surfaces direct URL/Search actions, matching
chrome://internal pages, saved Bookmarks (★), and visited Browsing
History (⏱).
- Smart input classification distinguishes explicit
chrome://Internal Pages:- Built-in styled HTML pages rendered natively through
mg-sparklewith safe
internal-onlychrome://link navigation:chrome://newtab(search hero,
pinned bookmarks, recent history),chrome://history,chrome://bookmarks,
chrome://downloads,chrome://settings, andchrome://version(plus
about:blank).
- Built-in styled HTML pages rendered natively through
- Find in Page (
crates/mg-chassis/src/find.rs):Ctrl+Fopens the floating Find bar with live case-insensitive substring
matching across positionedFrame::text_runs, liveN/Mmatch counter,
translucent yellow (#ffe066) inactive and orange (#ff922b) active match
highlights, automatic viewport scroll-into-view,F3/Enter/▼next
match,Shift+F3/Shift+Enter/▲previous match, full clipboard
support (Focus::FindInput), andEscape/×dismissal.
- Persistent Browsing History & Clear Browsing Data (
crates/mg-chassis/src/history.rs,src/history.rs):- User-local
$XDG_CONFIG_HOME/mgbrowser/history.json(O_NOFOLLOW,0o600,
advisoryflock.history.lock,2 MiBread cap,512deduplicated
entries sorted newest-first with visit counts and timestamps). Ctrl+HandMenu > Historyopen the paginated History modal with click
navigation and per-itemRemove;Ctrl+Shift+Deleteclears browsing
history, session cookies, HTTP/render caches, and the download list.
- User-local
- Pure-Rust File Downloads & Save Page (
crates/mg-chassis/src/downloads.rs,src/downloads.rs):- RFC 6266 / RFC 8187
Content-Disposition: attachmentand binary MIME
detection (application/pdf,application/zip,application/gzip, etc.),
<a download="...">link activation, context-menuSave link as..., and
Ctrl+S/ context-menuSave page as...stream downloads without navigated
page loss. - Safe host persistence into
MGBROWSER_DOWNLOAD_DIR/XDG_DOWNLOAD_DIR/
~/Downloadsusing sanitized filenames,O_NOFOLLOW,create_new(true),
0o600mode, and automatic(1),(2)collision numbering (8 MiBper
download cap), inspected viaCtrl+J/Menu > Downloads/
chrome://downloads.
- RFC 6266 / RFC 8187
- Bookmarks Bar, Toolbar Reload/Stop & Page Source:
- Toggleable Bookmarks Bar (
Ctrl+Shift+BorMenu > Settings > Bar) renders
one-click saved bookmark pills directly beneath the main toolbar. - Active page loads turn the toolbar reload button into Stop (
×, orEscape
to cancel in-flight navigation);Ctrl+Shift+R/Shift+F5performs a
cache-bypassing Hard Reload (Cache-Control: no-cache,Pragma: no-cache). Ctrl+Uand context-menuView page sourceopen the raw HTML document in
DevToolsSources.
- Toggleable Bookmarks Bar (
- Tabs, Windows, Pointer & Fullscreen Shortcuts (
src/desktop.rs,src/workspace.rs):Ctrl+Shift+Treopens closed tabs from a 32-entry LIFO stack;Ctrl+N
opens a new native browser window;Ctrl+Shift+Wcloses the current window;
Ctrl+1..8selects tabs 1–8 andCtrl+9jumps to the last tab.- Middle-clicking (
Button 2) a page link opens it in a background tab
without stealing focus; middle-clicking a tab in the tab strip closes it;
right-clicking a tab opens a native Tab Context Menu (New tab,
Duplicate tab,Reload,Close tab,Close other tabs,
Reopen closed tab); X11 mouse buttons8and9navigate Back and
Forward;F11toggles EWMH_NET_WM_STATE_FULLSCREEN.
mgbrowser v0.9.25 Experimental Preview
mgbrowser v0.9.25 Experimental Preview
App-wide pure-Rust X11 clipboard (CLIPBOARD and PRIMARY), mouse drag/double-click
text selection, and Cut / Copy / Paste / Select All across the DevTools Console,
all six DevTools panels and search/style inputs, the Address bar, HTML <input>
form controls (with <input type="password"> plaintext protection), and read-only
web page content. Exact-source publication and public-install receipts are
recorded in the dated work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies and pure-Rust implementation backends (zero new crate dependencies).
Native X11 Clipboard & App-Wide Text Selection
mg-browser, mg-chassis, and mg-sparkle implement pure-Rust ICCCM X11
selection ownership and retrieval (x11rb) paired with interactive text
selection, editing, and context-menu clipboard actions across every browser
surface:
- Pure-Rust X11
CLIPBOARD&PRIMARYHost (src/platform/clipboard.rs):
uses a dedicated unmapped1x1child window of the root screen (EventMask::PROPERTY_CHANGE)
so selection ownership survives closing detached browser windows without any C
toolkit or external helper utility (xclip/xsel). ServesTARGETS,
TIMESTAMP,UTF8_STRING,text/plain;charset=utf-8,text/plain,TEXT,
andSTRING(SelectionRequest/SelectionClear), and retrieves inbound
CLIPBOARD(Ctrl+V/Shift+Insert/ context-menuPaste) andPRIMARY
(middle-clickButton 2) selections withUTF8_STRING->STRINGfallback,
boundedINCRtransfers (256 KiB), and0 mslocal short-circuit when
mgbrowserowns the active selection. - DevTools Console & Panels (
crates/mg-chassis/src/devtools.rs):- Console Logs & Uncaught JS Errors: click or click-and-drag across Console
rows (Ctrl+Aselects all visible rows), then pressCtrl+C, click the
subtoolbarCopybutton, or right-click (Copy message,Copy all visible,
Select all,Clear console) to copy full untruncated error messages, stack
frames, and expanded object property trees. Console Command Line API
copy(...)also syncs directly to the X11 systemCLIPBOARD. - Console
>REPL & DevTools Filter/Style Inputs: click/drag/double-click
selection,Shift+ arrow/word (Ctrl+Left/Right) range extension,
Ctrl+A,Ctrl+X/Shift+Delete(Cut),Ctrl+C/Ctrl+Insert(Copy),
Ctrl+V/Shift+Insert(Paste), middle-clickPRIMARYpaste, and
right-clickCut/Copy/Paste/Select all. - Elements, Sources, Network, Performance, Application & About:
Ctrl+C
and right-click context menus copyouterHTML, unique CSS selectors, or
computed style summaries inElements; selected code lines or full source in
Sources; request URL, full request/response details, or all captured URLs
inNetwork; structured telemetry reports inPerformanceandApplication;
and build/revision identity on theAboutdialog.
- Console Logs & Uncaught JS Errors: click or click-and-drag across Console
- Address Bar (
Focus::Address): click-to-select-all on initial focus from a
page, second-click caret placement, click-and-drag substring selection (updating
PRIMARY) with2 pxcaret and highlight rendering, double-click select-all,
word navigation,Ctrl+A/Ctrl+X/Ctrl+C/Ctrl+V, middle-click
PRIMARYpaste, and right-clickCut/Copy/Paste/Paste and go/
Select all. - HTML
<input>Form Controls & Password Protection (Focus::Input):
positioned caret + partial selection highlight rendering inmg-sparkle,
click/drag/double-click word selection,Ctrl+A/Ctrl+X/Ctrl+C/
Ctrl+V(updatingedit_versionsfor isolated script-worker form snapshots),
middle-clickPRIMARYpaste, and strict<input type="password">protection
that blocksCut,Copy, andPRIMARYdrag export of masked password
characters while permittingPaste. - Web Page Prose Selection (
Focus::Page):Frame::text_runsrecords
positioned glyph runs (MAX_TEXT_RUNS = 25,000) for click-and-drag text
selection with translucent highlight rendering, double-click word selection,
Ctrl+Aselect-all,Ctrl+Ccopy in reading order,PRIMARYexport on drag
or double-click, and right-clickCopy(when a selection is active) plus
Copy link addresson links. Cut and Paste remain disabled on read-only page
prose.
Validation status
Workspace debug and release unit/integration tests (including new app-wide
clipboard/selection unit tests and live two-client X11 CLIPBOARD/PRIMARY
roundtrip tests under Xvfb), component boundary and no-chrome embedding checks,
packaged native X11 smoke gates, all 8 frozen JSPLAN gates, and both complete
reviewed WPT lanes pass.
Install and known limitations
curl -fsSL https://mgbrowser.org/install.sh | bashThe installer follows the latest published release and verifies SHA-256 before
installing without sudo. Checksums are not independent signatures. Existing
processes must restart to use an installed update.
Modern-web compatibility is poor. The Google search to first result journey is
not working. Real Reddit loading and full interactive Google News features
remain unfinished goals. Ordinary Playwright is unsupported: autoattachment,
debugger waiting/resume, downloads, utility worlds, promise awaiting and stock
locator message-size policy remain open. Clipboard transfers support plain UTF-8
and Latin-1 text up to 256 KiB on X11/XWayland; rich HTML/image clipboard MIME
types, JavaScript navigator.clipboard / ClipboardEvent DOM APIs, <textarea>
or contenteditable editing, breakpoint stepping, heap snapshots, and persistent
Web Storage remain outside this bounded increment. This release does not complete
F-011/F-016/F-024/F-025/F-026/F-027 or formal MVP.
mgbrowser v0.9.24 Experimental Preview
mgbrowser v0.9.24 Experimental Preview
Full 6-panel Chromium-style DevTools workspace (Elements, Console, Sources,
Network, Performance, Application) with Right/Bottom docking, draggable
splitter resize, interactive Element Picker (↖ / Ctrl+Shift+C) with 4-layer
Stylo box-model overlays, live element.style DOM/CSS editing, isolated Boa
worker JS Console REPL + Command Line API, and 4-tab Network request inspection.
Exact-source publication and public-install receipts are recorded in the dated
work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies and pure-Rust implementation backends.
Six-Panel Chromium-Style DevTools Workspace
mg-chassis, mg-sparkle and mg-browser expand the built-in DevTools panel
(F12 / Ctrl+Shift+I / right-click Inspect) across six panels with
Right/Bottom docking (⬓ / ◨), a draggable 4 px splitter, and compact-overlay
fallback on narrow viewports:
- Interactive Element Picker (
↖/Ctrl+Shift+C) & 4-Layer Box Model
Overlay: hovering the page highlights any DOM element with concentric Stylo
Margin (orange), Border (yellow), Padding (green), and Content (blue) layers
plus a floatingtag#id.class W×Htooltip; clicking selects the element as
$0inElementswithout activating page links or forms. Elements(Styles|Computed|Box Model): collapsible▸/▾DOM
tree with== $0badge, CSS selector & text search (Ctrl+F),Hvisibility
toggle,Deletenode removal, live editableelement.style { ... }inline
declarations with instant Stylo restyle/reflow and color swatches, real Stylo
ComputedStyleproperties, and a concentric 4-layer Box Model diagram.Console(Ctrl+Shift+J): 19-method WHATWG/Chromiumconsole.*API
(log,info,warn,error,debug,dir,dirxml,table,trace,
assert,clear,count,countReset,group,groupCollapsed,
groupEnd,time,timeLog,timeEnd) with%s/%d/%i/%f/%o/%O/%j/%c/%%
formatting inside the isolated Boa worker without invoking user JS getters or
Proxytraps; interactive>JS REPL with Command Line API ($_,$0..$4,
$(),$$(),keys(),values(),dir(),dirxml(),table(),clear(),
copy(),inspect()), on-demand isolated worker startup on static/oversize
pages, inline▶/▼object & DOM property tree expansion,[Inspect]
jump-to-Elements badges,Tabghost autocomplete, 64-entryUp/Down
history,Shift+Entermultiline input,-termnegative text filtering,
severity pills, andPreserve log.Sources: navigator for[HTML]document source,[CSS]inline and
same-origin stylesheets, and[JS]inline and external scripts with
line-numbered syntax-colored viewing andCtrl+Fline search.Network(Ctrl+Shift+E):All/Doc/CSS/JS/Font/Imgfilters,
URL substring filter,Preserve log,Disable cache, Waterfall timeline with
DOMContentLoaded(blue) andLoad(red) vertical markers, and a 4-tab
Request Inspector drawer (Headers|Response|Preview|Timing) that
redacts sensitivecookie,set-cookie, andauthorizationheader values.Performance(Ctrl+Shift+P):● Reload & Profile, Load Phase Flame Bar,
64-frame render-duration sparkline with16.7 ms(60 FPS) budget line, Boa
worker opcode/allocation metrics, and frame/style/shaping cache hit telemetry.Application: live sessionCookiestable (with redacted byte lengths and
Clear Cookies),Securityorigin/TLS/worker-sandbox summary, andResources
inventory.
Validation status
Workspace debug and release unit/integration tests (including legacy-test-engine
and protocol v8 worker session selftests), component boundary and no-chrome
embedding checks, packaged native X11 inspector-smoke across light/dark and
100%/200% scale, all 13 native/CDP smoke helpers, all 8 frozen JSPLAN gates, and
both complete reviewed WPT lanes pass.
Install and known limitations
curl -fsSL https://mgbrowser.org/install.sh | bashThe installer follows the latest published release and verifies SHA-256 before
installing without sudo. Checksums are not independent signatures. Existing
processes must restart to use an installed update.
Modern-web compatibility is poor. The Google search to first result journey is
not working. Real Reddit loading and full interactive Google News features
remain unfinished goals. Ordinary Playwright is unsupported: autoattachment,
debugger waiting/resume, downloads, utility worlds, promise awaiting and stock
locator message-size policy remain open. JavaScript breakpoint stepping, heap
snapshots, flamechart CPU sampling, and persistent Web Storage (localStorage /
IndexedDB) remain outside this bounded DevTools increment.
Boa JavaScript is enabled by default (--disable-scripts opts out); documents
exceeding the 1 MiB source or 2 MiB wire admission cap skip page-load script
execution and spawn a bounded on-demand worker only when interactive Console
evaluation is explicitly requested. Full CSS/CSSOM, intrinsic sizing, baselines,
bidi and floats remain incomplete. This increment does not complete F-011/F-016/
F-024/F-025/F-026/F-027 or formal MVP.
Linux X11/XWayland is the supported GUI target. The restricted JavaScript worker
is not a sandbox for the browser as a whole. Do not use this preview for banking,
sensitive authenticated browsing or arbitrary hostile websites. Project code,
documentation and original artwork use Apache-2.0. Dependencies retain their
licenses in packaged THIRD_PARTY_LICENSES.txt. Old tags/assets stay immutable.
mgbrowser v0.9.23 Experimental Preview
mgbrowser v0.9.23 Experimental Preview
Google News default-mode browsing and pure-Rust WOFF1/WOFF2 @font-face web
fonts: clean oversize-document script skipping, working scroll and link
activation, styled Full coverage (/stories/...) layout, and WOFF1/WOFF2
SFNT reconstruction with synthetic bold/oblique styling for downloaded faces.
Exact-source publication and public-install receipts are recorded in the dated
work log.
Linux x86_64 / X11 or XWayland, glibc 2.35 or newer. Rust 1.91.1, locked
dependencies and pure-Rust implementation backends (brotli-decompressor = 5.0.3
with default-features = false, #![forbid(unsafe_code)]).
Clean Google News default-mode loading, scrolling, and link navigation
mg-chassis and mg-sparkle resolve default-mode (--enable-scripts) script
errors and link-activation blocking on news.google.com and extend styled
layout to Full coverage (/stories/...) destinations without widening any
worker, memory, or layout budget:
- Before preparing external scripts or spawning an isolated script worker,
resources::script_document_admissiblechecks whether a page's raw HTML, URL,
and encoded initial request fit within the existing 1 MiB source, 16 KiB URL,
and 2 MiB JSON wire caps. Ordinary browsing documents above those caps (such
as Google News's 1.86..4.40 MB/home,/topics/...,/stories/..., and
/showcaseSSR payloads) skip worker startup cleanly (JavaScript skipped),
parse once with<noscript>preserved, emit zeroSCRIPT_*or DevTools JS
rejection errors, and leavescript_blocked = falseso scrolling and link
clicks (Top stories ›, category tabs,Full coverage, Ctrl+click new tab,
and Back/Forward) work normally. - Admitted
< 1 MiBscripted pages that actually start a script realm and fail
or close still enforceclosed_script_realm_never_falls_through_to_native_activation,
and trustedWindowHarnessruns retain full worker observation. - Outer-box
Length::Calcsupports boundedmin(...)andmax(...)
comparisons between a pixel bound and a linear<length-percentage>term
(CalcOp::{Linear, MinPx, MaxPx}, keepingsize_of::<Length>() == 16), and
CSS grid placement preflight charges linearO(cells * count + count^2)work
withinMAX_GRID_WORK = 1_000_000, allowing 51-item 12-columnFull coverage
(/stories/...) pages and Material 3max(48px, 100%)touch-target overlays
to render in full centered styled layout without fallback. - See the Google News contract.
Pure-Rust WOFF1 and WOFF2 @font-face web fonts
mg-sparkle and mg-chassis load and render same-origin .woff2 and .woff
@font-face stylesheets (such as M Plus 1M / mplus-1m on badge.nyx.ms and
sl.ush.fund) alongside .ttf and .otf:
@font-facesrc:scanning inspects allurl(...)candidates in declaration
order and admits.woff2,.woff,.ttf, and.otfURLs andfont/woff2/
font/woffMIME types within the unchanged same-origin resource ledger.mg-sparkle::woffreconstructs uncompressed OpenType/TrueType SFNT tables
fromwOFF(zlib viaflate2rust_backend) andwOF2(RFC 7932 Brotli via
brotli-decompressor = 5.0.3,default-features = false,
#![forbid(unsafe_code)], including W3C WOFF2 transformedglyf/locaand
hmtxreconstruction) within bounded 8 MiB scratch and 4 MiB SFNT caps.- Downloaded
@font-facefamilies without separate bold/italic faces synthesize
horizontal stem emboldening (font-weight >= 600) and subpixel-interpolated
oblique shear (font-style: italic | obliqueand HTML<i>/<em>UA rules)
without altering system-font glyph metrics or WPT baselines.
Validation status
Workspace debug and release unit/integration tests (including legacy-test-engine),
component boundary and no-chrome embedding checks, Hacker News 1024/1280 PNG
byte-identity, and live default-flags mgbrowser Xvfb/CDP/X11 scrolling and
link navigation across Google News Homepage, Top stories ›, Full coverage,
and Back pass with zero script errors. All 8 frozen JSPLAN gates retain all 364
research outcomes. Both complete reviewed WPT lanes are refreshed for this
commit.
Install and known limitations
curl -fsSL https://mgbrowser.org/install.sh | bashThe installer follows the latest published release and verifies SHA-256 before
installing without sudo. Checksums are not independent signatures. Existing
processes must restart to use an installed update.
Modern-web compatibility is poor. The Google search to first result journey is
not working. Real Reddit loading and full interactive Google News features
remain unfinished goals. Ordinary Playwright is unsupported: autoattachment,
debugger waiting/resume, downloads, utility worlds, promise awaiting and stock
locator message-size policy remain open.
Boa JavaScript is enabled by default (--disable-scripts opts out); documents
exceeding the 1 MiB source or 2 MiB wire admission cap skip script execution and
render statically. The DOM, classic external scripts and browser event loop
remain incomplete. Modules, dynamic scripts, fetch/XHR and general asynchronous
resources are not supported. Full CSS/CSSOM, intrinsic sizing, baselines, bidi
and floats remain incomplete. Fonts/images/tabs/resources are bounded subsets;
cookies are memory-only. This increment does not complete F-011/F-016/F-024/
F-025/F-026/F-027 or formal MVP.
Linux X11/XWayland is the supported GUI target. The restricted JavaScript worker
is not a sandbox for the browser as a whole. Do not use this preview for banking,
sensitive authenticated browsing or arbitrary hostile websites. Existing
limits are not whole-browser quotas or GC/RSS measurements. No worker authority
or resource profile is widened for this increment; brotli-decompressor 5.0.3
(default-features = false) is reviewed in docs/DEPENDENCIES.md.
Project code, documentation and original artwork use Apache-2.0. Dependencies
retain their licenses in packaged THIRD_PARTY_LICENSES.txt. Old tags/assets stay
immutable.