v0.9.33 Experimental Preview · Source preview
mgbrowser
A browser written from the ground up in Rust.
Linux x86_64 · X11 / XWayland · glibc 2.35+ · No Rust toolchain needed
curl -fsSL https://mgbrowser.org/install.sh | bashModern-web compatibility is poor. This is a technology preview, not a daily browser. Do not use it for banking, sensitive authenticated browsing, or arbitrary hostile websites.
v0.9.33 source preview: Correct rounded rendering while scrolling and downloaded font base selection. Search/sign-in backgrounds and tiny metadata separators keep their intended height after scrolling, including fractional display scale. Italic-first font stylesheets no longer make ordinary text italic; inline nowrap navigation labels keep one line. Same-input Google News comparisons at 1280×800 and 1024×768 confirm compact headers; full real-site visual acceptance remains in progress. Scope and limits ↗
v0.9.31: Beacon API, WebIDL host method-override/expando semantics, Navigation Timing & Annex B compatibility. W3C navigator.sendBeacon(url, data?) (<= 64 KiB HTTP/HTTPS validation across strings, URLSearchParams, and BufferSource), WebIDL mutable operation overrides and expandos across navigator/console/history/DOM wrappers while preserving read-only IDL data attributes, performance.timing & performance.navigation, ECMA-262 Annex B String.prototype.substr/trimLeft/trimRight and Date.prototype.toGMTString, and same-origin iframe.contentWindow intrinsics. Scope and limits ↗
v0.9.30: Responsive CSS Grid, shadows/gradients/transforms, HTML5 Canvas 2D, ES modules, Wikipedia sprite/JS parity & desktop session UX. Named CSS Grid lines ([line-name]), fit-content(), and repeat(auto-fill | auto-fit, ...) (rendering MDN Web Docs in full styled layout), generalized min-content/max-content/fit-content box sizing, box-shadow & text-shadow Gaussian blur, multi-stop (2..=16) linear/repeating-linear/radial/repeating-radial gradients, 2D transform, clip/clip-path: inset(... round ...), color: transparent text alpha, CSS background-position/size sprite clipping, SVG <style> + internal <use href="#id">, and text-overflow: ellipsis — advancing honest WPT static reftests to 558 PASS / 391 FAIL / 62 UNSUPPORTED of 1,011 (+17 passes, 0 losses) with 16/16 files (79/79 subtests) on the Window lane; pure-Rust HTML5 <canvas> 2D engine (Path2D, transforms, gradients, shadows, compositing, bitmap text, ImageData, LZ77+Huffman PNG toDataURL/toBlob, and live DOM pixel projection); browser-hosted ES <script type="module">, window.Image, 2,048 browser listeners, MutationObserver, ResizeObserver, IntersectionObserver, and CustomElementRegistry (window.customElements); @font-face unicode-range subset filtering, large-page (> 1 MiB) CDP utility worlds (news.google.com, en.wikipedia.org), zero-diagnostic Wikipedia portal rendering (www.wikipedia.org), and honest Linux desktop User-Agent (www.npr.org); plus independent per-tab page zoom (25%..=500%, Alt+=/Alt+-/Alt+0, Ctrl+MouseWheel), persistent 0o600 localStorage, and tab session snapshot & restore. Scope and limits ↗
v0.9.29: Pinned Playwright 1.58.2 automation, HTTP decompression, cross-origin/@import CSS & real-site compatibility. Unmodified playwright-core 1.58.2 passes across both chromium.connectOverCDP (HTTP + WebSocket) and chromium.launch (--remote-debugging-pipe + --headless), with real Target.setAutoAttach, isolated utility worlds even under --disable-scripts, locator fill/click, screenshots, HTTP 404 response events, and download streaming; pure-Rust HTTP gzip/deflate/br decompression, responsive <picture>/srcset and data:image/* decoding, credential-free cross-origin HTTPS <link rel="stylesheet"> and bounded @import loading; legacy -moz-border-radius aliasing and Chromium-aligned DevTools Console css-parse filtering; Stylo style="..." and xmlns:xlink on inline <svg> with large-viewBox and viewBox-only container-width sizing; CSS Grid grid-template-areas / grid-area 2-column desktop layout (Wikipedia Vector 2022), inline position: relative containing-block fallback, and flex-item BFC float isolation (lobste.rs); plus Annex B <!--/--> script comments, DOM wrapper expandos, reflected HTML attributes, document.currentScript, document.write, and blank/srcdoc <iframe> subdocuments. Scope and limits ↗
v0.9.28: HTML forms, interactive controls & modern DOM/Web Platform APIs. Standalone and form-associated controls (checkbox, radio, <select> dropdown popup, <button>, <textarea>, <label>, <details>, <dialog>, <div onclick>); Stylo CSS3 querySelector/querySelectorAll/matches/closest and CSS.supports; DocumentFragment, DOMParser, outerHTML, insertAdjacentHTML, { capture, once, passive, signal }, AbortController, and CustomEvent; URL, URLSearchParams, TextEncoder/TextDecoder, atob/btoa, ChaCha20 crypto.getRandomValues/randomUUID, performance.now, setInterval, requestAnimationFrame, queueMicrotask, structuredClone, and matchMedia; live getComputedStyle & getBoundingClientRect/scrollTo; localStorage/sessionStorage, HttpOnly-isolated document.cookie, history.pushState/replaceState/popstate, and parent-brokered same-origin fetch() & XMLHttpRequest over the seccomp-confined VERSION = 9 page worker. Scope and limits ↗
v0.9.27: CSS layout fidelity, rounded corners, Appendix E stacking & +189 WPT passes. Anti-aliased border-radius rendering and rounded overflow clipping, full CSS 2.1 Appendix E stacking contexts and z-index paint order, position: absolute hypothetical static positions across block/inline/flex/grid and position: sticky clamping, direction: rtl, CSS Sizing 4 aspect-ratio, flex/grid calc(% + px), CSS 2.1 float/clear, overflow: auto | scroll and table-cell clipping, general ::before/::after pseudo-elements, visibility: collapse, and CSSOM container-query length units — advancing honest WPT static reftests from 339 to 528 PASS / 421 FAIL / 62 UNSUPPORTED of 1,011 and WPT Window parsing to 16/16 files (79/79 subtests). Scope and limits ↗
v0.9.26: Desktop browser UX, Omnibox, Find in Page, persistent History & Downloads. Omnibox URL/search classification (DuckDuckGo, Google, Wikipedia) with live autocomplete dropdown; built-in chrome://newtab, chrome://history, chrome://bookmarks, chrome://downloads, chrome://settings, and chrome://version pages; Find in Page (Ctrl+F / F3 / Shift+F3) with match highlights and scroll-into-view; persistent user-local Browsing History (Ctrl+H) and Clear Browsing Data (Ctrl+Shift+Delete); pure-Rust File Downloads (Content-Disposition: attachment, <a download>, Ctrl+S Save Page, Ctrl+J); toggleable Bookmarks Bar (Ctrl+Shift+B); Hard Reload (Ctrl+Shift+R), Stop Loading (Escape), and View Page Source (Ctrl+U); plus Ctrl+Shift+T Reopen Closed Tab, Ctrl+N New Window, Ctrl+1..9 tab jump, middle-click background link open & tab close, tab-strip context menu, mouse buttons 8/9 Back/Forward, and F11 fullscreen. Scope and limits ↗
v0.9.25: App-wide X11 clipboard, text selection, and Cut / Copy / Paste. Pure-Rust X11 CLIPBOARD and PRIMARY selection ownership and retrieval across every surface: click/drag or Ctrl+C / right-click on DevTools Console rows to copy full untruncated JS errors and stack traces (plus copy() sync); full cursor/selection editing, Cut/Copy/Paste, and middle-click PRIMARY paste in the > REPL, DevTools inputs, Address bar (Paste and go), and page <input> fields (with strict password-field copy/cut protection); drag/double-click/Ctrl+A text selection and Ctrl+C copy on web pages; and copy actions across Elements, Sources, Network, Performance, Application, and About. Scope and limits ↗
v0.9.24: Six-panel Chromium-style DevTools workspace. Built-in Elements (Styles, Computed, Box Model, live element.style DOM/CSS editing), Console (19-method console.* API in the isolated Boa worker, interactive > JS REPL, Command Line API $_, $0..$4, $$(), table(), copy(), inspect(), inline object trees), Sources, Network (4-tab Headers/Response/Preview/Timing inspector with secret redaction, Disable cache, Preserve log), Performance (64-frame 60 FPS sparkline), and Application (session cookies, TLS/sandbox security, resources), with Right/Bottom docking, draggable splitter resize, and interactive Element Picker (↖ / Ctrl+Shift+C). Scope and limits ↗
v0.9.23: Google News interactive links/scroll, script-admission preflight, and WOFF/WOFF2 web fonts. Oversize documents (> 1 MiB wire HTML or > 4,096-byte URL) cleanly skip default-mode script worker startup so Google News scrolls, clicks links without SCRIPT_* errors, and renders 12-column /stories/ (Full coverage) pages in full styled layout; pure-Rust WOFF1/WOFF2 @font-face decoding with synthetic bold/italic renders downloadable web fonts on sites such as badge.nyx.ms and sl.ush.fund. Scope and limits ↗ · Contract ↗
v0.9.22: Google News visual parity and styled Topic destination. Outer-box linear calc(percent + px), empty-element :before background images, multiplied subtree opacity, borderless input control painting, Material icon ligatures (chevron_right to ›), and positioned/stacking/grid-measurement optimizations render both the Google News homepage and the 9,997-node Headlines Topic destination page in full styled layout without fallback across 1280x800, default 1100x727, and 1024x768 viewports. Scope and limits ↗ · Contract ↗
v0.9.21: native target control. CDP creates, activates and closes real native tabs through the existing workspace owner, with genuinely empty blank documents and explicit failures for unsupported options. Published as v0.9.21 at 321e1e87e47e76102d5cc3a4d010acc24d3eff72. All eight required exact-source CI/hosting checks and normal tagged publication pass. The command above delivers v0.9.21: public install/reinstall, actual v0.9.20 update/no-op, thirteen native helpers, two Runtime proofs, the new Target proof, eight layout proofs and both frozen worker suites pass. All58 additive public images were inspected. Both reviewed WPT scores remain unchanged. Autoattachment and ordinary Playwright remain unsupported. The high-severity undici build-tool dependency alert remains unresolved. Scope and limits ↗ · Public closeout ↗
v0.9.20: worker-backed Runtime. Bounded main-world evaluation, real closure/object handles, own-property inspection and release use the existing restricted page worker. Published as v0.9.20 at 28413873dc1c19cae537af9158899760c40dc7f7. All eight required exact-source CI/hosting checks and tagged publication pass. That public installer verification delivered v0.9.20: install/reinstall, actual v0.9.19 update/no-op, thirteen existing native helpers, two Runtime proofs, eight layout proofs and both frozen worker suites pass. All50 additive public images were inspected. Both separately reviewed WPT scores remain unchanged; no general Playwright compatibility is claimed. A separate Dependabot build-tool update failed security_update_not_possible; the undici constraint remains unresolved, not a passing check. Scope and limits ↗ · Public closeout ↗
v0.9.19: auto-width inline heights. Inline-block/flex/grid lines account for their real child allocation, enclosing borders and following flow. Existing width selection, percentage-height definiteness, struts and limits stay fixed. Published as v0.9.19 at 9179426360904f01ab3b4394f7699c7ba4c70da9. Full Rust/JSPLAN, both reviewed WPT lanes, all eight required exact-source CI/hosting checks and tagged publication pass. Public install/reinstall, actual v0.9.18 update/no-op, thirteen existing native helpers, eight additive native/CDP proofs and both frozen worker suites pass; all36 additive public images were inspected. That installer verification delivered v0.9.19. A separate Dependabot build-tool update failed with an unresolved dependency constraint. Scope and limits ↗ · Public closeout ↗
v0.9.18: scripted empty links. Painted anchors no longer need text to follow their post-handler href and document base. The selected URL is checked before DOM edits and observer results commit; cancellation, forms and existing limits are preserved. Published as v0.9.18 at 0d79fa66ae3e91de7aaf2c868f09589a3f898312. Exact-source CI/site, release assets, checksum-verified public install/reinstall and an actual v0.9.17 upgrade/no-op pass. Thirteen existing public native helpers, six additive native/CDP proofs and both frozen public-worker suites pass; all 28 additive public images were inspected. That public installer verification delivered v0.9.18; the command follows the latest published release. Scope and limits ↗ · Public closeout ↗
v0.9.17: declaration editing methods. Modern element.style.setProperty, removeProperty and getPropertyPriority use the existing Rust declaration parser and real DOM attribute. Published as v0.9.17 at 6b3c36f37aaa33bc2941d7a5bfa1eed2d48cc73b. Exact-source CI/site, release assets, checksum-verified public install/reinstall and an actual v0.9.16 upgrade/no-op pass. Thirteen existing public native helpers, all four separate geometry/method native/CDP proofs and both frozen public-worker suites pass; all sixteen additive public images were inspected. That public installer verification delivered v0.9.17. These methods do not complete CSSOM or add WPT passes. Scope and limits ↗ · Public closeout ↗
v0.9.16: definite-width atomic inline sizing. Ordinary inline-blocks and normal-flow inline-flex/grid containers share outer allocation: padding, borders and signed margins count once; percentages use the containing width, and definite overflow keeps its width. Inner flex/grid formatting and baseline algorithms are unchanged. Published as v0.9.16 at 8ce13a3786501b376dbd594b07cacfddf3d604f6. Exact-source CI/site, checksum-verified public install/reinstall and actual v0.9.15 upgrade pass. Both frozen public-worker suites, thirteen existing native helpers and physical/atomic 1x/2x native/CDP proofs pass, with all twelve layout images inspected. The installer selects the latest actually published release. Public closeout ↗ · Scope and limits ↗
v0.9.15: physical flex/grid left/right placement. Published as v0.9.15 at 7e13cca45c525921a5072a00eab658cf2782d4e9. Local regressions and the separate reviewed score lanes retain two additional original reftest matches. Exact-source CI/site, public install/update, existing native/CDP helpers and the separate public physical-layout proof are verified. See the public closeout. The installer selects the latest actually published release. Scope, evidence and limits ↗
Current compatibility targets. Real reddit.com and news.google.com should load and look as expected. Faithful signed-out desktop reading comes first, with same-input reference comparisons and fresh public-binary navigation. Neither target is complete. Acceptance criteria ↗
Measured standards progress. The full-cohort gate retains the initial 24 passing WPT flexbox reftests and the complete pinned 1,011-test selection below, including failures and unsupported cases. Scores are freshly measured on every commit; a larger corpus is not a browser improvement. Authored error/timer/rejection/message/lifecycle controls add no upstream or JavaScript testharness passes.
v0.9.6 corrects bounded classic external script loading and shares resource admission across CSS, fonts, images and scripts. The Performance Dashboard reports completed browser paints, actual cache reuse and retained payload. Frame/style snapshots share immutable storage and render uncached above their 16 MiB/8 MiB payload bounds. These are per-Browser cache limits, not total memory ceilings or a scrolling-speed guarantee. Performance scope ↗
Hover links to preview destinations in the bottom-left status strip; right-click or Ctrl+click links to open in a new tab. Right-click Inspect element, press F12 for diagnostics, or press Ctrl+Shift+P for Performance. Use mgbrowser --profile <URL> for a headless report. Ctrl+T opens a tab; drag tabs into windows or left/right groups. Themes, sizing, bookmarks and update progress with Restart now remain.
Run the command once to get automatic updates. Installed builds check on startup and daily; restart to use a new version. Menu → About shows version, compile time and commit. Use --no-auto-update to disable background checks. HTTP pages keep a red title/address strip in both themes; Ctrl+L selects the location. Pure-Rust Boa ECMAScript runs inline and classic external page scripts by default (use --disable-scripts to opt out).
Measured compatibility
Web Platform Tests
The complete reviewed v0.9.32 and current-source measurements retain static coverage at 558 PASS / 391 FAIL / 62 UNSUPPORTED of 1,011 (all 558 protected passes and 949 runnable cases preserved), while the separate Window lane passes 16 / 16 files and 79 / 79 final subtests (100%). Neither lane is full browser conformance or a score run on the installed binary.
558 / 1011 selected tests passing
Fail: 391 · Unsupported: 62 · Errors: 0 · Timeouts: 0 · Crashes: 0.
A pinned flexbox reftest selection using the real Rust browser navigation, resource and rendering path. This is a selected subset, not the full Web Platform Tests suite or JavaScript testharness coverage. These are current-source measurements, not a score for the installed release.
Pages reruns this selection and checks the recorded score before publishing a commit. Unsupported cases stay in the denominator.
Method and limitations ↗ · Full results and tested commit ↗
Reproducibility fingerprints
Upstream WPT: 84daed4ae966d9624bed22f43587c79283ad1fea
Corpus SHA-256: d8c4bd6aacd93d964c10302e63b9c42576d785a055848772f9f71b2436f8075d
Browser source SHA-256: f193392c2fc0aa19a74e545dcac65599811032891fa68508c6eee713c72861b9
Separate Window parsing tests
16 / 16 selected Window files passing
File outcomes: Fail: 0 · Timeouts: 0 · Precondition failed: 0 · Unsupported: 0 · Errors: 0 · Crashes: 0 · Pending: 0.
Observed final subtests: Pass: 79 / 79 observed final rows; Fail: 0 · Timeouts: 0 · Not run: 0 · Precondition failed: 0.
Final inventories observed for 16 / 16 files. Every selected file has an observed final inventory. Source-declared calls: 79; this is not a result denominator. Result prefixes without Completion are not counted as final inventory.
A fixed upstream flexbox declared-value parsing cohort using the real Browser and unchanged Window testharness. These are current-source measurements, not a score for the installed release. The separate static reftest selection is not added to these totals. This is not the full WPT suite or complete Window compatibility.
Window method and limitations ↗ · Full Window report and tested commit ↗
Case artifact paths and hashes in that report identify retained CI evidence; those paths are not public URLs.
Window reproducibility fingerprints
Upstream WPT: 84daed4ae966d9624bed22f43587c79283ad1fea
Window manifest SHA-256: 5223099747ed3b1669f311faa5007abb2c037bebb90aa7411b67c6470b4518d0
Evaluated source SHA-256: 435f6d7c83f8251cc31dd247e17faff05216576f43e576f9c41249294809573e
The historical first baseline failed at missing style.getPropertyValue(), before CSS comparisons. The v0.9.14 declaration bridge improves the unchanged selection to fifteen passing files and 77 passing final subtests; two flex-valid sign/container-unit calc assertions remain failing. The genuinely cold CI build and separate exact-source reports retain the existing limits and full inventories.
Try the browser we have
Small. Original. Experimental.
Own HTML parsing, measurement and rendering, with Rust Stylo for CSS and Taffy for bounded flex/grid sizing. PNG/JPEG/GIF and restricted static SVG images use Rust codecs. Verified HTTPS with experimental RustCrypto TLS. Pure-Rust Boa JavaScript runs in a restricted child process by default; partial CDP controls real browser input.
The installer checks SHA-256, installs to ~/.local/bin without sudo, and adds an Mg desktop launcher. Try mgbrowser https://news.google.com/ or Hacker News.
A few practical details
Open a page.
Run inside an X11 or XWayland desktop. A DejaVu or Liberation font is required; otherwise set MGBROWSER_FONT to a TrueType/OpenType font file. Follow the installer’s PATH instruction if shown.
Ctrl+L edits the address, Enter navigates, Tab moves between fields, Alt+Left goes back. Use --help for options. Developer guide ↗
Reusable Rust components
Butane. Sparkle. Chassis.
Butane embeds Boa with bounded execution policy and preserves our original interpreter as a test baseline. Sparkle handles HTML, DOM, layout and painting. Chassis brings browser services and optional controls; mg-browser supplies the desktop and platform integration.
The libraries have standalone examples and support rendering without a window. V8/WebKit drop-in compatibility, Tauri integration and a ThermiteOS port remain future work. Architecture and embedding guide ↗
The Butane JavaScript plan ↗ remains a longer roadmap. Boa now executes inline, classic external, and browser-hosted ES module (type="module" + importmap) page scripts under an explicit process-contained profile ↗. Comprehensive cooperative resource control, cross-origin dynamic module graphs, and full React/Vue browser applications remain open. The initial experiment results ↗ remain separate evidence.
Read before browsing
Known limitations
- Modern-web compatibility remains experimental. Live Google homepage → search → SearchGuard (
SG_SS) → SERP → first organic result → destination now passes in interactive desktop sessions (boa-interactive-page-v1), though anti-bot/account flows, complex web apps, and interactive widgets on many sites still fail. - Google News still has font/icon differences, script-dependent placeholders and possible destination fallbacks. Reddit and Google News loading and expected appearance remain unfinished. Search, menus and accounts remain unfinished. Pinned Playwright 1.58.2 passes local HTTP/WebSocket
connectOverCDP,--remote-debugging-pipelaunch suites, and large-page utility-world queries, while unsupported CDP domains and multi-frame/OOPIF targets still reject explicitly. Built-in DevTools does not yet include JavaScript breakpoint stepping, heap snapshots, or flamechart CPU sampling. - Boa-backed JavaScript integration runs inline, bounded classic external
<script src>, and bounded browser-hosted static ES<script type="module">scripts by default (use--disable-scriptsto opt out). - External scripts and static module graphs are limited to 16 sources within 32 eligible script elements, 256 KiB each and 1 MiB combined HTML/source; documents exceeding the 1 MiB wire-HTML or 4,096-byte URL admission caps skip default-mode script execution cleanly rather than failing worker startup. Deferred and module sources run after ordinary classic sources;
nomoduleis suppressed when browser module execution is active. Async scripts, nonempty integrity metadata andcrossoriginare skipped with diagnostics. Sources require UTF-8 and a supported JavaScript MIME type. - Timers support function-valued
setTimeout/clearTimeout,setInterval/clearInterval,requestAnimationFrame, andqueueMicrotask; string-eval timers remain unsupported. Window errors/rejections use conservative whole-realm muting; error locations remain unknown. Messaging addresses only the current Window with partial cloning, no ports or transfers. General JavaScript WPT testharness execution remains unfinished. The trusted bounded observer is off in ordinary browsing, not a general WPT runner. Separate DCL/load tasks operate on pre-parsed, preloaded sources, without a streaming parser or dynamic-resource load barrier. Same-originfetch(),XMLHttpRequest, and dynamicimport()are brokered by the parent session; cross-origin CORS preflights, cross-origin dynamicimport(), dynamic external classic script fetching, and a general browser event loop remain unsupported. No React/Vue browser-app compatibility is claimed. - Pinned Boa can retain fatal callback arguments until Context teardown. The browser discards terminal workers; library embedders must drop Fatal/Closed realms. Binding cleanup is not immediate whole-VM reclamation.
- Each script worker retains 1,000,000 cumulative opcodes, 1 MiB per source / 4 MiB lifetime source admission, one shared 256-pending/2,048-lifetime job/task allowance and 32/64 MiB outstanding/cumulative requested allocation. Sessions retain two seconds total active time, 300 seconds absolute lifetime, 64 transactions and 32 MiB aggregate wire bytes. Cancellation refunds no lifetime work; DOM and OS CPU/address-space limits are unchanged. These are not global browser quotas, complete cooperative budgeting or GC/RSS measurement. Active detached listeners persist until removal or teardown.
- Full CSS is not implemented. Flex/grid (including
grid-template-areas, named lines,fit-content(), andrepeat(auto-fill | auto-fit)), intrinsic sizing, positioning, stacking, anti-aliasedborder-radius,box-shadow/text-shadow, linear/radial gradients, and 2Dtransformare bounded subsets; CSS 3D transforms, keyframe animations/transitions, multi-line clamping and independently scrolling non-root elements remain unsupported. Bounded CSS@import(depth <= 4) and@font-faceTTF/OTF/WOFF/WOFF2 sources (filtered byunicode-range) share the navigation resource budget. - The style-declaration bridge is not full CSSOM. Public
setProperty/removeProperty/getPropertyPriorityship in v0.9.17 andwindow.getComputedStyleships in v0.9.28; stylesheet rule OM (CSSStyleSheet.cssRules) and whole-style forwarding remain deferred. - v0.9.16 fixes only definite-width outer allocation for ordinary inline-blocks and normal-flow inline-flex/grid containers. It does not change inner flex/grid formatting or baseline algorithms, or complete vertical alignment or bidi.
- The auto-width atomic height correction keeps the existing chosen width and strut/bottom alignment. It does not implement general shrink-to-fit, baselines, vertical alignment or bidi formatting.
- The v0.9.18 scripted empty-anchor correction requires the same connected anchor and its present resolvable href. Full target, referrer and detached-anchor behavior remain outside this increment; it does not complete DOM or WPT.
- CSS, fonts, images and scripts share 2 MiB, 32 requests and one ten-second loading allowance. Cross-origin HTTPS stylesheets, fonts, images and classic/module scripts load without cookies; plain HTTP cross-origin subresources and HTTPS-to-HTTP downgrades are rejected. Images support PNG, JPEG, first-frame GIF,
data:image/*,<picture>/srcset, restricted static SVG, and pure-Rust HTML5<canvas>2D rasterization (without WebGL/WebGPU). Unsupported images remain placeholders. Dynamic CSS/image network resources are not fetched after initial load. Desktop reading is not mobile fidelity or general destination compatibility. - Linux X11/XWayland is the supported GUI target. Cookies are memory-only; user-local
localStorageand open-tab session snapshots persist in bounded0o600files and clear withCtrl+Shift+Delete. - Tabs are limited to 16 across four windows, with two left/right groups per window. Navigation/script budgets remain per tab/worker, not a combined memory or CPU quota.
- System size follows screen-global X11 desktop DPI, with 100% fallback, while independent per-tab page zoom (
Alt+=/Alt+-/Alt+0,Ctrl+MouseWheel) scales page content separately from browser chrome; per-monitor Wayland scaling is not implemented. Images retain their existing decoded resolution. - System appearance follows the Linux settings portal's light/dark preference, with Light fallback when unavailable. Custom desktop skins/accents are not copied; window managers may ignore decoration hints. Pages are not forced into dark mode.
- The restricted JavaScript worker is not a sandbox for the browser as a whole.
- Do not use this release for banking, sensitive authenticated browsing, or arbitrary hostile websites.
Research and validation
Implementation and evidence
Feature contracts, daily logs and reusable agent skills keep experiments reviewable. The proposed autoresearch evaluator, broader CSS/images and full CDP remain future work. This preview does not complete the formal Linux MVP gates. The bounded typed Window observer has separate worker and Browser acceptance; continuous static and Window scoring use separate current-source reports and manual ratchets.
v0.9.14 adds parser-backed modern style declarations. Focused declaration, binding, quota/fatal and fresh/retained-worker checks and full local debug/release regressions pass; the frozen JSPLAN comparison retains all 364 reviewed outcomes. The independently reviewed Window measurement reports 15/16 passing files and 77/79 passing actual final subtests, with two assertion failures retained in flex-valid.html. Its manually strengthened ratchet protects the fifteen passing files. Input bytes and resource limits remain unchanged. See the dated log for separate publication, public install/update and native/CDP verification. Full CSSOM, Window readiness and F-016/F-026/MVP remain open. CSSOM scope and deferred interfaces ↗
v0.9.15 adds bounded physical justify-content:left/right placement. The complete unchanged static cohort gains only two genuine column-case reference matches: 319 pass, 630 fail and 62 unsupported of 1,011. All old passes and runnable cases remain protected; the five other initially targeted cases still fail pixel comparisons. Explicit Safe/reversed-flex, RTL/writing-mode and viewport limitations remain. New authored controls do not enter either upstream denominator. Physical alignment contract ↗
MVP plan · Queued lifecycle contract and scope · Observer scope and evidence · Contribute
Built in the open
Evidence over promises.
Modern page, Promise, retained-event and GC/lifecycle tests accompany the Boa integration. The original engine's assertions and 26 native/26 CDP fixture journeys remain a separate research baseline. Exact release and public-install receipts live in the dated work log; local fixtures are not broad web compatibility.
Feature specification · Daily logs · Skills
Our collaboration workflow draws from Recurse.
Project status
Latest work log: . Status comes from the repository’s feature specification.
- F-033 : CSS visual parity, responsive Grid, HTML5 Canvas 2D, ES modules & desktop session UXstable
- F-032 : Real-site compatibility, HTTP decompression & cross-origin/@import CSSstable
- F-031 : HTML forms, interactive controls & modern DOM/Web Platform APIsstable
- F-030 : CSS layout fidelity, rounded boxes, stacking & WPT coveragestable
- F-029 : Desktop browser UX, Omnibox, Find, History & Downloadsstable
- F-028 : Native X11 clipboard and app-wide text selectionstable
- F-026 : Upstream Web Platform Tests coveragein-progress
- F-025 : Google News desktop readingin-progress
- F-027 : Reddit loading and desktop readingplanned
- F-024 : Pinned Playwright browser controlstable
- F-023 : Detachable tabs and left/right page groupsstable
- F-022 : Native inspection and compatibility diagnosticsstable
- F-021 : Smooth wheel scrollingstable
- F-020 : Update progress, explicit restart and compact toolbarstable
- F-019 : Navigation toolbar and local bookmarksstable
- F-018 : Desktop-aware browser sizestable
- F-017 : System, light and dark browser appearancestable
- F-016 : Modern Butane JavaScript and embedding compatibilityin-progress
- F-015 : Self-updates and build identitystable
- F-014 : Hacker News desktop renderingstable
- F-013 : Reusable Mg component boundariesstable
- F-012 : v0.1 experimental previewstable
- F-001 : Project foundation and websitestable
- F-002 : Agent continuity and reusable skillsstable
- F-003 : Local document renderingin-progress
- F-004 : Static web navigationin-progress
- F-005 : Styled text and imagesin-progress
- F-006 : Reproducible autoresearch evaluatorplanned
- F-007 : Linux MVP releaseplanned
- F-008 : JavaScript and broader compatibilityin-progress
- F-009 : Experimental Rust dependency foundationstable
- F-010 : Google search to first destinationin-progress
- F-011 : Chrome DevTools Protocol automationin-progress