@kudzujs/core 0.14.1 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PERFORMANCE.md
CHANGED
|
@@ -2,6 +2,60 @@
|
|
|
2
2
|
|
|
3
3
|
Reproducibility classes: `npm run benchmark`, `npm run benchmark:keyed`, `npm run benchmark:native`, `npm run benchmark:module-cache`, `npm run benchmark:project-navigation`, `npm run benchmark:project-state`, and `npm run benchmark:source-scale` are maintained in this repository; `npm run benchmark:commerce` is a maintained paired runner over the public external storefront; older excluded-workspace sections are historical provenance only and are not current framework rankings.
|
|
4
4
|
|
|
5
|
+
## 0.14.3 10,000-Item Browser Decision Intake
|
|
6
|
+
|
|
7
|
+
Measured 2026-08-27 on Linux x64 with Node 24.14.0 and Chrome
|
|
8
|
+
142.0.7444.175 using `RUNS=7 npm run benchmark:project-list-decision`.
|
|
9
|
+
The tracked fixture rotates three fresh-profile routes, forces garbage collection,
|
|
10
|
+
and records navigation completion, range replacement, DOM counters, JavaScript
|
|
11
|
+
heap, native edit identity, and bounded-row release.
|
|
12
|
+
|
|
13
|
+
| Strategy | Load median | Range median | Rows | DOM nodes median | JS heap median |
|
|
14
|
+
|---|---:|---:|---:|---:|---:|
|
|
15
|
+
| Direct DOM | 806.6 ms | n/a | 10,000 | 90,023 | 535,572 B |
|
|
16
|
+
| Pagination | 165.4 ms | 12.1 ms | 100 | 1,470 | 1,407,412 B |
|
|
17
|
+
| Scroll window | 161.2 ms | 16.5 ms | 100 | 1,471 | 1,507,712 B |
|
|
18
|
+
|
|
19
|
+
Direct load samples are `[767, 790.1, 882.8, 908.8, 753, 826.7, 806.6]`
|
|
20
|
+
ms. Pagination load/range samples are `[253.6, 138.6, 157, 133.7, 181.9,
|
|
21
|
+
202, 165.4]` / `[10.8, 22.1, 15.8, 13.7, 12.1, 10.5, 11]` ms. Scroll
|
|
22
|
+
window load/range samples are `[156.7, 154.6, 163.4, 161.2, 175.9, 203.5,
|
|
23
|
+
137.1]` / `[21.3, 16.4, 14.6, 17.1, 15.9, 16.5, 20.4]` ms.
|
|
24
|
+
|
|
25
|
+
The direct route is static and therefore has the lowest JavaScript heap; that
|
|
26
|
+
does not offset its 61.2x DOM-node count and 4.9x load median. Pagination and the
|
|
27
|
+
scroll window have overlapping load ranges, while pagination has the lower range
|
|
28
|
+
median, lower JavaScript heap, no scroll listener, native focus/page semantics,
|
|
29
|
+
and no fixed-row-height policy. Pagination is selected for 10,000-item project
|
|
30
|
+
tables. The window experiment adds no framework primitive and does not authorize
|
|
31
|
+
`0.14.4`; three independent failing fixtures remain required.
|
|
32
|
+
|
|
33
|
+
## 0.14.2 Infinite Loading Composition
|
|
34
|
+
|
|
35
|
+
Measured 2026-08-26 on macOS arm64 with Node 24.14.0 and Chrome
|
|
36
|
+
151.0.7922.174.
|
|
37
|
+
|
|
38
|
+
The project route adds one intrinsic sentinel, an owned `IntersectionObserver`,
|
|
39
|
+
cursor fetch, duplicate suppression, error/retry/end state, and immutable keyed
|
|
40
|
+
append. Required Chrome proves a three-request bound across two successful pages,
|
|
41
|
+
at most six retained projects, retained existing-row identity, observer cleanup,
|
|
42
|
+
and route-owned fetch abort. `/help` remains 0 B JavaScript.
|
|
43
|
+
|
|
44
|
+
The application emits 44 files totaling 168,037 raw / 52,955 aggregate gzip
|
|
45
|
+
bytes with deploy SHA-256
|
|
46
|
+
`230dea098442275e42a966ca595743a4da9c832327ba52d4d09de663c68f8f1a`.
|
|
47
|
+
The two-route session remains 17 JavaScript files and totals 76,889 raw / 26,750
|
|
48
|
+
aggregate gzip bytes. The authored application composition adds 3,732 raw / 770
|
|
49
|
+
gzip deploy bytes and 2,063 raw / 546 gzip session bytes over `0.14.1`; no
|
|
50
|
+
semantic primitive, IR kind, compiler pass, production compiler/runtime line,
|
|
51
|
+
runtime concept, or public API was added.
|
|
52
|
+
|
|
53
|
+
Table update samples are `[0.4, 0.5, 0.5, 0.3, 0.5, 0.4, 0.6]` ms, with a 0.5
|
|
54
|
+
ms median and 0.3/0.6 ms minimum/maximum. Navigation samples are
|
|
55
|
+
`[2.3, 2.3, 2.2, 2.6, 2.5, 2.5, 2.3]` ms, with a 2.3 ms median and 2.2/2.6 ms
|
|
56
|
+
minimum/maximum. The environment differs from the `0.14.1` release evidence, so
|
|
57
|
+
no improvement or regression claim is made.
|
|
58
|
+
|
|
5
59
|
## 0.14.1 Nested Object-State Collections
|
|
6
60
|
|
|
7
61
|
Measured 2026-08-26 on Linux x64 with Node 24.14.0 and Chrome
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Kudzu compiles ordinary React-shaped TypeScript and TSX into complete static HTM
|
|
|
14
14
|
|
|
15
15
|
> Experimental `0.14.x`: the compiler API and supported TSX surface may change.
|
|
16
16
|
|
|
17
|
-
**Latest release: 0.14.
|
|
17
|
+
**Latest release: 0.14.3 - 10,000-item browser decision.** Measured direct DOM, pagination, and scroll-window alternatives select native pagination for large project tables without adding virtualization or range runtime semantics. Read the [release notes](./RELEASES.md#0143---10000-item-browser-decision), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.14.3), or follow the [architecture packet](./docs/next-architecture/README.md).
|
|
18
18
|
|
|
19
19
|
- [Documentation](https://kudzujs.cloud/docs)
|
|
20
20
|
- [Installation guide](https://kudzujs.cloud/docs#install)
|
package/RELEASES.md
CHANGED
|
@@ -1,5 +1,92 @@
|
|
|
1
1
|
# Kudzu Releases
|
|
2
2
|
|
|
3
|
+
## 0.14.3 - 10,000-Item Browser Decision
|
|
4
|
+
|
|
5
|
+
Kudzu 0.14.3 measures direct DOM, pagination, and scroll-window alternatives
|
|
6
|
+
for one deterministic 10,000-project table and selects native pagination.
|
|
7
|
+
|
|
8
|
+
### Changed in 0.14.3
|
|
9
|
+
|
|
10
|
+
- Added a tracked three-route large-list decision fixture.
|
|
11
|
+
- Added rotating fresh-Chrome load, range, DOM, heap, and identity measurement.
|
|
12
|
+
- Rejected direct 10,000-row DOM after its 90,023-node result.
|
|
13
|
+
- Rejected fixed-height scroll windowing for the project table because pagination
|
|
14
|
+
is faster to change range, uses less heap, and preserves native page/focus and
|
|
15
|
+
variable-row-height behavior.
|
|
16
|
+
- Added no range primitive, virtualization runtime, compiler pass, or public API.
|
|
17
|
+
- Updated `create-kudzu@0.1.125` to generate projects on
|
|
18
|
+
`@kudzujs/core@^0.14.3`.
|
|
19
|
+
|
|
20
|
+
### Browser Evidence
|
|
21
|
+
|
|
22
|
+
- Direct DOM loads in 806.6 ms median with 90,023 DOM nodes.
|
|
23
|
+
- Pagination loads in 165.4 ms and changes its 100-row page in 12.1 ms median
|
|
24
|
+
with 1,470 DOM nodes.
|
|
25
|
+
- The scroll window loads in 161.2 ms and changes range in 16.5 ms median with
|
|
26
|
+
1,471 DOM nodes.
|
|
27
|
+
- Both bounded strategies release an edited off-range row and restore fresh
|
|
28
|
+
native input identity.
|
|
29
|
+
|
|
30
|
+
### Decision
|
|
31
|
+
|
|
32
|
+
Use pagination for 10,000-item project tables. `0.14.4` virtual range ownership
|
|
33
|
+
remains blocked until three independent real fixtures prove pagination and
|
|
34
|
+
application-owned bounded ranges insufficient.
|
|
35
|
+
|
|
36
|
+
### Upgrade
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
npm install @kudzujs/core@^0.14.3
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 0.14.2 - Infinite Loading Composition
|
|
43
|
+
|
|
44
|
+
Kudzu 0.14.2 composes bounded sentinel-driven loading from ordinary state,
|
|
45
|
+
owned effects, native `IntersectionObserver`, fetch, and existing keyed lists.
|
|
46
|
+
|
|
47
|
+
### Changed in 0.14.2
|
|
48
|
+
|
|
49
|
+
- Added an intrinsic sentinel with an owned observer and exact disconnect.
|
|
50
|
+
- Added cursor-based incremental fetch with duplicate project suppression.
|
|
51
|
+
- Added accessible loading, error, retry, and terminal states.
|
|
52
|
+
- Aborted in-flight incremental work when enhanced navigation releases the route.
|
|
53
|
+
- Bounded successful incremental pages to two and retained projects to six.
|
|
54
|
+
- Updated `create-kudzu@0.1.124` to generate projects on
|
|
55
|
+
`@kudzujs/core@^0.14.2`.
|
|
56
|
+
|
|
57
|
+
### Output Evidence
|
|
58
|
+
|
|
59
|
+
- The application emits 44 files totaling 168,037 raw / 52,955 aggregate gzip
|
|
60
|
+
bytes with deploy digest
|
|
61
|
+
`230dea098442275e42a966ca595743a4da9c832327ba52d4d09de663c68f8f1a`.
|
|
62
|
+
- The maintained two-route session remains 17 JavaScript files and totals
|
|
63
|
+
76,889 raw / 26,750 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
64
|
+
- No semantic primitive, IR kind, compiler pass, production compiler/runtime
|
|
65
|
+
line, normalization rule, adapter, runtime concept, public API, infinite-query
|
|
66
|
+
runtime, or observer scheduler was added.
|
|
67
|
+
|
|
68
|
+
### Validation
|
|
69
|
+
|
|
70
|
+
- Required Chrome proves cursor progression, duplicate trigger and record
|
|
71
|
+
suppression, HTTP error and retry, terminal state, retained row identity,
|
|
72
|
+
bounded requests/results, observer disconnect, and route-owned fetch abort.
|
|
73
|
+
- The complete suite passes 274 tests, package smoke, and serialized required-
|
|
74
|
+
Chrome execution.
|
|
75
|
+
- Seven fresh Chrome 151 profiles record a 0.5 ms table-update median with a
|
|
76
|
+
0.3-0.6 ms range and a 2.3 ms navigation median with a 2.2-2.6 ms range.
|
|
77
|
+
|
|
78
|
+
### Limits
|
|
79
|
+
|
|
80
|
+
Incremental loading is capped at two successful pages of two records and six
|
|
81
|
+
retained projects. Unbounded datasets, automatic query caching, windowing, and
|
|
82
|
+
virtualization remain separate measured decisions.
|
|
83
|
+
|
|
84
|
+
### Upgrade
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
npm install @kudzujs/core@^0.14.2
|
|
88
|
+
```
|
|
89
|
+
|
|
3
90
|
## 0.14.1 - Nested And Object-State Collections
|
|
4
91
|
|
|
5
92
|
Kudzu 0.14.1 lets one direct immutable array field of ordinary object state own
|
|
@@ -959,6 +959,36 @@ projects on `@kudzujs/core@^0.14.1`.
|
|
|
959
959
|
- **Done condition:** the full journey passes with explicit network and memory
|
|
960
960
|
bounds.
|
|
961
961
|
|
|
962
|
+
Release candidate evidence complete. The maintained project application adds one
|
|
963
|
+
intrinsic sentinel, an owned native `IntersectionObserver`, cursor and request
|
|
964
|
+
primitive state, an owned fetch with `AbortController`, immutable keyed append,
|
|
965
|
+
duplicate ID suppression, and explicit loading/error/retry/end UI. The authored
|
|
966
|
+
policy permits two successful pages of two records and retains at most six unique
|
|
967
|
+
projects. It adds no infinite-query runtime, observer scheduler, cache, retained
|
|
968
|
+
component tree, or virtualization machinery.
|
|
969
|
+
|
|
970
|
+
Required Chrome proves duplicate sentinel triggers issue one request, duplicate
|
|
971
|
+
records do not remount retained rows, cursor progression reaches an authored
|
|
972
|
+
`503`, retry reaches terminal state, post-terminal triggers issue no request, and
|
|
973
|
+
enhanced navigation disconnects the observer and aborts the in-flight fetch
|
|
974
|
+
signal. Exact request counts and retained DOM identity pass. `/help` remains
|
|
975
|
+
complete HTML with 0 B JavaScript.
|
|
976
|
+
|
|
977
|
+
The slice adds zero semantic primitives, IR kinds, compiler passes, production
|
|
978
|
+
compiler/runtime lines, normalization rules, adapters, runtime concepts, or
|
|
979
|
+
public APIs. The application emits 44 files totaling 168,037 raw / 52,955
|
|
980
|
+
aggregate gzip bytes with deploy SHA-256
|
|
981
|
+
`230dea098442275e42a966ca595743a4da9c832327ba52d4d09de663c68f8f1a`.
|
|
982
|
+
The maintained two-route session remains 17 JavaScript files totaling 76,889 raw
|
|
983
|
+
/ 26,750 aggregate gzip bytes.
|
|
984
|
+
|
|
985
|
+
Seven fresh macOS arm64 Chrome 151 profiles record table update samples of
|
|
986
|
+
`[0.4, 0.5, 0.5, 0.3, 0.5, 0.4, 0.6]` ms, a 0.5 ms median and 0.3/0.6 ms range,
|
|
987
|
+
plus navigation samples of `[2.3, 2.3, 2.2, 2.6, 2.5, 2.5, 2.3]` ms, a 2.3 ms
|
|
988
|
+
median and 2.2/2.6 ms range. The environment differs from `0.14.1`, so no timing
|
|
989
|
+
delta is claimed. `0.14.2` publishes this accepted packet, and
|
|
990
|
+
`create-kudzu@0.1.124` generates projects on `@kudzujs/core@^0.14.2`.
|
|
991
|
+
|
|
962
992
|
### `0.14.3`: 10,000-Item Browser Decision
|
|
963
993
|
|
|
964
994
|
- **Purpose:** measure direct DOM, pagination, and windowing alternatives.
|
|
@@ -969,6 +999,25 @@ projects on `@kudzujs/core@^0.14.1`.
|
|
|
969
999
|
- **Done condition:** the selected strategy and thresholds are recorded without
|
|
970
1000
|
assuming direct 10,000-row rendering is acceptable.
|
|
971
1001
|
|
|
1002
|
+
Decision evidence is complete. A tracked three-route fixture and
|
|
1003
|
+
`npm run benchmark:project-list-decision` now compare one static 10,000-row
|
|
1004
|
+
table with pagination and a scroll-driven 100-row window over the same
|
|
1005
|
+
deterministic records and native edit controls. Seven rotating fresh Chrome 142
|
|
1006
|
+
profiles show direct DOM
|
|
1007
|
+
at an 806.6 ms load median and 90,023 DOM nodes, versus 165.4/161.2 ms and a
|
|
1008
|
+
1,470/1,471-node median for pagination and the scroll window. Direct JavaScript
|
|
1009
|
+
heap is lower because its route is static; DOM size and load remain materially
|
|
1010
|
+
worse.
|
|
1011
|
+
|
|
1012
|
+
Pagination is selected. Its 12.1 ms range median is lower than the window's 16.5
|
|
1013
|
+
ms, it uses 100,300 fewer median JavaScript-heap bytes, and it preserves native
|
|
1014
|
+
page, keyboard, focus, and variable-row-height behavior without a scroll listener
|
|
1015
|
+
or measurement policy. Both bounded routes release an edited off-range row and
|
|
1016
|
+
restore fresh native input identity. The experiment adds no semantic primitive,
|
|
1017
|
+
IR kind, compiler pass, production compiler/runtime line, runtime concept, or
|
|
1018
|
+
public API. `0.14.4` remains blocked because this one fixture cannot authorize
|
|
1019
|
+
virtual range ownership.
|
|
1020
|
+
|
|
972
1021
|
### `0.14.4`: Virtual Range Ownership
|
|
973
1022
|
|
|
974
1023
|
- **Purpose:** implement bounded DOM only if `0.14.3` and three independent
|
|
@@ -1427,5 +1476,6 @@ release transaction where possible or document and publish a forward-fix patch.
|
|
|
1427
1476
|
| `0.13.3` | Released | Preserve the published upload validation, cancellation, retry, route cleanup, and attachment mutation evidence. | None |
|
|
1428
1477
|
| `0.14.0` | Released | Preserve native table CRUD, retained identity, keyboard access, and measured update evidence. | None |
|
|
1429
1478
|
| `0.14.1` | Released | Preserve immutable object-state replacement, nested keyed identity, latest handlers, and exact row release. | None |
|
|
1430
|
-
| `0.14.2` |
|
|
1431
|
-
| `0.14.3`
|
|
1479
|
+
| `0.14.2` | Released | Preserve bounded cursor loading, duplicate suppression, retry/end behavior, retained identity, and route cleanup. | None |
|
|
1480
|
+
| `0.14.3` | Release candidate | Complete commit, CI, tag, GitHub release, npm publication, and registry verification. | Release transaction |
|
|
1481
|
+
| `0.14.4` onward | Blocked | Complete or explicitly close `0.14.3` first. | Ordered patch boundary |
|
|
@@ -66,7 +66,7 @@ Keep each patch behavior-preserving and independently reviewable. If a boundary
|
|
|
66
66
|
|
|
67
67
|
## Generator Versions
|
|
68
68
|
|
|
69
|
-
`create-kudzu@0.1.
|
|
69
|
+
`create-kudzu@0.1.125` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.14.3`.
|
|
70
70
|
|
|
71
71
|
## Release Boundary
|
|
72
72
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kudzujs/core",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.3",
|
|
4
4
|
"description": "HTML-first TSX framework with synchronous state semantics and no virtual DOM",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"benchmark:module-cache": "node test/module-cache-performance.mjs",
|
|
62
62
|
"benchmark:native": "node test/native-performance.mjs",
|
|
63
63
|
"benchmark:project-navigation": "node test/project-navigation-performance.mjs",
|
|
64
|
+
"benchmark:project-list-decision": "node test/project-list-decision-performance.mjs",
|
|
64
65
|
"benchmark:project-state": "node test/project-state-performance.mjs",
|
|
65
66
|
"benchmark:source-scale": "node test/source-scale-performance.mjs",
|
|
66
67
|
"prepublishOnly": "npm run check && npm test",
|