@tsrx/ripple@0.2.1
Ripple-TS/ripple@tsrx/ripple@0.2.1Sep 16, 2026by github-actions[bot]
Upgrading?
AI Summary
This package mirrors the core performance improvements found in ripple@0.4.2, specifically targeting server rendering efficiency and list rendering costs.
Key Highlights
- Faster buffered server rendering with Latin-1 optimization
- Cheaper text-only elements and typed loop items
- Cheaper keyed lists with reduced reordering costs
- Optimized runtime text escaper
Full Release Notes
### Patch Changes
- [#1478](https://github.com/Ripple-TS/ripple/pull/1478)
[`1032539`](https://github.com/Ripple-TS/ripple/commit/10325392e4b1ec7fba78b8ddaf57bc5376adaab1)
Thanks [@leonidaz](https://github.com/leonidaz)! - Faster buffered server
rendering. Static text and attribute values are emitted with characters above
U+00FF as numeric character references (raw-text elements such as `<script>`
excluded), so a server response stays a one-byte string whenever its dynamic
data is Latin-1 too: a single static em dash no longer widens the whole body to
two bytes per character, which halved the flatten, byte-length and UTF-8 encode
cost of a page. The runtime text escaper checks for `&` and `<` with two
single-character searches instead of a regex test.
- [#1481](https://github.com/Ripple-TS/ripple/pull/1481)
[`e9382ed`](https://github.com/Ripple-TS/ripple/commit/e9382ed7538779aeb8671b8e3f3fdfd3a897b85a)
Thanks [@leonidaz](https://github.com/leonidaz)! - Cheaper text-only elements
and typed loop items. An element whose only child is a typed text expression
(`<td>{row.name}</td>`) is cloned without a placeholder text node and written
through the element (`set_text_content`): the first write creates the text node
with `textContent`, later writes update it in place, and hydration adopts the
server-rendered text with no cursor descent, which removes a DOM read and a text
node per cell from every list row. A keyed `@for` key callback reads the item
directly instead of unwrapping it. Type inference now follows a binding's
declared type through property writes (`items.value = next` no longer hides
`track<Row[]>()` from the loop item) and through array and tuple indexing
(`row.queries[0].elapsed`), so those reads lower to direct text updates in one
render block per row.
- [#1482](https://github.com/Ripple-TS/ripple/pull/1482)
[`0030be0`](https://github.com/Ripple-TS/ripple/commit/0030be0aa3c7f1d2ce40500dc57ea980b69c69ec)
Thanks [@leonidaz](https://github.com/leonidaz)! - perf: cheaper keyed lists. A
`@for` or `@if` that trails template siblings appends into its parent element
instead of inserting before a `<!>` placeholder. A list item whose updates live
in one render block carries that block on the item block itself (`_$_.item`),
and a keyed item that only its render block reads is held as it is instead of in
a tracked, re-running its block directly when the key's item is replaced. Leaf
text is written without a DOM read, from the value the render block last wrote.
A keyed diff that re-lays most of its items walks the range front to back
instead of appending every item at the end, about half the reorder cost in
Chromium and far less right after a layout flush.Related Repositories
affaan-m/ECC★ 285,919
The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
react/react★ 251,629
The library for web and native user interfaces.
nodejs/node★ 122,528
Node.js JavaScript runtime ✨🐢🚀✨
Leonxlnx/taste-skill★ 100,731
Agent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
louislam/uptime-kuma★ 92,732
A fancy self-hosted monitoring tool