@kudzujs/core 0.16.3 → 0.16.4
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/MIGRATION_ROADMAP.md +1 -1
- package/PERFORMANCE.md +14 -0
- package/README.md +1 -1
- package/RELEASES.md +39 -0
- package/docs/next-architecture/README.md +1 -1
- package/docs/next-architecture/application-capability-release-plan.md +27 -1
- package/docs/next-architecture/compiler-current-architecture.md +1 -1
- package/docs/next-architecture/large-application-ai-native-roadmap.md +3 -3
- package/docs/next-architecture/versioning.md +2 -2
- package/framework/compiler/source-compiler.mjs +9 -11
- package/package.json +2 -1
package/MIGRATION_ROADMAP.md
CHANGED
|
@@ -51,7 +51,7 @@ Syntax compatibility does not mean reproducing React wholesale. Kudzu accepts th
|
|
|
51
51
|
- stronger JavaScript failure resilience;
|
|
52
52
|
- no remaining material large-route build-scaling weakness.
|
|
53
53
|
|
|
54
|
-
The completed 0.9 plan defines the cross-framework comparison and release gate. The active application packet is `0.
|
|
54
|
+
The completed 0.9 plan defines the cross-framework comparison and release gate. The active application packet is `0.17.0` in the capability release plan below. Benchmark-only feature omission, unmatched accessibility, weighted scores that hide losses, and unrecorded environment differences do not count as proof.
|
|
55
55
|
|
|
56
56
|
### 0.10.0 Through 0.21.x: Application Capability Release Train
|
|
57
57
|
|
package/PERFORMANCE.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
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.16.4 Scoped GSAP Animation Lifecycle
|
|
6
|
+
|
|
7
|
+
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. The real GSAP
|
|
8
|
+
fixture emits 8 JavaScript files totaling 94,110 raw / 37,819 aggregate gzip
|
|
9
|
+
bytes, while its static sibling emits zero JavaScript. Required Chrome proves
|
|
10
|
+
scoped presentation, native reduced-motion fallback, dependency replacement,
|
|
11
|
+
conditional and enhanced-route disposal, retained structure, and fresh remount.
|
|
12
|
+
|
|
13
|
+
The maintained Worker benchmark remains byte-identical at 907 raw / 477 gzip B
|
|
14
|
+
for the Worker graph and 14,456 raw / 6,159 gzip B for the window graph. Seven
|
|
15
|
+
clean builds record a 625.9 ms median on this host. Timing is not compared with
|
|
16
|
+
the prior sweep. The change adds no runtime file or animation abstraction; one
|
|
17
|
+
existing package-reference ancestry helper shrinks by two lines.
|
|
18
|
+
|
|
5
19
|
## 0.16.3 State-Owned Drag And Drop
|
|
6
20
|
|
|
7
21
|
Measured 2026-08-28 on Linux x64 with Node 24.14.0 and Chrome. The real
|
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.16.x`: the compiler API and supported TSX surface may change.
|
|
16
16
|
|
|
17
|
-
**Latest release: 0.16.
|
|
17
|
+
**Latest release: 0.16.4 - Scoped GSAP animation lifecycle.** Inline GSAP callbacks stay inside one owned effect while Kudzu retains structural DOM, native reduced-motion fallback, dependency replacement, disposal, and static exclusion. Read the [release notes](./RELEASES.md#0164---scoped-gsap-animation-lifecycle), open the [release page](https://github.com/kudzujs/kudzu/releases/tag/v0.16.4), 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,44 @@
|
|
|
1
1
|
# Kudzu Releases
|
|
2
2
|
|
|
3
|
+
## 0.16.4 - Scoped GSAP Animation Lifecycle
|
|
4
|
+
|
|
5
|
+
Kudzu 0.16.4 lets inline GSAP callbacks remain inside one owned effect while
|
|
6
|
+
Kudzu retains structural DOM and exact route, conditional, and dependency
|
|
7
|
+
lifetime ownership.
|
|
8
|
+
|
|
9
|
+
### Changed in 0.16.4
|
|
10
|
+
|
|
11
|
+
- Accepts package references inside an unbroken chain of inline callbacks passed
|
|
12
|
+
directly within an owned effect setup or cleanup.
|
|
13
|
+
- Keeps named, local, imported, render-time, and mixed package indirection
|
|
14
|
+
unsupported.
|
|
15
|
+
- Preserves deterministic visible HTML before GSAP applies bounded opacity and
|
|
16
|
+
transform presentation.
|
|
17
|
+
- Uses native `prefers-reduced-motion` detection for a static presentation with
|
|
18
|
+
no residual inline opacity, transform, or visibility.
|
|
19
|
+
- Reverts the previous GSAP context before dependency replacement and on
|
|
20
|
+
conditional or enhanced-route disposal; remount creates a fresh owner.
|
|
21
|
+
- Adds no animation IR, scheduler, runtime concept, React, VDOM, hydration, or
|
|
22
|
+
retained component tree.
|
|
23
|
+
- Updates `create-kudzu@0.1.129` to generate projects on
|
|
24
|
+
`@kudzujs/core@^0.16.4`.
|
|
25
|
+
|
|
26
|
+
### Output And Browser Evidence
|
|
27
|
+
|
|
28
|
+
- The GSAP fixture emits 8 JavaScript files totaling 94,110 raw / 37,819
|
|
29
|
+
aggregate gzip bytes; its static sibling emits zero JavaScript.
|
|
30
|
+
- Required Chrome proves scoped mount, dependency replacement, reduced-motion
|
|
31
|
+
fallback, conditional and route disposal, retained structure, and fresh
|
|
32
|
+
remount.
|
|
33
|
+
- The maintained Worker and window graphs remain 907 raw / 477 gzip bytes and
|
|
34
|
+
14,456 raw / 6,159 gzip bytes respectively.
|
|
35
|
+
|
|
36
|
+
### Upgrade
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
npm install @kudzujs/core@^0.16.4
|
|
40
|
+
```
|
|
41
|
+
|
|
3
42
|
## 0.16.3 - State-Owned Drag And Drop
|
|
4
43
|
|
|
5
44
|
Kudzu 0.16.3 proves that a real SortableJS drag engine can remain a bounded
|
|
@@ -15,7 +15,7 @@ The completed `0.9.0` milestone is recorded in [`0.9-semantic-compression.md`](.
|
|
|
15
15
|
|
|
16
16
|
[`1.0-large-application-compatibility-audit.md`](./1.0-large-application-compatibility-audit.md) records the first post-0.9 probes against Memos, Apache Answer, and Actual Budget. The audit finds that reduced slices build but whole-application source retention and behavior parity do not yet pass.
|
|
17
17
|
|
|
18
|
-
[`application-capability-release-plan.md`](./application-capability-release-plan.md) is the authoritative post-0.9 execution queue, currently at `0.
|
|
18
|
+
[`application-capability-release-plan.md`](./application-capability-release-plan.md) is the authoritative post-0.9 execution queue, currently at `0.17.0`. It assigns one application-capability section to each minor release and one independently accepted evidence packet to each patch release from `0.10.0` through the `1.0.0` gate. It supersedes the provisional 0.10/0.11/0.12 tool-first ordering in the completed 0.9 handoff without rewriting that historical record.
|
|
19
19
|
|
|
20
20
|
## Required Invariants
|
|
21
21
|
|
|
@@ -1277,6 +1277,31 @@ differs from the published baseline.
|
|
|
1277
1277
|
- **Done condition:** GSAP owns only bounded presentation changes and exact
|
|
1278
1278
|
cleanup while Kudzu retains document structure and lifetime ownership.
|
|
1279
1279
|
|
|
1280
|
+
**Result:** complete. A reduction of the MIT-licensed
|
|
1281
|
+
Magic Modal landing page at revision
|
|
1282
|
+
`ab3df864de5b01d604d26345165ea5f7900eae14` reproduced one compiler failure:
|
|
1283
|
+
GSAP's root-scoped `context()` receives an inline callback whose direct package
|
|
1284
|
+
calls were rejected because package-reference validation stopped at the nearest
|
|
1285
|
+
function. The existing ancestry check now accepts only an unbroken chain of
|
|
1286
|
+
inline call arguments back to the owned effect; named, local, and imported helper
|
|
1287
|
+
indirection remains rejected. Required Chrome proves deterministic visible HTML,
|
|
1288
|
+
root-scoped presentation, native reduced-motion fallback without residual inline
|
|
1289
|
+
opacity/transform, dependency replacement with retained DOM identity,
|
|
1290
|
+
conditional and enhanced-route disposal, and fresh remount. GSAP owns only
|
|
1291
|
+
bounded opacity and transform changes; Kudzu retains structural DOM and lifetime
|
|
1292
|
+
ownership. The interactive graph is 94,110 raw / 37,819 aggregate gzip bytes
|
|
1293
|
+
across eight JavaScript files; the static sibling emits zero. Its normalized
|
|
1294
|
+
deploy archive SHA-256 is
|
|
1295
|
+
`2b6467f04452c51878ea81d5e80db21c60286e191e1e49ac482556dbf7c713c3`.
|
|
1296
|
+
Semantic primitives, IR kinds, compiler passes, normalization rules, runtime
|
|
1297
|
+
concepts, runtime files, animation abstractions, schedulers, and public APIs
|
|
1298
|
+
change by zero; one existing compiler ancestry helper shrinks by two LOC. One
|
|
1299
|
+
positive fixture and one two-scenario browser contract were added. The maintained
|
|
1300
|
+
Worker/effect benchmark remains 907 raw / 477 gzip bytes for the Worker graph and
|
|
1301
|
+
14,456 raw / 6,159 gzip bytes for the window graph; its seven-run Linux median was
|
|
1302
|
+
625.9 ms, recorded without a timing comparison because the host differs from the
|
|
1303
|
+
published baseline.
|
|
1304
|
+
|
|
1280
1305
|
## `0.17.x`: Long-Lived Applications
|
|
1281
1306
|
|
|
1282
1307
|
### `0.17.0`: Endurance Harness
|
|
@@ -1653,4 +1678,5 @@ release transaction where possible or document and publish a forward-fix patch.
|
|
|
1653
1678
|
| `0.16.1` | Released | Preserve the retained CodeMirror instance boundary, bidirectional updates, error recovery, accessibility, and exact cleanup. | None |
|
|
1654
1679
|
| `0.16.2` | Closed by existing effect ownership | Preserve retained Chart.js data/resize updates, listener and route cleanup, fresh remount, accessibility, and static exclusion. | No production change; no release consumed |
|
|
1655
1680
|
| `0.16.3` | Released | Preserve state-owned order, keyed identity, keyboard parity, invalid-input recovery, package disposal, and static exclusion. | None |
|
|
1656
|
-
| `0.16.4` |
|
|
1681
|
+
| `0.16.4` | Released | Preserve scoped GSAP presentation, reduced-motion fallback, dependency/owner cleanup, fresh remount, and static exclusion. | None |
|
|
1682
|
+
| `0.17.0` | Active | Establish the long-session endurance harness and machine-readable ownership counters. | None |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Current Compiler Architecture
|
|
2
2
|
|
|
3
|
-
This maps the current `0.16.
|
|
3
|
+
This maps the current `0.16.4` architecture, built on the completed `0.9.0` semantic-compression release and `0.8.23` Goal A compiler foundation. The active application packet is `0.17.0`; file and function names are the stable references, while line numbers are intentionally omitted because later work may still move code.
|
|
4
4
|
|
|
5
5
|
## Responsibility Map
|
|
6
6
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
4
|
|
|
5
|
-
Completed compiler-foundation record and longer-term plan after `0.8.35`. The [`0.9-semantic-compression.md`](./0.9-semantic-compression.md) execution queue is complete. The active queue for current work is [`application-capability-release-plan.md`](./application-capability-release-plan.md) at packet `0.
|
|
5
|
+
Completed compiler-foundation record and longer-term plan after `0.8.35`. The [`0.9-semantic-compression.md`](./0.9-semantic-compression.md) execution queue is complete. The active queue for current work is [`application-capability-release-plan.md`](./application-capability-release-plan.md) at packet `0.17.0`. This document does not mark any remaining planned capability as supported and does not authorize a React runtime, VDOM, hydration, retained browser component tree, generic rerenderer, public store/query/resource API, SPA router, or islands.
|
|
6
6
|
|
|
7
|
-
[`MIGRATION_ROADMAP.md`](../../MIGRATION_ROADMAP.md) remains the product authority for product invariants and fixture-driven feature selection. [`application-capability-release-plan.md`](./application-capability-release-plan.md) is authoritative for current work order and evidence at packet `0.
|
|
7
|
+
[`MIGRATION_ROADMAP.md`](../../MIGRATION_ROADMAP.md) remains the product authority for product invariants and fixture-driven feature selection. [`application-capability-release-plan.md`](./application-capability-release-plan.md) is authoritative for current work order and evidence at packet `0.17.0`; this plan retains the completed foundation, deferred program, and long-term production gates. If implementation evidence changes either boundary, update the relevant document before broadening a patch.
|
|
8
8
|
|
|
9
9
|
## Product Outcome
|
|
10
10
|
|
|
@@ -483,4 +483,4 @@ The first comparison is Kudzu versus React + Vite using the same agent, model, t
|
|
|
483
483
|
|
|
484
484
|
## Immediate Decision
|
|
485
485
|
|
|
486
|
-
All listed foundation and `0.9` slices are complete. Current work continues at `0.
|
|
486
|
+
All listed foundation and `0.9` slices are complete. Current work continues at `0.17.0` Endurance Harness under the [`application-capability-release-plan.md`](./application-capability-release-plan.md); keep ResourceIR limited to qualifying independent fixtures, and do not add range ownership, virtualization, optimistic transactions, a public adapter/store API, or a router before evidence justifies them.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Planned Version Sequence
|
|
2
2
|
|
|
3
|
-
This is an execution sequence, not release history. `0.8.16` through `0.8.62` are completed scopes represented by package/release records. The `0.10.0` through `1.0.0` minor/patch sequence is maintained in [`application-capability-release-plan.md`](./application-capability-release-plan.md), currently at `0.
|
|
3
|
+
This is an execution sequence, not release history. `0.8.16` through `0.8.62` are completed scopes represented by package/release records. The `0.10.0` through `1.0.0` minor/patch sequence is maintained in [`application-capability-release-plan.md`](./application-capability-release-plan.md), currently at `0.17.0`; that plan supersedes the provisional tool-first 0.10/0.11/0.12 ordering in the completed 0.9 handoff.
|
|
4
4
|
|
|
5
5
|
Keep each patch behavior-preserving and independently reviewable. If a boundary proves inseparable, revise this plan before combining releases; do not silently broaden a patch.
|
|
6
6
|
|
|
@@ -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.129` retains the explicit install instructions and generates projects with `@kudzujs/core@^0.16.4`.
|
|
70
70
|
|
|
71
71
|
## Release Boundary
|
|
72
72
|
|
|
@@ -2630,19 +2630,17 @@ function insideJsxEventHandler(node, root) {
|
|
|
2630
2630
|
}
|
|
2631
2631
|
|
|
2632
2632
|
function insideOwnedEffectCallback(node, root) {
|
|
2633
|
-
let callback
|
|
2634
2633
|
for (let current = node.parent; current && current !== root.parent; current = current.parent) {
|
|
2635
2634
|
if (!isFunctionLike(current)) continue
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
if (!
|
|
2645
|
-
return ts.isCallExpression(current.parent) && current.parent.arguments[0] === current && ts.isIdentifier(current.parent.expression) && current.parent.expression.text === "useEffect"
|
|
2635
|
+
if (ts.isCallExpression(current.parent) && current.parent.arguments[0] === current && ts.isIdentifier(current.parent.expression) && current.parent.expression.text === "useEffect") return true
|
|
2636
|
+
if (ts.isReturnStatement(current.parent)) {
|
|
2637
|
+
for (let owner = current.parent.parent; owner && owner !== root.parent; owner = owner.parent) {
|
|
2638
|
+
if (!isFunctionLike(owner)) continue
|
|
2639
|
+
return ts.isCallExpression(owner.parent) && owner.parent.arguments[0] === owner && ts.isIdentifier(owner.parent.expression) && owner.parent.expression.text === "useEffect"
|
|
2640
|
+
}
|
|
2641
|
+
return false
|
|
2642
|
+
}
|
|
2643
|
+
if (!ts.isCallExpression(current.parent) || !current.parent.arguments.includes(current)) return false
|
|
2646
2644
|
}
|
|
2647
2645
|
return false
|
|
2648
2646
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kudzujs/core",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.4",
|
|
4
4
|
"description": "HTML-first TSX framework with synchronous state semantics and no virtual DOM",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
"@codemirror/view": "^6.43.9",
|
|
77
77
|
"@types/sortablejs": "^1.15.9",
|
|
78
78
|
"chart.js": "^3.8.2",
|
|
79
|
+
"gsap": "^3.15.0",
|
|
79
80
|
"sortablejs": "^1.15.7",
|
|
80
81
|
"typed.js": "^3.0.0",
|
|
81
82
|
"wrangler": "^4.112.0"
|