@kudzujs/core 0.10.1 → 0.10.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
|
@@ -1,11 +1,59 @@
|
|
|
1
1
|
# Performance Records
|
|
2
2
|
|
|
3
|
-
Reproducibility classes: `npm run benchmark`, `npm run benchmark:keyed`, `npm run benchmark:native`, `npm run benchmark:module-cache`, `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.
|
|
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
5
|
`npm run benchmark:source-scale` generates its fixture outside the repository so 50,000 lines of synthetic source are not tracked. The default topology is 50 pages plus 450 route-owned imported modules. Generation is excluded from timing; fresh-process samples separately report source reads, reachable-graph discovery, source compilation, clean production build, compiler-result and deploy digests, output files/bytes, cache counters, and peak RSS. `ROUTES`, `MODULES_PER_ROUTE`, `FILLER_LINES`, `WARMUPS`, and `RUNS` may reduce or expand the fixture without changing the default acceptance floor. `TARGET_ROOT` measures another checkout; `BASELINE_ROOT` alternates that checkout with the current tree and requires identical deploy output.
|
|
6
6
|
|
|
7
7
|
The maintained 2026-08-13 comparison used Node 24.14.0 and an Intel Core i5-9500 Linux x64 host, one warm-up, and seven alternating fresh-process samples against clean `v0.8.44`. A narrow fast path skips Kudzu semantic transformation for 450 plain `.ts` modules whose runtime edges are exclusively resolvable relative TypeScript imports or exports; all other modules retain the existing transformer. Compile median fell from 2,323.9 ms to 1,413.2 ms (39.2%) and clean-build median from 3,325.3 ms to 2,382.4 ms (28.4%); every paired sample improved. Compile peak-RSS median fell from 571.2 MiB to 552.6 MiB, while build peak RSS was 570.9 MiB versus 568.8 MiB. Compiler scratch fell from 7,328,390 to 1,971,061 bytes. Both targets emitted the same 50 static HTML files, 10,980 bytes, and deploy SHA-256 `e107d78a7f55bc8a1af0ea6e53efeffa19b3d44d21c892484d103fa346e7ba7b`. This is a source-scale compiler comparison, not a cross-framework result.
|
|
8
8
|
|
|
9
|
+
## 0.10.3 Project Persistence Recipe
|
|
10
|
+
|
|
11
|
+
Measured 2026-08-22 on macOS arm64 with Node 25.6.1 and Chrome
|
|
12
|
+
151.0.7922.172. `RUNS=21 npm run benchmark:project-navigation` uses fresh Chrome
|
|
13
|
+
profiles and exact extensionless application routes. Every accepted sample
|
|
14
|
+
updates workspace state, verifies layout identity and persisted state, then
|
|
15
|
+
measures list-to-detail completion.
|
|
16
|
+
|
|
17
|
+
The 0.10.2 release baseline and 0.10.3 candidate were measured with the same
|
|
18
|
+
21-profile timing protocol and host; the candidate additionally verifies its
|
|
19
|
+
persistence write before timing:
|
|
20
|
+
|
|
21
|
+
| Revision | Session JS raw/gzip | Navigation median | Min/max |
|
|
22
|
+
|---|---:|---:|---:|
|
|
23
|
+
| `0.10.2` | 46,418 / 17,045 B | 1.9 ms | 1.3 / 5.5 ms |
|
|
24
|
+
| `0.10.3` candidate | 53,562 / 20,323 B | 1.5 ms | 1.3 / 5.6 ms |
|
|
25
|
+
|
|
26
|
+
Baseline samples:
|
|
27
|
+
`[1.3, 1.8, 1.6, 1.9, 1.3, 1.3, 1.9, 5.1, 1.7, 1.4, 1.9, 5.0, 4.7, 1.9, 1.7, 5.5, 2.2, 1.7, 1.5, 2.0, 5.2]`.
|
|
28
|
+
|
|
29
|
+
Candidate samples:
|
|
30
|
+
`[2.6, 1.5, 1.8, 1.3, 1.5, 1.4, 1.7, 1.3, 1.5, 1.5, 1.9, 1.7, 1.6, 5.6, 1.5, 1.6, 1.5, 1.5, 1.5, 1.5, 1.6]`.
|
|
31
|
+
|
|
32
|
+
The +7,144 raw / +3,278 aggregate gzip bytes are the measured cost of two
|
|
33
|
+
authored layout effects, their route-owned entries, and one native clear
|
|
34
|
+
handler. The median changes from 1.9 to 1.5 ms with overlapping ranges, so no
|
|
35
|
+
latency improvement or regression is claimed. No compiler or browser-runtime
|
|
36
|
+
source changed. `/help` remains 0 B JavaScript, so unused routes pay no
|
|
37
|
+
persistence cost.
|
|
38
|
+
|
|
39
|
+
## 0.10.2 Project Shared-Layout Navigation
|
|
40
|
+
|
|
41
|
+
Measured 2026-08-22 on macOS arm64 with Node 25.6.1 and Chrome
|
|
42
|
+
151.0.7922.172. `npm run benchmark:project-navigation` builds the tracked
|
|
43
|
+
project application, updates the layout-owned workspace state, and measures
|
|
44
|
+
list-to-detail completion across seven fresh Chrome profiles. Every accepted
|
|
45
|
+
sample verifies retained layout identity and the shared workspace value before
|
|
46
|
+
reporting timing.
|
|
47
|
+
|
|
48
|
+
The two-route session uses 10 unique JavaScript files totaling 46,418 raw /
|
|
49
|
+
17,045 aggregate gzip bytes. Navigation samples are
|
|
50
|
+
`[2.3, 6.5, 1.4, 1.3, 5.1, 1.3, 4.0]` ms, with a 2.3 ms median and 1.3/6.5 ms
|
|
51
|
+
minimum/maximum. Both routes use the existing shared runtime family;
|
|
52
|
+
`workspace` has layout lifetime while summary, collection, filter, conditional,
|
|
53
|
+
saved-filter, row, and detail-draft states retain route lifetime. No compiler or
|
|
54
|
+
browser runtime source changed, so no revision-to-revision performance claim is
|
|
55
|
+
made.
|
|
56
|
+
|
|
9
57
|
## 0.10.1 Project State Scale
|
|
10
58
|
|
|
11
59
|
Measured 2026-08-22 on macOS arm64 with Node 25.6.1 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.10.x`: the compiler API and supported TSX surface may change.
|
|
16
16
|
|
|
17
|
-
**Latest release: 0.10.
|
|
17
|
+
**Latest release: 0.10.3 - Application-owned persistence.** The tracked project application now restores and writes a versioned workspace record, falls back safely from invalid storage, clears state on logout, and keeps static routes free of persistence code. Read the [release notes](./RELEASES.md#0103---application-owned-persistence), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.10.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,103 @@
|
|
|
1
1
|
# Kudzu Releases
|
|
2
2
|
|
|
3
|
+
## 0.10.3 - Application-Owned Persistence
|
|
4
|
+
|
|
5
|
+
Kudzu 0.10.3 proves guarded browser persistence as application code composed
|
|
6
|
+
from ordinary state, effects, and native Web Storage.
|
|
7
|
+
|
|
8
|
+
### Changed in 0.10.3
|
|
9
|
+
|
|
10
|
+
- Added a versioned workspace restore recipe with deterministic static fallback
|
|
11
|
+
and exact value/schema/version validation.
|
|
12
|
+
- Added a readiness guard so dependency persistence cannot overwrite storage
|
|
13
|
+
before mount restoration completes.
|
|
14
|
+
- Added application-owned logout clearing and visible state reset in one native
|
|
15
|
+
handler.
|
|
16
|
+
- Added required-Chrome cases for valid, absent, malformed, wrong-schema, and
|
|
17
|
+
wrong-version records, persistence writes, and logout removal.
|
|
18
|
+
- Updated `create-kudzu@0.1.107` to generate projects on
|
|
19
|
+
`@kudzujs/core@^0.10.3`.
|
|
20
|
+
|
|
21
|
+
### Output Evidence
|
|
22
|
+
|
|
23
|
+
- The application fixture emits 19 files, 65,376 raw / 23,471 aggregate gzip
|
|
24
|
+
bytes, and deploy digest
|
|
25
|
+
`bb58826876bdf090a85d2c1f8a1edcbbc9abd35d5335eb3d1e7fb1fafe6bed72`.
|
|
26
|
+
- The list/detail session uses 15 unique JavaScript files totaling 53,562 raw /
|
|
27
|
+
20,323 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
28
|
+
- Matched 21-profile navigation medians are 1.9 ms for 0.10.2 and 1.5 ms for
|
|
29
|
+
0.10.3 with overlapping ranges, so no latency change is claimed.
|
|
30
|
+
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
31
|
+
concept, persistence API, store, or storage runtime was added.
|
|
32
|
+
|
|
33
|
+
### Validation
|
|
34
|
+
|
|
35
|
+
- Required Chrome proves restore, fallback, write, clear, conditional/keyed
|
|
36
|
+
release and fresh remount, route draft reset, and fresh direct documents.
|
|
37
|
+
- The full suite, package smoke, registry metadata, and fresh installation are
|
|
38
|
+
release gates.
|
|
39
|
+
|
|
40
|
+
### Limits
|
|
41
|
+
|
|
42
|
+
Schema migration chains, expiry, encryption, cross-tab storage events, and
|
|
43
|
+
server synchronization remain application concerns or later evidence packets.
|
|
44
|
+
|
|
45
|
+
### Upgrade
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
npm install @kudzujs/core@^0.10.3
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 0.10.2 - Shared-layout navigation
|
|
52
|
+
|
|
53
|
+
Kudzu 0.10.2 extends the tracked project-management application with explicit
|
|
54
|
+
list/detail navigation, layout-owned workspace state, and route-owned drafts
|
|
55
|
+
using the existing navigation and shared-state semantics.
|
|
56
|
+
|
|
57
|
+
### Changed in 0.10.2
|
|
58
|
+
|
|
59
|
+
- Added one Context-backed application layout that lowers through existing
|
|
60
|
+
`SharedStateIR` and persists workspace selection across list/detail routes.
|
|
61
|
+
- Added an exact Alpha detail route whose draft state releases on navigation and
|
|
62
|
+
initializes fresh on revisit and direct document load.
|
|
63
|
+
- Added a maintained seven-profile list-to-detail navigation benchmark with
|
|
64
|
+
session JavaScript and lifetime metadata.
|
|
65
|
+
- Kept `/help` and `/login` outside the navigation group; `/help` remains a
|
|
66
|
+
complete zero-JavaScript native-navigation target.
|
|
67
|
+
- Updated `create-kudzu@0.1.106` to generate projects on
|
|
68
|
+
`@kudzujs/core@^0.10.2`.
|
|
69
|
+
|
|
70
|
+
### Output Evidence
|
|
71
|
+
|
|
72
|
+
- The application fixture emits 14 files, 57,293 raw / 19,985 aggregate gzip
|
|
73
|
+
bytes, and deploy digest
|
|
74
|
+
`1c867ee7119f7eb23b935c4506c2a46639acb75c13f0916b29c255421b0d123d`.
|
|
75
|
+
- The list/detail session uses 10 unique JavaScript files totaling 46,418 raw /
|
|
76
|
+
17,045 aggregate gzip bytes; `/help` remains 0 B JavaScript.
|
|
77
|
+
- Seven fresh Chrome profiles record list-to-detail completion at a 2.3 ms
|
|
78
|
+
median, with 1.3/6.5 ms minimum/maximum.
|
|
79
|
+
- No semantic primitive, compiler pass, production compiler line, runtime
|
|
80
|
+
concept, store, or SPA router was added.
|
|
81
|
+
|
|
82
|
+
### Validation
|
|
83
|
+
|
|
84
|
+
- Required Chrome proves layout identity and workspace persistence in both
|
|
85
|
+
directions, route DOM release, fresh draft state, and direct-load reset.
|
|
86
|
+
- The full suite, required-Chrome application journey, package smoke, registry
|
|
87
|
+
metadata, and fresh installation are release gates.
|
|
88
|
+
|
|
89
|
+
### Limits
|
|
90
|
+
|
|
91
|
+
Navigation remains explicit and group-scoped with complete-document fallback.
|
|
92
|
+
This release does not add a universal SPA router, persistence, authentication,
|
|
93
|
+
server data, or cross-group shared state.
|
|
94
|
+
|
|
95
|
+
### Upgrade
|
|
96
|
+
|
|
97
|
+
```sh
|
|
98
|
+
npm install @kudzujs/core@^0.10.2
|
|
99
|
+
```
|
|
100
|
+
|
|
3
101
|
## 0.10.1 - Application state scale
|
|
4
102
|
|
|
5
103
|
Kudzu 0.10.1 extends the tracked project-management journey across ordinary
|
|
@@ -185,6 +185,9 @@ deploy output under `v0.10.0` and the candidate. Seven fresh Chrome processes
|
|
|
185
185
|
record commit medians of 0.5/0.6/0.9 ms as the derived binding dependency edges
|
|
186
186
|
increase from 0 to 8 to 32. Runtime JavaScript is 768/10,935/11,341 raw bytes
|
|
187
187
|
and 441/4,789/4,841 aggregate gzip bytes. No material regression is present.
|
|
188
|
+
Release commit `f04041b`, tag `v0.10.1`, both CI jobs, the GitHub release,
|
|
189
|
+
`@kudzujs/core@0.10.1`, `create-kudzu@0.1.105`, registry metadata, and a fresh
|
|
190
|
+
scaffold install/check are verified.
|
|
188
191
|
|
|
189
192
|
### `0.10.2`: Shared Layout And Cross-Route State
|
|
190
193
|
|
|
@@ -200,6 +203,32 @@ and 441/4,789/4,841 aggregate gzip bytes. No material regression is present.
|
|
|
200
203
|
- **Done condition:** state lifetime and disposal are exact in browser tests and
|
|
201
204
|
static routes receive no shared-state runtime.
|
|
202
205
|
|
|
206
|
+
**Completion evidence:** the greenfield application adds one exact Alpha detail
|
|
207
|
+
route and one explicit navigation group around list/detail routes. A relative
|
|
208
|
+
Context hook lowers through the existing `SharedStateIR`: both routes own the
|
|
209
|
+
same `workspace` layout state while list state and the detail `draft` remain
|
|
210
|
+
route-owned. Required Chrome proves retained layout DOM identity, workspace
|
|
211
|
+
persistence in both directions, detail DOM release, fresh draft state on
|
|
212
|
+
re-entry, and initial layout/draft values in a fresh document. `/help` remains
|
|
213
|
+
outside the group, retains its native anchor path, and emits complete HTML with
|
|
214
|
+
0 B JavaScript.
|
|
215
|
+
|
|
216
|
+
This packet adds no semantic primitive, ModuleIR kind, compiler pass, production
|
|
217
|
+
compiler LOC, runtime concept, normalization rule, adapter rule, store, or SPA
|
|
218
|
+
router. It adds one application layout/context module, one route, one config,
|
|
219
|
+
and one positive browser journey; existing navigation-group diagnostics retain
|
|
220
|
+
the nearby rejected configuration boundary. The fixture emits 14 files, 57,293
|
|
221
|
+
raw / 19,985 aggregate gzip bytes, with deploy SHA-256
|
|
222
|
+
`1c867ee7119f7eb23b935c4506c2a46639acb75c13f0916b29c255421b0d123d`.
|
|
223
|
+
The list/detail session uses 10 unique JavaScript files totaling 46,418 raw /
|
|
224
|
+
17,045 aggregate gzip bytes. Seven fresh Chrome profiles record list-to-detail
|
|
225
|
+
completion at `[2.3, 6.5, 1.4, 1.3, 5.1, 1.3, 4.0]` ms, median 2.3 ms.
|
|
226
|
+
|
|
227
|
+
Release commit `76a45c4`, tag `v0.10.2`, both CI jobs, the GitHub release,
|
|
228
|
+
`@kudzujs/core@0.10.2`, `create-kudzu@0.1.106`, registry metadata, and a fresh
|
|
229
|
+
registry-backed scaffold install/check passed on 2026-08-22. Publish workflow
|
|
230
|
+
`32566976581` completed every version, package, publication, and registry gate.
|
|
231
|
+
|
|
203
232
|
### `0.10.3`: Persistence Recipe And State Release
|
|
204
233
|
|
|
205
234
|
- **Purpose:** prove URL, storage, and server-backed persistence without adding a
|
|
@@ -212,6 +241,35 @@ and 441/4,789/4,841 aggregate gzip bytes. No material regression is present.
|
|
|
212
241
|
- **Done condition:** deterministic static fallback and browser recovery pass
|
|
213
242
|
with no storage runtime in unused routes.
|
|
214
243
|
|
|
244
|
+
**Completion evidence:** the greenfield application layout now owns one guarded
|
|
245
|
+
`localStorage` recipe composed entirely from ordinary state and two existing
|
|
246
|
+
effects. Static HTML starts with `Primary`; a mount effect accepts only version
|
|
247
|
+
1 records whose workspace is `Primary` or `Secondary`, while absent, malformed,
|
|
248
|
+
wrong-schema, and wrong-version records fall back safely. A readiness state
|
|
249
|
+
prevents the dependency effect from overwriting storage before restore.
|
|
250
|
+
Workspace changes write the versioned record, and logout disables persistence,
|
|
251
|
+
removes the record, and resets visible state in one synchronous handler.
|
|
252
|
+
|
|
253
|
+
Required Chrome proves valid restore, every fallback, post-commit persistence,
|
|
254
|
+
logout removal, conditional and keyed release/fresh remount, route draft
|
|
255
|
+
release/fresh revisit, and a fresh direct document. `/help` remains outside the
|
|
256
|
+
navigation group with complete HTML and 0 B JavaScript. The fixture emits 19
|
|
257
|
+
files, 65,376 raw / 23,471 aggregate gzip bytes, with deploy SHA-256
|
|
258
|
+
`bb58826876bdf090a85d2c1f8a1edcbbc9abd35d5335eb3d1e7fb1fafe6bed72`.
|
|
259
|
+
The two-route session uses 15 unique JavaScript files totaling 53,562 raw /
|
|
260
|
+
20,323 aggregate gzip bytes.
|
|
261
|
+
|
|
262
|
+
This packet adds zero semantic primitives, ModuleIR kinds, compiler passes,
|
|
263
|
+
production compiler lines, runtime concepts, normalization rules, adapter
|
|
264
|
+
rules, public APIs, stores, or persistence runtimes. One existing positive
|
|
265
|
+
application fixture gains valid, absent, malformed, wrong-schema, wrong-version,
|
|
266
|
+
write, and clear browser cases. A matched 21-profile measurement records the
|
|
267
|
+
authored capability cost: the 0.10.2 list/detail median of 1.9 ms and 46,418 raw /
|
|
268
|
+
17,045 gzip session JavaScript becomes 1.5 ms and 53,562 / 20,323 bytes. The
|
|
269
|
+
timing ranges overlap with no material loss; the 7,144 raw / 3,278 gzip byte
|
|
270
|
+
increase is the explicit cost of route-owned effect/native entries, not a
|
|
271
|
+
compiler or shared-runtime change.
|
|
272
|
+
|
|
215
273
|
## `0.11.x`: Async And Server Data
|
|
216
274
|
|
|
217
275
|
### `0.11.0`: Owned Fetch Lifecycle
|
|
@@ -857,5 +915,7 @@ release transaction where possible or document and publish a forward-fix patch.
|
|
|
857
915
|
| Patch | Status | Next exact action | Blocker |
|
|
858
916
|
|---|---|---|---|
|
|
859
917
|
| `0.10.0` | Released | Preserve the published application baseline and release evidence. | None |
|
|
860
|
-
| `0.10.1` |
|
|
861
|
-
| `0.10.2`
|
|
918
|
+
| `0.10.1` | Released | Preserve the published state-scale evidence and explicit object-field limit. | None |
|
|
919
|
+
| `0.10.2` | Released | Preserve the published shared-layout navigation and exact route-release evidence. | None |
|
|
920
|
+
| `0.10.3` | Active | Add the guarded application-owned persistence and state-release journey. | None |
|
|
921
|
+
| `0.11.0` onward | Blocked | Wait for the preceding patch acceptance and release record. | Ordered dependency |
|
|
@@ -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.107` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.10.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.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"description": "HTML-first TSX framework with synchronous state semantics and no virtual DOM",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
"benchmark:commerce": "node test/commerce-build-performance.mjs",
|
|
61
61
|
"benchmark:module-cache": "node test/module-cache-performance.mjs",
|
|
62
62
|
"benchmark:native": "node test/native-performance.mjs",
|
|
63
|
+
"benchmark:project-navigation": "node test/project-navigation-performance.mjs",
|
|
63
64
|
"benchmark:project-state": "node test/project-state-performance.mjs",
|
|
64
65
|
"benchmark:source-scale": "node test/source-scale-performance.mjs",
|
|
65
66
|
"prepublishOnly": "npm run check && npm test",
|