compiler: accepts String(x) and String(); String is a reserved global conversion name, so bindings named String must be renamed, while property names such as { String: 1 }.String stay valid. (#2763)
compiler: accepts untagged template literals; each ${e} lowers to String(e) and the chunks join with +. Chunks admit the common string escapes, an escaped backtick and \${; tagged templates and other escapes are refused. (#2823)
js/tokenizer: emits template chunk tokens with a cooked value and the exact source, over the template grammar ebnf/lib/js adds. (#2823)
text/marked: new module for marked text: runs [text, kind?] with a kind of keyword, literal, string, number, comment, operator or identifier, none on punctuation; run constructors, Chunk helpers and a tagged form. (#2726, #2729, #2753, #2760, #2818)
media/json/serializer, media/datajs/serializer: leaf serializers answer lists of marked chunks, [[text, kind]], instead of plain strings, and the wrappers, LeafSerializer and compiler/serializer's Document are typed on List<Chunk>; join chunks with text/marked.chunksText. (#2729)
compiler/serializer, media/datajs: the chunks trySerialize and tryModuleSerialize answer split a keyword from its surroundings; the joined text is unchanged. (#2753)
media/datajs, compiler/serializer, edag/rust: add the marked entry points tryMarked, tryJsonMarked, tryModuleMarked, expExprTagged, scopeTagged and useLinesTagged; media/rust adds u64WordItems and utf16Units, and edag/rust/unmarked is new. (#2758, #2760)
media/nix: nix and nixToString return a Result whose error names the first rule the expression breaks; unwrap(nixToString(e)) replaces unwrapNullable(fromUndefined(nixToString(e))). _Chunks is removed. (#2745)
crypto/sign: add verify; crypto/secp adds isPublicKey, SEC 1 §3.2.2.1 key validation for curves with a prime n and n² > p + 1 + 2√p. sign reduces r modulo q and refuses a zero r or s. (#2686)
text/ascii: add hexDigitsValue; hexDigitValue answers null for a non-integer instead of a fraction. (#2787)
text/utf8: add stringToU8List and u8ListToString, the one owner of byte-list UTF-8 encoding and decoding; text/percent.utf8String and effects/common.utf8ListToString are removed in their favour. (#2746)
types/number: add isInteger (types/number/is_integer), exactly Number.isInteger, and isSafeInteger (types/number/is_safe_integer); the entry helper moves to types/object/entry, keeping the js/entry path. (#2757, #2771)
effects/node: add plainTextResponse(status, message), the frame every plain-text answer shares; export runNodeEffect from module.mjs. web's response takes a Headers value instead of a content type and a length. (#2749, #2781)
ebnf/railroad: toDiagrams takes an Alphabet before the rule set, toDiagrams(alphabet)(ruleSet); codePoints is the former labelling and tokens(encoding, categories) labels token grammars, drawing a category as its own piece. (#2799)
website/demo: TextDemoOptions and BitGroupDemoOptions require intro; media/json/demo.roundTrip returns Result<string, string>. website/style exports railroadBoxMarker and railroadLabelMarker. (#2696, #2800)
website: demos are highlighted by their producers, open with a lead, show refusals in a Refused: box and offer copy buttons; new crypto/sign and compiler/parser/grammar demos. (#2696, #2726, #2758, #2760, #2787, #2788, #2789, #2800)
website: a /prs/ page lists open pull requests with CI summaries, loaded on Refresh, with optional GitHub login. (#2779, #2782, #2794)
website: Contents and Issues move to a left sidebar on root and directory pages; at narrow widths a bar above the breadcrumb opens them as a drawer. website/page exports directoryLayout. (#2807)
nanvm-lib: BigInt's + and - and Numeric::bitwise_not return a Result and throw RangeError for a result longer than MAX_WORDS words; vm::unstable::number_text(f64) spells a number as Number::toString does. (#2752, #2832)
nanvm-effects-node: answers stat, access, rename, rmdir, readBytes, createExclusive, writeExclusive, catch, the file handle operations and, except on wasm32-unknown-unknown, sandbox, now and randomInt. (#2767, #2768, #2770, #2796, #2815)
nanvm-effects-node: writeFile and writeBytes sync so a deferred close error is reported; open refuses a FIFO with ERR_NOT_A_FILE; randomInt is not cryptographically secure; test stays notImplemented; numbers spell as in Node. (#2784, #2796, #2815, #2817, #2832)
nanvm: the Rust crates move to nanvm/lib, nanvm/harness and nanvm/effects-node; Cargo package names are unchanged. (#2810)
package.json: engines.node is exactly 26.10.0, the one Node this release is tested with; .node-version and the lockfile match. Older tools require an older release. (#2804, #2756)
ci: one exact prerelease toolset: Node 22 and 24 jobs, flakes and Engine are removed, programs receive one host-selected testContext, Intel macOS installs its tools directly, and Nixpkgs moves to 2efa67fd. (#2751, #2804, #2811)