Skip to content

Not written yet

codingncaffeine edited this page Sep 12, 2026 · 100 revisions

Not written yet

What Sashfold cannot do, it does not do — nothing stands in for a missing feature except where this page says so. The list is honest and current; the dashboard's census on The Sashfold 100 counts how often the live web asks for each.

Scripting

Pages run their scripts (Scripting): the DOM, events, timers, promises and the event loop are written. What a page cannot do is what its bundle needs from the newer half of the language, below: a script that uses one of those features fails at parse time with a syntax error that names it, and the page stands as its markup alone. A growing share of sites answer a browser without their script with a bot challenge instead of the page.

The engine itself exists and runs scripts: a JavaScript engine of our own in src/js (Architecture), scored on test262 (Measurements). What it does not have yet, each of which is a syntax error that names itself rather than a silent misparse: async generators and for await, BigInt (and with it the two BigInt typed-array kinds), the v regular-expression flag, lookbehind and property escapes, and an await or yield inside a class heritage or a computed key. Modules are written — records, their linking and their evaluation, live bindings, the namespace object, dynamic import(), import.meta and top-level await (a module's body runs as an async function, and its importers wait for it) — and module scripts on the page run: fetched in CORS mode with the credentials the element asks for, held to a JavaScript type, deferred in document order with the classic defer scripts, an inline module keyed by its element with the document's URL as its base. Import maps are not written, so a bare specifier fails to resolve, and JSON and CSS modules are refused by type. Not written on the page side either: WebSocket, streams (fetch and XMLHttpRequest read a body whole), URL.createObjectURL, shadow trees, ranges and tree walkers, document.write after the parse, named access on the window, MutationObserver records.

Styling

  • Pseudo-elements other than ::before, ::after and ::first-letter — ::first-line, ::marker, ::selection, ::placeholder — are parsed, and match nothing. A background, border or padding on a ::first-letter waits on inline box painting, below.
  • font-synthesis — a weight or a slant the face does not have is always synthesized, so font-synthesis-weight: none and font-synthesis-style: none change nothing.
  • display: contents — the box is drawn rather than skipped.

Layout

  • margin-trim — the property is not read, so a container cannot drop the margins of the children that touch its own content edge. Now that the flow-relative properties are read, this is the one thing between the engine and the twenty-eight tests in css-box/margin-trim, which until then were matching a reference that had no margins either.

  • Tables — empty-cells: hide; visibility: collapse on rows and columns; percentage heights of rows and cells. In the collapsing border model a line whose winner changes along a spanning box's edge is drawn at the widest of them rather than segment by segment.

  • Grid — subgrid and grid-lanes (masonry) are passed over (a subgrid track list is none); items share a baseline down a row but not across a column, so justify-self: baseline is start. The content keywords are read as a width, a min-width, a max-width and a flex-basis, but not as a height — a block's min-content and max-content heights are its content height, which is what auto already gives it — and fit-content(<length>) as a size property is not read (the grid track function of that name is).

  • Multi-column layout, text-overflow, overflow-wrap; justify stretches the spaces a line was broken at, so text kept whole by white-space: pre-wrap — which holds its spaces inside a word — does not stretch, and the only word separator it stretches is the ordinary space, not the no-break space or the Ethiopic, Aegean, Ugaritic and Phoenician ones; text-justify is read but the only method written is the one between words, so inter-character behaves as inter-word; and text-indent reads no each-line or hanging. text-transform uses the SIMPLE case mappings, so sharp s stays sharp s rather than becoming SS, the Turkish dotted i and the Greek final sigma are not decided by language or neighbour, and full-width and full-size-kana are not written; capitalize finds word starts within one text node, so a word split across an inline box is capitalized twice.

  • Writing modes and bidi — writing-mode is read, and a page or a box that asks for vertical-rl, vertical-lr, sideways-rl or sideways-lr is laid out sideways: its lines stack across the page, its text runs down it, and every glyph of a horizontal script turns a quarter circle. A box whose mode is not the one around it starts an orthogonal flow, laid out in a frame of its own and turned back into the page when it is done; the room its lines have is its own extent along the outer block axis, or where that is not settled, the initial containing block's. direction and the dir attribute settle which end of the line a block's content starts at and what start and end mean, and dir="auto" and unicode-bidi: plaintext find that direction in the text itself — and the bidirectional algorithm reorders the text: a line's entries are drawn in the order rules L1 and L2 give them, a run that reads right to left has its characters reversed and its brackets mirrored (L4), and unicode-bidi's embed, isolate and bidi-override open the levels they name. A flex container's two axes, a grid's columns and a table's columns all read the way their direction says, and so does the overflow edge, the indent, the room a width leaves over, and where a box out of the flow stands when it writes no offsets of its own.

    What is left: an inline box whose content changes direction inside it is drawn as one box around all of it rather than in the several pieces the specification asks for; isolate-override opens the isolate but not the override; there is no shaping, so Arabic letters do not join and a combining mark inside a reversed run lands on the wrong side of its base; <bdo> and <bdi> have no user-agent rules of their own yet; text-orientation is read but does nothing, and text-combine-upright is not written. An orthogonal flow's baseline is dropped rather than synthesized.

  • Flexbox — baseline alignment is flex-start.

  • Positioning — fixed boxes do not yet move with the shell's scroll. An inline box that the flow broke around a block child fades that block with it, but each such block is its own group rather than all of them and the box's lines being one, which shows only where two of them overlap.

  • Inline boxes — an empty one contributes no height of its own to the line box, and box-decoration-break: clone draws as slice.

  • List markers — list-style-image; and an inside marker leads the item’s own first line only, so a list item whose content is blocks keeps its marker outside.

  • Percentage heights of a box whose containing block has no definite height stay auto, as the specification says.

Painting

  • Shadows, outlines, filters, clip paths, masks; border-image in all its parts.
  • Of rounded corners: a positioned descendant of a box that rounds its corners is held to that box's rectangle rather than its curve, and a table row's or column's background under its cells is square.
  • Of backgrounds: background-attachment (every layer scrolls with the page), background-clip: text and border-area, three- and four-value and negative-percentage positions, and a row's or column's background in the collapsing border model.
  • Rotations, scales and skews (translations are drawn).
  • opacity between zero and one paints as if opaque (zero hides; group compositing is unwritten).
  • Border styles other than solid draw solid.
  • Font hinting; color emoji (emoji are drawn as boxes until a color font format is read).

Media

  • Web fonts in WOFF and WOFF2 (TrueType @font-face sources load); CFF-flavored OpenType is declined.
  • Animated GIF (the first frame shows), WebP, AVIF, SVG.
  • Audio and video.

Networking and the shell

  • The macOS window and TLS, so the window and https pages are Windows and Linux today. On Linux the TLS client fetches no CRLs yet, so revocation is not checked there, and it has no session resumption, so every connection to a host pays a full handshake; the window has no title bar on a compositor without server-side decorations (GNOME), and no HiDPI scaling, touch or input methods.
  • POST forms (a form that posts says so); file inputs are drawn only; required/pattern validation; a select's dropdown (keyboard only).
  • HTTP/2, socket timeouts (a hung server hangs a load), parallel subresource loads (they load one after another on kept connections).
  • Session restore, profiles, bookmarks, content blocking, a settings page.
  • The tab strip's open, close and hover transitions: the theme's timings are parsed, not yet consumed.

Clone this wiki locally