v0.1.3342 Oct 2026·Rendering, JavaScript & JIT, Web APIs & DOM, Memory & reading, Tabs & interface
Iframes that cost what a paragraph costs, live selections, and rounder corners
Pages can now use iframes the way they do in the reference browser: frames a page creates or points at its own site load, run their scripts and can be read and written from the page. Each one costs about what a paragraph costs: 1,000 frames take 25 ms here against about 520 ms in the reference browser, and about 4 KB each against 120 KB. Text selection on engine pages is now the page's own, ranges stay correct as the page changes, and sites that walk or check the page's structure work. Rendering moved closer to the reference browser on popular docs, code-hosting and link-sharing sites.
Live same-origin iframes. A frame a script creates, or one pointed at the page's own site (or given its HTML inline with srcdoc), now loads, runs its scripts, fires its load events, and exposes its document and window to the page, both ways, line for line as the reference browser does in our tests. Frames on another site stay closed to the page, as the same-origin rule requires.
Memory & reading
An iframe at the cost of a paragraph. The reference browser builds a whole browsing context for every frame: a document, a window and a full set of built-in objects, about 120 KB and 0.27 ms each, before any script looks inside. In Floati a frame's document lives in the page's own node storage and its window is a small object over a scope, built only when something reaches in. Measured on 1,000 frames: created in 0.4 ms against the reference browser's 269 ms, created and written into in 25 ms against about 520 ms, and about 4.4 KB per used frame (an untouched frame costs what a div costs). A test in our gate holds those numbers. One difference remains: a frame shares the page's built-ins (its Array is the page's Array), where the reference browser gives each frame its own; that is next.
Rendering
Two script bugs found on the way: writing obj[key] = value never ran a setter, and neither did reading or assigning a name inside a with block. Both now work as the standard says.
Web APIs & DOM
Selections and ranges. Selecting text on an engine page now uses the page's own Selection object, so copy, highlights and sites that read or change the selection behave as in the reference browser, and a selection the page makes shows on screen. Ranges stay correct as the page changes, at the same cost however many a page keeps (the reference browser slows 47x with 5,000 of them).
JavaScript & JIT
TreeWalker and NodeIterator, written from the standard, with iterators kept correct as nodes are removed (86x faster than the reference browser with 5,000 iterators). XML documents, processing instructions and CDATA sections work, and every element reports its standard type, SVG included, for toString, instanceof and prototypes.
Rendering
Rounded corners in rem units are round. Popular docs, code-hosting and link-sharing sites write corner radii in rem (relative to the page's root font size); we read rem as em with a stray letter and painted square corners. Corner sizes now resolve every CSS unit, including calc(), and oversized radii shrink the standard way so pills stay pills.
Rendering
CSS triangles draw as triangles. The dropdown-arrow trick (a box with no size and one coloured border between two transparent ones) painted as a flat bar; borders now meet on the diagonal even when a side has no width.
Tabs & interface
Long button labels wrap. The reference browser lets the text in a button wrap; we kept it on one line, so a code-hosting site's Apache-2.0 and 2 other licenses found ran out of the sidebar. Measuring how narrow a box can get now also keeps a flex row inside inline content together, which put a developer-docs site's top navigation back near where the reference browser draws it.
Rendering
Headings with a numeric font weight get their real weight and size. A font shorthand such as 600 28px Georgia took the 600 as the size and dropped the whole declaration; one built from CSS variables (a code-hosting site's headings) was never split at all; and a spaced slash between size and line height lost the line height. All three now match the reference browser.
Memory & reading
Fixed: memory held by an ArrayBuffer is freed as soon as nothing uses it, instead of at the next page load.