Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1555 commits
Select commit Hold shift + click to select a range
ecfde7c
fix(router-plugin): keep root route options in the root module
Sheraff Oct 26, 2026
d807aad
fix(e2e-utils): space successive writes of one file past the watcher'…
Sheraff Oct 26, 2026
a9d8cf5
fix(start-plugin-core,router-plugin): position loader diagnostics as …
Sheraff Oct 26, 2026
de07630
fix(router-utils): drop a pure function-local class only erased code …
Sheraff Oct 26, 2026
c91fc90
chore(examples): regenerate route trees through the example builds
Sheraff Oct 26, 2026
25888f0
test(router-generator): match the fixture inputs against Vite's forwa…
Sheraff Oct 26, 2026
d8f1373
test(router-plugin): give the imported-options route a dev server of …
Sheraff Oct 26, 2026
01d23f0
Merge Lane M2 (hmr write spacing, (file:line:col) diagnostics, core c…
Sheraff Oct 26, 2026
e965af6
Merge R60 (keep root route options in the root module): t3/keep-root-…
Sheraff Oct 26, 2026
979c40d
Merge Lane CI (Compiler Platforms setup, Windows links, plugin-order …
Sheraff Oct 26, 2026
735b195
fix(start-plugin-core): path-separator-agnostic import-protection tes…
Sheraff Oct 26, 2026
c48101f
test(compiler-test-utils,start-plugin-core): ignore the browser's fav…
Sheraff Oct 26, 2026
6b90fe7
test(router-plugin): give the exported-component split-or-report case…
Sheraff Oct 26, 2026
076c65a
fix(router-plugin): keep route CSS imports in the route module (R63)
Sheraff Oct 26, 2026
9a3b7cd
test(start-plugin-core): pin the route-module CSS rows again (R63)
Sheraff Oct 26, 2026
2a31d35
docs: route CSS loads with the route module, as on main (R63)
Sheraff Oct 26, 2026
8604d60
test(router-plugin): a CSS module import follows the split component …
Sheraff Oct 26, 2026
6e6340a
perf(router-utils): index plans and raw facts by path for invalidation
Sheraff Oct 26, 2026
c271282
fix(start-plugin-core,vue-start): dev cold start hydrates without a s…
Sheraff Oct 26, 2026
4e64540
Merge Lane P2 (plan/raw-facts cache path index, Vue Start dev cold st…
Sheraff Oct 26, 2026
d3b5610
Merge R63 (route CSS stays in the route module, as on main): t3/rever…
Sheraff Oct 26, 2026
d0cb0e3
test(router-plugin): a type annotation naming the split component doe…
Sheraff Oct 26, 2026
f458f58
fix(start-plugin-core,router-plugin): release a finished environment'…
Sheraff Oct 26, 2026
fdc4825
chore: changeset for releasing finished environments' compiler state
Sheraff Oct 26, 2026
b46944e
perf(router-plugin,start-plugin-core): an unchanged route registry no…
Sheraff Oct 26, 2026
21ff64c
Merge HMR scaling (an unchanged route registry notifies no subscriber…
Sheraff Oct 26, 2026
76ddec2
style(start-plugin-core): format environment release test
Sheraff Oct 26, 2026
e43c275
test(router-plugin): expect the registry's posix-form route paths (Wi…
Sheraff Oct 26, 2026
5ff36a1
test(start-plugin-core): a fresh host page run opens a new page inste…
Sheraff Oct 26, 2026
a0f49b4
test(router-plugin): import the registry publication test's plugin fr…
Sheraff Oct 26, 2026
87df400
test(start-plugin-core): measure the environment release in a process…
Sheraff Oct 26, 2026
8973f6d
test(router-plugin): every effectful declaration only the split compo…
Sheraff Oct 26, 2026
4747c62
fix(router-utils): a later effect moving to the same chunk does not p…
Sheraff Oct 26, 2026
748abef
test: effect order of effectful declarations moving with a split comp…
Sheraff Oct 26, 2026
9f1abe6
fix(router-utils): decide extracted exports over the final env module
Sheraff Oct 27, 2026
b6f7617
fix(router-utils): keep the `;` a statement starting with `(` relies on
Sheraff Oct 27, 2026
8d3eb88
fix(router-utils): clean a chain of orphaned local declarations of an…
Sheraff Oct 27, 2026
b12dcc5
test(router-plugin): a page-only effectful declaration moves even whe…
Sheraff Oct 27, 2026
3710b36
fix(router-utils): move an effectful declaration whose import code th…
Sheraff Oct 27, 2026
552cad5
test: effect order of effectful clusters moving with a split componen…
Sheraff Oct 27, 2026
d5a1326
test(start-plugin-core): a server fn handler's server-only imports lo…
Sheraff Oct 27, 2026
6d29132
feat(start-plugin-core): load server fn handlers on the first call, w…
Sheraff Oct 27, 2026
58e6778
fix(router-utils): move an effectful declaration reading a const the …
Sheraff Oct 27, 2026
eeaab83
test(start-plugin-core): handler modules load on the first call in Vi…
Sheraff Oct 27, 2026
8343838
docs(start-plugin-core): server fn handler modules of the in-place pr…
Sheraff Oct 27, 2026
350e0c8
fix(router-plugin): declare each split importer right before its firs…
Sheraff Oct 27, 2026
eedc638
Merge R66 (lazy server-fn handlers without double run): t3/lazy-serve…
Sheraff Oct 27, 2026
5a18f0b
test(start-plugin-core): a Solid Start route edit that fixes a compon…
Sheraff Oct 27, 2026
6eae7b5
test(start-plugin-core): the Solid Start fix-after-throw edit test wa…
Sheraff Oct 27, 2026
7afd589
fix(router-core): reload on a route update after a router boundary ca…
Sheraff Oct 27, 2026
e2d3a89
fix(router-utils): decide env roots, movable clusters and extraction …
Sheraff Oct 27, 2026
1900346
refactor(router-utils): one owner for claim overrides, fallback looku…
Sheraff Oct 27, 2026
1a9a472
refactor(start-plugin-core): one final-build predicate and one regist…
Sheraff Oct 27, 2026
86bd7d8
docs(router-utils): document the placement fixed point, the dead-pure…
Sheraff Oct 27, 2026
52ffd18
perf(router-utils): keep the consolidated placement and claim rules a…
Sheraff Oct 27, 2026
f622474
Merge consolidation per coherence review (one reach fixed point, core…
Sheraff Oct 27, 2026
13c0a76
test(start-plugin-core): cover nested server fn refusals, id paths, t…
Sheraff Oct 27, 2026
fe1a3cc
test(router-plugin): cover writer fallbacks and namespace-imported ro…
Sheraff Oct 27, 2026
5bfb948
test(router-generator): cover namespace-imported constructors and an …
Sheraff Oct 27, 2026
885e105
fix(router-utils): keep what an extracted export's module would read …
Sheraff Oct 27, 2026
beb3029
refactor: drop compiler code no input can reach
Sheraff Oct 27, 2026
8d7caea
Merge coverage gaps (targeted tests for unreached areas; delete prove…
Sheraff Oct 27, 2026
e86561c
refactor(router-utils): drop OutputBuilder's unused tokenStarts option
Sheraff Oct 27, 2026
5599b21
refactor(start-plugin-core): drop Rsbuild support for a server-fn pro…
Sheraff Oct 27, 2026
c8208bc
refactor(start-plugin-core): keep providerEnvironmentName on the Vite…
Sheraff Oct 27, 2026
1e8c372
style(start-plugin-core): import order
Sheraff Oct 27, 2026
cdabb2e
fix(router-utils): keep imports a route module never read
Sheraff Oct 27, 2026
0bb4250
Merge R73 (keep imports a route module never read): t3/preserve-impor…
Sheraff Oct 27, 2026
92e3b68
fix(router-generator): keep __root.tsx the root route next to a __roo…
Sheraff Oct 27, 2026
3e8957b
fix(router-generator): report files of one module used for two routes
Sheraff Oct 27, 2026
bc924e0
fix(router-generator): only edit the route files the tree imports
Sheraff Oct 27, 2026
6e28afe
refactor(router-utils): one predicate per placement rule
Sheraff Oct 27, 2026
dc3eb69
test(react-start-rsc): a server fn nested in a function only the spli…
Sheraff Oct 27, 2026
46bcd8c
Merge consolidation 2 per second coherence review (one predicate per …
Sheraff Oct 27, 2026
6a4baf9
fix(router-utils): a file that stops parsing keeps its last facts
Sheraff Oct 27, 2026
bc02318
fix(router-plugin, start-plugin-core): hot updates stay in place afte…
Sheraff Oct 27, 2026
4f39cda
fix(router-plugin): refresh id of an extracted component names its mo…
Sheraff Oct 27, 2026
8837185
chore: changeset for the dev HMR fixes
Sheraff Oct 27, 2026
39dc07b
style(router-plugin): import order
Sheraff Oct 27, 2026
62cc7af
fix(router-plugin, start-plugin-core): a file's hot update is of the …
Sheraff Oct 27, 2026
d974344
Merge HMR consistency fuzz fixes: t3/hmr-consistency-fuzzing
Sheraff Oct 27, 2026
d1a79d7
chore(deps): bump @rsbuild/core to 2.2.14 and @rspack/core to 2.2.9
Sheraff Oct 27, 2026
a34b89a
fix(router-utils, router-plugin): hot updates follow the core's extra…
Sheraff Oct 27, 2026
9146f10
Merge R74 (Rsbuild 2.2.14 / Rspack 2.2.9: MultiCompiler stale-done fi…
Sheraff Oct 27, 2026
fdbf5ac
chore(changeset): RSC CSS HMR on Rsbuild needs @rspack/core >= 2.2.9
Sheraff Oct 27, 2026
5a6b1de
refactor(router-utils): one mutation model behind every placement rule
Sheraff Oct 27, 2026
f9ab025
fix(router-utils): re-plan until no new region falls back
Sheraff Oct 27, 2026
ff6eefe
test(router-utils): verify every emitted output against the plan's in…
Sheraff Oct 27, 2026
775f115
perf(router-utils): cheaper benign check and lazy mutable-read cache
Sheraff Oct 27, 2026
cff83b0
Merge remote-tracking branch 'origin/compiler-rewrite/yuku' into t3/c…
Sheraff Oct 27, 2026
96e5e1f
test(router-plugin): unparsed route row uses a grammar error SWC 2.2.…
Sheraff Oct 27, 2026
8f9d9f9
docs(compiler-test-utils): the Rspack HMR new-async-chunk gap is stil…
Sheraff Oct 27, 2026
d03c8c1
perf(router-utils): the mutation model and the eagerness test cost no…
Sheraff Oct 27, 2026
811a1cc
docs(router-plugin): what happens when re-planning does not settle
Sheraff Oct 27, 2026
4065144
perf(router-utils): one reference shape, mutable readers precomputed
Sheraff Oct 27, 2026
ebac639
test(router-utils): an output holds an effect unit by any segment fro…
Sheraff Oct 27, 2026
3bd46fd
Merge structural pass (one mutation model; evaluation-based laziness;…
Sheraff Oct 27, 2026
60196b6
perf(router-utils): placement read caches keyed by output and member,…
Sheraff Oct 27, 2026
ce40af0
perf(router-utils): placement does less bookkeeping
Sheraff Oct 27, 2026
b25984c
feat(router-utils): an exported binding leaves with its augmentations
Sheraff Oct 27, 2026
2dbc6f6
test(router-plugin): a type-only import whose name a split component …
Sheraff Oct 28, 2026
390ca81
fix(router-utils): a type-only import stays type-only next to a value…
Sheraff Oct 28, 2026
0981a86
fix(router-utils): a read synthesised from a name never binds to a ty…
Sheraff Oct 28, 2026
abebb40
fix(router-utils): a destructuring pattern losing every property keep…
Sheraff Oct 28, 2026
8aa18c2
fix(router-utils): an asset is never read as code, and an unchanged m…
Sheraff Oct 28, 2026
af2d6a3
perf(start-plugin-core): compile a dependency only when it uses Start…
Sheraff Oct 28, 2026
9e1c8c1
docs(router-utils): a read synthesised from a name binds only to a ru…
Sheraff Oct 28, 2026
bf92273
Merge Start host dependency filter (one scope rule for both hosts; as…
Sheraff Oct 28, 2026
71084a1
docs(router-utils): keep an inline code span on one line
Sheraff Oct 28, 2026
bc9462c
feat(router-utils): a split chunk copies a pure extracted export inst…
Sheraff Oct 28, 2026
e97a6e0
feat(start-plugin-core): warn after a client build when an extracted …
Sheraff Oct 28, 2026
c60a143
test(router-plugin): exported bindings stay lazy in every bundler and…
Sheraff Oct 28, 2026
d2cbb39
perf(compiler-perf): react-start-deps variant with a large generated …
Sheraff Oct 28, 2026
7c7bdbc
docs(start-plugin-core): changeset note for split exported bindings a…
Sheraff Oct 28, 2026
dae5d4f
docs(router-plugin): why Rolldown < 1.1.5 is not pinned in the export…
Sheraff Oct 28, 2026
064d290
fix(router-utils): a cluster holding a region another output claims i…
Sheraff Oct 28, 2026
a5cdd91
fix(router-generator): a physical() mount of the root route file's di…
Sheraff Oct 28, 2026
5e46d23
fix(solid-router): keep MatchInner's componentKey a const so producti…
Sheraff Oct 28, 2026
021eb40
fix(router-plugin): a split chunk declares an imported option value i…
Sheraff Oct 28, 2026
53bc453
docs(router): a top-level side effect stays in the route file when a …
Sheraff Oct 28, 2026
23f0c33
feat(router-utils): report a declaration only split code needs that t…
Sheraff Oct 28, 2026
947d882
fix(start-plugin-core): Rsbuild reports two warnings of one reason in…
Sheraff Oct 28, 2026
c9d95f4
test(router-plugin, start-plugin-core): split-only declarations a lat…
Sheraff Oct 28, 2026
e6d37f3
perf(start-plugin-core): import protection locates only reported viol…
Sheraff Oct 28, 2026
199dc86
feat(router-utils): the order warning suggests the least effortful fi…
Sheraff Oct 28, 2026
7ce6aca
fix(router-utils): the order warning of several declarations reads "r…
Sheraff Oct 28, 2026
a27b8ec
perf(router-utils): raw facts answer a marker query from the text; ti…
Sheraff Oct 28, 2026
b3f396b
perf(start-plugin-core): ordinary packages are opaque to the summarie…
Sheraff Oct 28, 2026
69eec67
feat(router-utils): calls of known packages' pure exports are pure, b…
Sheraff Oct 28, 2026
d8b59f7
feat(router-plugin, start-plugin-core): the router's pure APIs are no…
Sheraff Oct 28, 2026
6ae5eba
docs(start-plugin-core): changeset note for the import-protection and…
Sheraff Oct 28, 2026
f471145
Merge allocation cuts (lazy import-protection locations; marker-only …
Sheraff Oct 28, 2026
8ac76ed
chore: format KNOWN-BUGS.md
Sheraff Oct 28, 2026
98ff8c8
refactor(router-utils, router-plugin): R79 recognises the router's pu…
Sheraff Oct 28, 2026
8dd7104
Merge origin/compiler-rewrite/yuku (8ac76eda00) into R79 (pure router…
Sheraff Oct 28, 2026
62e109b
perf(router-utils): memoise analysis resolutions per environment whil…
Sheraff Oct 28, 2026
b9c8d90
Merge P1 (per-environment analysis resolution memo; dev yields per re…
Sheraff Oct 28, 2026
6426176
fix(compiler): one purity seeding, empty defaultBehavior, live mutati…
Sheraff Oct 28, 2026
075ec32
fix(hosts): one invalidation per change, registry changes reach symli…
Sheraff Oct 28, 2026
8acadc9
test(compiler): delete the R77 identity pins, assert warnings by posi…
Sheraff Oct 28, 2026
6e14f86
refactor(compiler): delete dead and duplicated code, do less work per…
Sheraff Oct 28, 2026
6aee390
fix(compiler): hoisted imports are no effect before or after a cluster
Sheraff Oct 28, 2026
4dccdda
fix(import-protection): the bundler witnesses TypeScript-erasable edg…
Sheraff Oct 29, 2026
b8e1b6b
fix(import-protection): Rsbuild dev builds edge modules restored from…
Sheraff Oct 29, 2026
1ad9091
perf(import-protection): locate without Vite's identity map; edge-mod…
Sheraff Oct 29, 2026
8af98f0
docs(import-protection): erasable imports are judged by what the bund…
Sheraff Oct 29, 2026
f5851f2
refactor(compiler): delete unread ROUTE_HMR and Chain.headValue; one …
Sheraff Oct 29, 2026
384ae08
perf(compiler): a leading comment is no statement-start hazard
Sheraff Oct 29, 2026
7cf96fc
perf(compiler): raw facts list a module's imports in linear time
Sheraff Oct 29, 2026
8c16be0
perf(start): orphaned declarations are cleaned only after a start-env…
Sheraff Oct 29, 2026
ebfb3c6
perf(compiler): a frozen plan keeps its planner facts instead of a JS…
Sheraff Oct 29, 2026
774eba0
test(start): a server fn nested in a handler is registered on the ser…
Sheraff Oct 29, 2026
b93cd59
fix(compiler): a claimed region in a statement placement drops still …
Sheraff Oct 29, 2026
1e4ceea
test(router-utils): the lazy handler module counts as an importing ou…
Sheraff Oct 29, 2026
281a996
perf(router-utils): compiler source maps carry no sourcesContent
Sheraff Oct 29, 2026
290b524
fix(start-plugin-core): a dev client server fn stub names its file's …
Sheraff Oct 29, 2026
e80188e
fix(compiler): a dynamic import is an edge only of the outputs render…
Sheraff Oct 29, 2026
78db3da
test(router-utils): the overlapping-save and in-flight tests wait on …
Sheraff Oct 29, 2026
c963c25
chore(router-utils): bump yuku to 0.26.0
Sheraff Oct 29, 2026
da12a6f
perf(start-plugin-core): one server chunk for the router and server-f…
Sheraff Oct 29, 2026
0f1aef1
fix(import-protection): Rsbuild dev `log: 'always'` reports a kept im…
Sheraff Oct 29, 2026
4620897
test(import-protection): the bundler witness rows in Vite full-bundle…
Sheraff Oct 29, 2026
5035c81
fix(import-protection): dev `log: 'always'` asks `onViolation` at eve…
Sheraff Oct 29, 2026
9411b94
refactor(router-utils): drop the compiler core's unread fields, hooks…
Sheraff Oct 29, 2026
321d8c2
test(start-plugin-core): import-protection test hosts follow the core…
Sheraff Oct 29, 2026
d5267cb
refactor(compiler): drop the Edit.reason debug label
Sheraff Oct 29, 2026
ac90665
refactor(router-plugin): drop unread planner facts, recognition field…
Sheraff Oct 29, 2026
ad6d556
refactor(router-utils): drop PolicyContext.memo and CompileOutput.fin…
Sheraff Oct 29, 2026
38771ea
refactor(router-plugin)!: derive the route HMR style from the host; r…
Sheraff Oct 29, 2026
4218125
refactor(router-plugin): the React refresh export list names module-l…
Sheraff Oct 29, 2026
f05bbac
fix(router-plugin): the router planners read the route registry from …
Sheraff Oct 29, 2026
55fee02
refactor(router-core): the lazy wrapper's hot slot holds its first im…
Sheraff Oct 29, 2026
031dcc2
fix(router-core): one refresh per split-loader edit on webpack-style …
Sheraff Oct 29, 2026
7db924c
refactor(start-plugin-core): drop unread Start compiler options, fact…
Sheraff Oct 29, 2026
5956ae5
refactor(import-protection): drop unread decide reports, judged origi…
Sheraff Oct 29, 2026
c88e25f
refactor(router-generator): one event classification, leaner tree mod…
Sheraff Oct 29, 2026
58ceca8
chore: drop tsconfig excludes of deleted snapshot and fixture directo…
Sheraff Oct 29, 2026
1528ffe
chore(compiler-test-utils): drop helpers only their own controls used…
Sheraff Oct 29, 2026
4d9e394
chore(react-start-rsc): drop the test:unit target that ran no file
Sheraff Oct 29, 2026
f565bb5
test: known-bug pins that passed become plain tests; KNOWN-BUGS lists…
Sheraff Oct 29, 2026
0c86616
test(import-protection): comments say what they cite instead of a rul…
Sheraff Oct 29, 2026
ec299ae
docs: source, docs and test comments explain instead of citing ruling…
Sheraff Oct 29, 2026
f38121c
docs: Rsbuild compiler architecture, router plugin skill and planner …
Sheraff Oct 29, 2026
0bd5e9e
refactor(import-protection): no export on declarations only their own…
Sheraff Oct 29, 2026
1a2f262
refactor(compiler): no export on declarations only their own module uses
Sheraff Oct 29, 2026
b25a528
refactor: lint follow-ups of the cleanup (the last dependency kind, V…
Sheraff Oct 29, 2026
abc5017
refactor(router-plugin): one router planner, configured by one builder
Sheraff Oct 29, 2026
f0d3f47
refactor(compiler): drop the planner `prepare` phase
Sheraff Oct 29, 2026
51d60d5
test(start-plugin-core): Start's router options follow one rule on Vi…
Sheraff Oct 29, 2026
4937c2d
refactor(router-plugin): route HMR marks the split chunks' components
Sheraff Oct 29, 2026
a54a23c
refactor(router-core): one dev-only hot slot for the lazy route compo…
Sheraff Oct 29, 2026
e2e9da9
test(router): drop in-process route HMR tests real pages cover
Sheraff Oct 29, 2026
c03e696
test(start-plugin-core): planner tests check names by shape, not by s…
Sheraff Oct 29, 2026
7839ca3
test(router-plugin): run the split-loader routes on Rsbuild too
Sheraff Oct 29, 2026
11091ed
refactor(router-plugin): the round records split components without a…
Sheraff Oct 29, 2026
2daca8c
test(router): pin the lazy hot slot's remaining transitions
Sheraff Oct 29, 2026
56a1b66
test(router-plugin): a fixed split chunk shows after a failed hot import
Sheraff Oct 29, 2026
1eafa3c
fix(router-core): a kept hot import clears the failure the lazy wrapp…
Sheraff Oct 29, 2026
fa61e70
test: guard production bundles and Solid's cold start against the dev…
Sheraff Oct 29, 2026
5e88a91
refactor(compiler): stage computePlacement
Sheraff Oct 29, 2026
1352893
refactor(compiler): split AnalysisPlan into plan, kept diagnostics an…
Sheraff Oct 29, 2026
3b8d548
refactor(planners): word the core's kept-declaration warnings
Sheraff Oct 29, 2026
ba7d7ec
fix(compiler): one source-edges builder for Tier 0 and Tier 1
Sheraff Oct 29, 2026
80f9b39
fix(compiler): a merged edge is located at the import that reads a bi…
Sheraff Oct 29, 2026
b853bc1
refactor(compiler): the core cleans up function-scope orphans once
Sheraff Oct 29, 2026
cb3de3a
refactor(planners): leave function-scope orphans to the core
Sheraff Oct 29, 2026
a0cbe4d
refactor(compiler): export the comma-aware list-item removal
Sheraff Oct 29, 2026
6021617
fix(planners): remove object properties with the core's list helper
Sheraff Oct 29, 2026
bcc0c23
perf(compiler): yield in dev for a module's own imports only
Sheraff Oct 29, 2026
f3e7170
docs(compiler): the README maps placement's stages, freeze, edges and…
Sheraff Oct 29, 2026
8ec665d
perf(compiler): the orphan cleanup rejects a live binding first
Sheraff Oct 29, 2026
01ec45e
fix(router-plugin, start-plugin-core): webpack-family source maps hol…
Sheraff Oct 29, 2026
3090daf
test: source-map tests assert the map holds the user's file
Sheraff Oct 29, 2026
5ebce55
chore(e2e): the Rsbuild e2e apps and examples use the catalog @rsbuil…
Sheraff Oct 29, 2026
63f0e57
refactor(compiler): one diagnostics reporter next to the warning ledger
Sheraff Oct 29, 2026
3b760f1
refactor(compiler): one eager-export warning, deduped by the ledger o…
Sheraff Oct 29, 2026
05f12bb
refactor(compiler): the hosts' bundler-shaped helpers in their own se…
Sheraff Oct 29, 2026
010c9da
refactor(start-plugin-core): one bundler-free Start session for the V…
Sheraff Oct 29, 2026
c6b9019
refactor(router-plugin, start-plugin-core): the Vite hosts share deri…
Sheraff Oct 29, 2026
3aaa735
fix(router-generator, router-plugin, start-plugin-core, router-cli): …
Sheraff Oct 29, 2026
43dbe0d
refactor(start-plugin-core): one route generator configuration for St…
Sheraff Oct 29, 2026
bf940a0
refactor(router-generator, router-plugin): the generator owns the rou…
Sheraff Oct 29, 2026
35c78b8
refactor(start-plugin-core): one opacity predicate for the summaries
Sheraff Oct 29, 2026
3e7df32
fix(start-plugin-core): a compile replaces its module's server functi…
Sheraff Oct 29, 2026
6af7938
fix(router-core, react-router): route HMR forgets the routes a rebuil…
Sheraff Oct 29, 2026
8842e6b
chore: changeset for the server-fn registry following edits
Sheraff Oct 29, 2026
593e0d8
test(router-core): type the fake router's rebuilt route tree
Sheraff Oct 29, 2026
00eee4b
refactor(start-plugin-core): one env shape for the registry snapshots
Sheraff Oct 29, 2026
8ef0b4d
refactor(router-utils, router-plugin): the shared Vite host helpers l…
Sheraff Oct 29, 2026
1ea4df0
refactor(router-utils): drop the plan's unread summary digest and sou…
Sheraff Oct 29, 2026
7c904e9
refactor(router-utils): module summaries carry no raw revision or imp…
Sheraff Oct 29, 2026
0ea600f
refactor(router-utils): gates and prefetches get only what planners read
Sheraff Oct 29, 2026
3a5b641
refactor(router-utils): drop unread core fields
Sheraff Oct 29, 2026
6dceee4
refactor(router-plugin): the planners entry re-exports only the confi…
Sheraff Oct 29, 2026
17f5a54
refactor(start-plugin-core): the Rsbuild host uses the Start session'…
Sheraff Oct 29, 2026
5a887ae
test(compiler-test-utils): drop harness fields no test reads
Sheraff Oct 29, 2026
857cc37
test(react-router): drop the unused click helper of the route HMR tests
Sheraff Oct 29, 2026
9ca9d47
test(start-plugin-core): the .mdx import-protection warning is located
Sheraff Oct 30, 2026
3a3e0b2
docs: one router planner; placement rules point at placement/
Sheraff Oct 30, 2026
37f89d8
fix(start-plugin-core, router-utils): load a virtual id through the e…
Sheraff Oct 30, 2026
7c3b46f
fix(start-plugin-core): vite build --watch rebuilds against the edit
Sheraff Oct 30, 2026
cb29f5b
chore: changeset for vite build --watch
Sheraff Oct 30, 2026
d21cdc4
perf(start-plugin-core): Rsbuild dev server keeps the server's shared…
Sheraff Oct 30, 2026
234f6be
perf(start-plugin-core): Rsbuild retain returns when the file set is …
Sheraff Oct 30, 2026
ef1373b
perf(start-plugin-core): Rsbuild replays restored-module checks in th…
Sheraff Oct 30, 2026
a07a903
test(start-plugin-core): a watch build's first build is reported, not…
Sheraff Oct 30, 2026
a05c723
perf(start-plugin-core): Start's Vite host builds maps only when the …
Sheraff Oct 30, 2026
86ffa8a
test(start-plugin-core): Rsbuild's persistent cache compiles a module…
Sheraff Oct 30, 2026
23d4beb
test(start-plugin-core): a watch rebuild forgets a deleted server fn …
Sheraff Oct 30, 2026
37e941d
test(e2e): the Rsbuild overlay spec reads the line from Rspack's file…
Sheraff Oct 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .changeset/compiler-core-yuku.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@tanstack/router-utils': minor
---

Add the compiler core shared by the router plugin and TanStack Start, built on Yuku (`@tanstack/router-utils/compiler`): one parse and one plan per module and environment, with every output (the module, its split chunks, Hydrate chunks, server function providers) emitted from the original source with exact source maps.

The dev caches stay bounded by the live modules: deleted, renamed or no longer imported files leave no plans, raw facts or dependency-index rows behind, and publishing a plan updates only that plan's dependency rows. Each compile records its resolutions in its dependency ledger, and validation asks the bundler's resolver again once a file appeared or disappeared; while the file set is unchanged, the bundler is asked once per environment for each (importer, specifier) pair, so the `export *` chain of a barrel that a thousand modules import from is resolved once, not a thousand times. Emitted outputs are not cached: they are emitted from the frozen plan on request. `TSR_COMPILER_STATS=1` exposes the cache sizes (`compilerStats()`) of the compiler core, the router plugin and the route generator, and `TSR_COMPILER_NO_CACHE` (`plans`, `facts`, `targets`, `all`) disables caches for measurements.

Removed the Babel helpers (`parseAst`, `generateFromAst`, `deadCodeElimination`, `findReferencedIdentifiers`, `stripTypeExports` and the binding helpers of `compiler-helpers`) and the `@babel/*` and `babel-dead-code-elimination` dependencies. Also removed the unused `logDiff`, `createIdentifier` and `decodeIdentifier` exports and the `ansis` and `diff` dependencies.

The package requires Node `^20.19.0 || >=22.12.0`: its CommonJS build loads the ESM-only parser through `require(esm)`.
7 changes: 7 additions & 0 deletions .changeset/compiler-one-mutation-model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@tanstack/router-utils': patch
'@tanstack/router-plugin': patch
'@tanstack/start-plugin-core': patch
---

Route code splitting and Start's environment separation decide from one model of what writes a module's bindings. A value computed when the route module loads from a binding some function writes later (`const initial = [n]` next to `function inc() { n++ }`, a snapshot taken by an immediately invoked function, a call reading a member of an object a function mutates) keeps the value the source computed: it stays in the route module and the split chunks import it, instead of being recomputed when the chunk loads. An option value that reads such a binding is kept in place. The route's option values must be pure for declarations only the component reads to move into its chunk: an impure option (`validateSearch: makeSchema()`) now runs after the declarations before it, as in the source. A chain of components each writing a module binding the previous one reads no longer produces a chunk assigning a binding it imports (a `TypeError` at render): re-planning continues until every such option is kept in place. A server-only initialiser that a server function handler only assigns leaves the client with the handler. Nested server functions are no longer hoisted when they read a module binding something mutates. `TSR_COMPILER_VERIFY=1` re-parses every emitted output and fails the compile on a broken one (the test suites set it).
7 changes: 7 additions & 0 deletions .changeset/dev-cold-start-and-invalidate-index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@tanstack/start-plugin-core': patch
'@tanstack/vue-start': patch
'@tanstack/router-utils': patch
---

Vite dev: Start no longer pre-bundles `@tanstack/<framework>-router/hmr` on its own (the router package is excluded from optimization, so the subpath is served from source with it); pre-bundling it made a cold-start re-optimization strand the first page load (504 "Outdated Optimize Dep", no hydration, no reload). Vue Start declares `@tanstack/vue-router > @tanstack/vue-store` for the optimizer, like React Start does for `@tanstack/react-store`, so a cold start no longer reloads the page once. The compiler's plan cache finds a changed file's plans through a path index instead of scanning every plan on every hot update.
7 changes: 7 additions & 0 deletions .changeset/dev-hmr-stable-updates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@tanstack/router-utils': patch
'@tanstack/router-plugin': patch
'@tanstack/start-plugin-core': patch
---

Dev HMR: a route file that stops parsing keeps its last facts, so its importers (the route tree) no longer hot-update into a full reload onto the dev server's error page; a dependent whose compiled output did not change is not hot-propagated (a route file gaining an export no longer reloads the page); derived modules a file no longer produces (an extracted export after the export went, a split chunk after `codeSplitGroupings: []`) are dropped from the file's hot update instead of dead-ending into a reload; and a React route component moved between its chunk, the route module and its extracted-export module is swapped in (its React Refresh family changed) instead of kept stale.
5 changes: 5 additions & 0 deletions .changeset/import-protection-bundler-witness.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/start-plugin-core': patch
---

Import protection no longer reads tsconfig to guess whether TypeScript erases an import whose bindings are only used as types: the bundler decides. Such an import of a denied module is reported (and mocked) exactly when Vite's or Rsbuild's TypeScript transform keeps it, in dev and in builds. This fixes the stock Vite template (a solution-style `tsconfig.json` with `verbatimModuleSyntax` in `tsconfig.app.json`), whose builds bundled the real server module unreported, and Rsbuild dev, which reported imports SWC erases.
6 changes: 6 additions & 0 deletions .changeset/import-protection-lazy-locations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@tanstack/router-utils': patch
'@tanstack/start-plugin-core': patch
---

Faster Start builds: import protection locates an import through the bundler's source map only when it reports a violation (every checked module used to combine its input map), a dependency module an app imports is read but no longer parsed and summarised unless its text names something the compiler recognises or re-exports another module, and the compiler asks less of the parser per module. A violation's trace still locates each step in the user's files; a step through a module another plugin rewrote (React Compiler, MDX) is named without a line.
7 changes: 7 additions & 0 deletions .changeset/react-start-rsc-compiler.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@tanstack/react-start-rsc': minor
---

RSC CSS injection runs in Start's compiler. Server functions that only a `'use client'` component imports are in the production manifest (#7943). With RSC, server function provider modules load only what their handlers reach, so a route module's client-only code no longer runs under `react-server`.

Removed `@tanstack/react-start-rsc/plugin/rscCssTransform` (the Babel transform).
7 changes: 7 additions & 0 deletions .changeset/release-finished-environment-plans.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@tanstack/start-plugin-core': patch
'@tanstack/router-plugin': patch
'@tanstack/router-utils': patch
---

Production builds release an environment's compiler state as soon as that environment is built, instead of keeping every finished environment's state until the whole build ends. A build of several environments (client, SSR, then a server or RSC environment) no longer grows its heap with each one (#8794).
17 changes: 17 additions & 0 deletions .changeset/route-generator-yuku.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
'@tanstack/router-generator': minor
'@tanstack/router-cli': patch
---

Rebuild the route generator without Babel.

**`routeTree.gen.ts` formatting changes once.** The route tree is printed directly in your `quoteStyle` and `semicolons`, and `enableRouteTreeFormatting` now defaults to `false`: Prettier is loaded only when you set it to `true`. A committed `routeTree.gen.ts` shows a one-time formatting diff after upgrading. Custom scaffolding templates are inserted as written.

- Route files are recognised by binding: an aliased `createFileRoute` import gets its id fixed; a `createFileRoute` the app declares itself is left alone; a plain template literal path is reported, not rewritten (#7216).
- The tree is rebuilt from the files on every change: deleting a layout keeps its children, a deleted `routeTree.gen.ts` is written again, edits of the virtual route config and of `__virtual.ts` files are picked up, and a moved route gets its new id without a content change.
- Empty `.ts` route files get a scaffold without JSX (#8480); `.lazy.vue` files and `route.component.vue` pieces belong to their route; `importRoutesUsingAbsolutePaths` applies to lazy imports; unusual file names give valid trees.
- A route file used for two routes, and two routes with one id, are errors naming the files.
- Writes are atomic per write (also when `tmpDir` is on another filesystem); the generator's own writes no longer regenerate.
- `tsr watch` and the Rspack/webpack plugins watch every route root, including `physical()` mounts.
- `GeneratorPlugin.onRouteTreeChanged` receives the tree model (`{ model }`). The internal helpers `format`, `inferFullPath`, `checkRouteFullPathUniqueness` and `writeIfDifferent` are no longer exported.
- `@tanstack/router-generator` and `@tanstack/router-cli` require Node `^20.19.0 || >=22.12.0`: the CommonJS build and the `tsr` binary load the ESM-only parser through `require(esm)`.
8 changes: 8 additions & 0 deletions .changeset/route-hmr-runtime.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@tanstack/router-core': patch
'@tanstack/react-router': patch
'@tanstack/solid-router': patch
'@tanstack/vue-router': patch
---

Add the development-only route HMR runtime used by the router plugin's output, on new `/hmr` subpaths (`@tanstack/router-core/hmr`, `@tanstack/{react,solid,vue}-router/hmr`). It updates the live route in place, keeps each split component's lazy wrapper across updates, and with Vite's bundled dev falls back to the original importer when Rolldown throws `MissingFactoryError`. An update patches only the route its module exported, so another router in the same window (module federation) is left alone (#7921). After the route tree is regenerated (a route added or renamed), updates keep reaching the route the rebuilt tree holds. In development, once a router error boundary has shown an error, later route edits reload the page, as without route HMR, so the edit that fixes the error shows (Solid and Vue: any router error boundary; React: only the global boundary, since React Refresh recovers route boundaries in place). Nothing of it reaches production bundles.
5 changes: 5 additions & 0 deletions .changeset/router-plugin-library-build-externals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/router-plugin': patch
---

Fix the Vite plugin failing a library build (`build.lib` with `external` dependencies) at the end of the build: the report of split exports that an entry chunk still holds walked the entry's imports, which also name the external packages, and read a chunk that does not exist (`Cannot read properties of undefined (reading 'modules')`).
5 changes: 5 additions & 0 deletions .changeset/router-plugin-order-check-splitting-only.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/router-plugin': patch
---

Check the Vite plugin order (the router plugin before the framework's JSX plugin) only when `autoCodeSplitting` is on, as before: without splitting, route HMR works whatever the order, so a config listing `react()` or `solid()` first is not an error.
24 changes: 24 additions & 0 deletions .changeset/router-plugin-yuku.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
'@tanstack/router-plugin': minor
---

Route code splitting and route HMR run on the new compiler core instead of Babel: faster dev startup, HMR and builds, with the same production output shape.

**What changes for your app when you upgrade:**

- **Vite 6 or later is required** (the `vite` peer range is now `>=6`): the plugin is tested on Vite 6, 7 and 8; Vite 5 is no longer supported.
- **esbuild refuses `autoCodeSplitting: true`** with a clear error (route generation still works there); use Vite, Rspack or webpack for code splitting.
- **CommonJS consumers need Node 20.19+ or 22.12+** (`engines`): a `webpack.config.js` / `rspack.config.js` that `require()`s the plugin loads the ESM-only parser through `require(esm)`, which Node 22.0–22.11 and 21 do not support.
- **Routes the compiler cannot read statically stay unsplit with one warning per file per build** naming the file: route options built by a helper call (`createFileRoute('/x')(makeOptions())`), options that spread or compute, methods that read `this`, and route modules the compiler cannot parse. Main split some of these silently or crashed.
- **`routeTree.gen.ts` formatting changes once** (`enableRouteTreeFormatting` now defaults to `false`; see the route generator's changeset).
- **Removed:** `codeSplittingOptions.compilerPlugins` (the experimental Babel hook), and `plugin.hmr.style` with its `HmrOptions` type: the option was undocumented, and on Vite its only other value (`'webpack'`) turned route HMR off; each entry now emits its bundler's hot API.

- Any route option value splits: identifiers, inline functions, method shorthands (#8623), object-form loaders (#8753), casts, `satisfies`, calls such as `memo(Page)`, and options held in a module-level constant. Module state the route module and its chunks share exists once (#8754, #8505).
- **Exported route components and helpers are split too.** An exported pure function, class or component only split code needs leaves the route module: in a build it moves to a small side-effect-free module of its own that the route module re-exports (one instance for every other module importing it from the route file; the bundler drops it when nobody does), and each split chunk carries its own copy, so the chunk never depends on where the bundler places that module (Rolldown < 1.1.5 and a `manualChunks` group merging into the entry kept it eager). In dev the binding stays in the route module and the chunk copies it the same way. An importer of the route file and the route's chunk therefore hold two instances of such a stateless binding (as on main); state, effects and augmented bindings (`Page.displayName = …`) are never copied. Exported bindings that must stay in the route module (side effects, reassignment, read by the route module itself) and extracted modules an entry chunk loads anyway (another module imports the binding through the route file) are each reported once per file, in dev and in builds, on every bundler.
- **A top-level declaration only split code needs that must stay in the route module is reported** once per declaration, in dev and in builds, on every bundler, positioned at it and naming what keeps it: a side effect written after it that stays (for example an inline `validateSearch: type({ … })`, named with its line), several split options reading it, a top-level change of it, or a value it reads as the file loads. `/* @__PURE__ */` on the call, or `/* #__NO_SIDE_EFFECTS__ */` on a function declared in the route file, lets it split. Calls of the router's own side-effect-free APIs with constant arguments (`getRouteApi`, `linkOptions`, `createLink`, `createRouteMask`, `lazyRouteComponent`, `lazyFn`, `retainSearchParams`, `stripSearchParams`, `parseSearchWith`, `stringifySearchWith`, `createRouterConfig`) are no such side effect when imported from the router package (also under another name or as a namespace member): `const { useSearch } = getRouteApi('/x')` splits with the component.
- `createFileRoute` & co. are recognised by their import binding. Routes whose options cannot be read statically, and methods or function expressions that read `this` (#8688), stay in the route module with one warning naming the file.
- Route HMR keeps split components' lazy wrappers across updates in React, Solid and Vue, refreshes edits of split loaders and other non-component options on Rspack and webpack, and needs no framework plugin for `.ts` route modules.
- Production output is decided by the bundler's mode and is identical with `addHmr: false`.
- Rspack and webpack use the plugin's own loader: source maps compose with earlier loaders and name the route file (#6667, #3828); project paths with `'`, `#` or spaces work (#7754). Rspack/webpack no longer rebuild every environment once after the first watch build.
- esbuild refuses `autoCodeSplitting` with a clear error; the route generator keeps working there.
- Removed: `codeSplittingOptions.compilerPlugins` (the experimental Babel hook), the `@babel/*` dependencies and the direct `chokidar` dependency (the route generator's watcher brings it). New entry `@tanstack/router-plugin/planners` exposes the route planners to TanStack Start.
5 changes: 5 additions & 0 deletions .changeset/server-fn-registry-follows-edits.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/start-plugin-core': patch
---

On the Vite dev server, a server function an edit removes is no longer registered: calling it by its old id fails like any unknown id instead of reaching a module that no longer exports it.
Loading
Loading