Skip to content

chore: update zod to v4.4.3#7441

Merged
Sheraff merged 3 commits into
mainfrom
opencode/quick-garden
May 20, 2026
Merged

chore: update zod to v4.4.3#7441
Sheraff merged 3 commits into
mainfrom
opencode/quick-garden

Conversation

@Sheraff
Copy link
Copy Markdown
Collaborator

@Sheraff Sheraff commented May 19, 2026

Summary

  • update direct repo Zod consumers to zod@4.4.3 while leaving @tanstack/zod-adapter on Zod v3
  • replace v3-only adapter usage in examples/e2e routes with direct Zod v4 schemas
  • update plugin schemas and docs for Zod v4 API changes

Tests

  • CI=1 NX_DAEMON=false pnpm nx affected --target=test:types --exclude=examples/** --outputStyle=stream --skipRemoteCache
  • CI=1 NX_DAEMON=false pnpm nx affected --target=test:unit --exclude=examples/** --exclude=e2e/** --outputStyle=stream --skipRemoteCache
  • CI=1 NX_DAEMON=false pnpm nx affected --target=test:eslint --exclude=examples/** --exclude=e2e/** --outputStyle=stream --skipRemoteCache
  • pnpm test:docs
  • pnpm build in examples/react/search-validator-adapters
  • pnpm build in examples/solid/search-validator-adapters

Summary by CodeRabbit

  • New Features

    • Zod v4 support across examples and starter projects; route search schemas validate directly (adapter no longer required).
    • Generated cookie defaults now populate client IDs when missing.
  • Bug Fixes

    • More robust fallback/parse behavior for invalid or missing search params.
  • Documentation

    • Updated how-to guides and examples to show Zod v4 patterns and graceful .catch() fallbacks.
  • Tests

    • Added schema validation tests for Start config parsing.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 19, 2026

📝 Walkthrough

<review_stack_artifact>

</review_stack_artifact>

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch opencode/quick-garden

@nx-cloud
Copy link
Copy Markdown
Contributor

nx-cloud Bot commented May 19, 2026

View your CI Pipeline Execution ↗ for commit abd959d

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded 4m 42s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 4s View ↗

☁️ Nx Cloud last updated this comment at 2026-05-20 00:22:13 UTC

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 19, 2026

🚀 Changeset Version Preview

8 package(s) bumped directly, 16 bumped as dependents.

🟨 Minor bumps

Package Version Reason
@tanstack/react-start-client 1.167.4 → 1.168.0 Changeset
@tanstack/solid-start-client 1.167.4 → 1.168.0 Changeset
@tanstack/start-client-core 1.169.4 → 1.170.0 Changeset
@tanstack/start-plugin-core 1.170.6 → 1.171.0 Changeset
@tanstack/start-server-core 1.168.4 → 1.169.0 Changeset

🟩 Patch bumps

Package Version Reason
@tanstack/router-core 1.171.2 → 1.171.3 Changeset
@tanstack/router-plugin 1.168.6 → 1.168.7 Changeset
@tanstack/router-utils 1.162.0 → 1.162.1 Changeset
@tanstack/react-router 1.170.4 → 1.170.5 Dependent
@tanstack/react-start 1.168.6 → 1.168.7 Dependent
@tanstack/react-start-rsc 0.1.6 → 0.1.7 Dependent
@tanstack/react-start-server 1.167.4 → 1.167.5 Dependent
@tanstack/router-cli 1.167.5 → 1.167.6 Dependent
@tanstack/router-generator 1.167.5 → 1.167.6 Dependent
@tanstack/router-vite-plugin 1.167.6 → 1.167.7 Dependent
@tanstack/solid-router 1.170.4 → 1.170.5 Dependent
@tanstack/solid-start 1.168.6 → 1.168.7 Dependent
@tanstack/solid-start-server 1.167.4 → 1.167.5 Dependent
@tanstack/start-static-server-functions 1.167.4 → 1.167.5 Dependent
@tanstack/start-storage-context 1.167.4 → 1.167.5 Dependent
@tanstack/vue-router 1.170.4 → 1.170.5 Dependent
@tanstack/vue-start 1.168.6 → 1.168.7 Dependent
@tanstack/vue-start-client 1.167.4 → 1.167.5 Dependent
@tanstack/vue-start-server 1.167.4 → 1.167.5 Dependent

@socket-security
Copy link
Copy Markdown

socket-security Bot commented May 19, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedzod@​4.4.310010010095100

View full report

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@packages/router-core/skills/router-core/search-params/references/validation-patterns.md`:
- Line 77: Replace the Zod v4 call `.prefault({})` with the Zod v3-compatible
`.default({})` wherever the schema uses `).prefault({})` (e.g., in the
validation pattern example that currently ends with `).prefault({}),`); update
that token to `).default({}),` so the documented adapter uses the correct Zod v3
API.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: da894230-212c-4d77-b059-5670519e3cf9

📥 Commits

Reviewing files that changed from the base of the PR and between ac4b43f and cc71fed.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (174)
  • docs/router/how-to/arrays-objects-dates-search-params.md
  • docs/router/how-to/setup-basic-search-params.md
  • e2e/react-router/basic-esbuild-file-based/package.json
  • e2e/react-router/basic-esbuild-file-based/src/routes/(group)/_layout.inside.tsx
  • e2e/react-router/basic-esbuild-file-based/src/routes/(group)/lazyinside.tsx
  • e2e/react-router/basic-file-based-code-splitting/package.json
  • e2e/react-router/basic-file-based/package.json
  • e2e/react-router/basic-file-based/src/routes/(another-group)/onlyrouteinside.tsx
  • e2e/react-router/basic-file-based/src/routes/(group)/_layout.insidelayout.tsx
  • e2e/react-router/basic-file-based/src/routes/(group)/inside.tsx
  • e2e/react-router/basic-file-based/src/routes/(group)/lazyinside.tsx
  • e2e/react-router/basic-file-based/src/routes/(group)/subfolder/inside.tsx
  • e2e/react-router/basic-react-query-file-based/package.json
  • e2e/react-router/basic-virtual-file-based/package.json
  • e2e/react-router/basic-virtual-named-export-config-file-based/package.json
  • e2e/react-router/scroll-restoration-sandbox-vite/package.json
  • e2e/react-router/scroll-restoration-sandbox-vite/src/routes/(tests)/page-with-search.tsx
  • e2e/react-router/view-transitions/package.json
  • e2e/react-start/basic-react-query/package.json
  • e2e/react-start/basic/package.json
  • e2e/react-start/dev-ssr-styles/package.json
  • e2e/react-start/query-integration/package.json
  • e2e/react-start/scroll-restoration/package.json
  • e2e/react-start/scroll-restoration/src/routes/(tests)/with-search.tsx
  • e2e/react-start/selective-ssr/package.json
  • e2e/react-start/serialization-adapters/package.json
  • e2e/react-start/server-functions/package.json
  • e2e/react-start/server-routes/package.json
  • e2e/react-start/virtual-routes/package.json
  • e2e/react-start/website/package.json
  • e2e/solid-router/basic-esbuild-file-based/package.json
  • e2e/solid-router/basic-esbuild-file-based/src/routes/(group)/_layout.inside.tsx
  • e2e/solid-router/basic-esbuild-file-based/src/routes/(group)/lazyinside.tsx
  • e2e/solid-router/basic-file-based-code-splitting/package.json
  • e2e/solid-router/basic-file-based/package.json
  • e2e/solid-router/basic-file-based/src/routes/(another-group)/onlyrouteinside.tsx
  • e2e/solid-router/basic-file-based/src/routes/(group)/_layout.insidelayout.tsx
  • e2e/solid-router/basic-file-based/src/routes/(group)/inside.tsx
  • e2e/solid-router/basic-file-based/src/routes/(group)/lazyinside.tsx
  • e2e/solid-router/basic-file-based/src/routes/(group)/subfolder/inside.tsx
  • e2e/solid-router/basic-solid-query-file-based/package.json
  • e2e/solid-router/basic-virtual-file-based/package.json
  • e2e/solid-router/basic-virtual-named-export-config-file-based/package.json
  • e2e/solid-router/scroll-restoration-sandbox-vite/package.json
  • e2e/solid-router/scroll-restoration-sandbox-vite/src/routes/(tests)/page-with-search.tsx
  • e2e/solid-router/view-transitions/package.json
  • e2e/solid-start/basic-solid-query/package.json
  • e2e/solid-start/basic/package.json
  • e2e/solid-start/query-integration/package.json
  • e2e/solid-start/scroll-restoration/package.json
  • e2e/solid-start/scroll-restoration/src/routes/(tests)/with-search.tsx
  • e2e/solid-start/selective-ssr/package.json
  • e2e/solid-start/serialization-adapters/package.json
  • e2e/solid-start/server-functions/package.json
  • e2e/solid-start/server-routes/package.json
  • e2e/solid-start/spa-mode/package.json
  • e2e/solid-start/virtual-routes/package.json
  • e2e/solid-start/website/package.json
  • e2e/vue-router/basic-esbuild-file-based/package.json
  • e2e/vue-router/basic-esbuild-file-based/src/routes/(another-group)/onlyrouteinside.tsx
  • e2e/vue-router/basic-esbuild-file-based/src/routes/(group)/_layout.insidelayout.tsx
  • e2e/vue-router/basic-esbuild-file-based/src/routes/(group)/inside.tsx
  • e2e/vue-router/basic-esbuild-file-based/src/routes/(group)/lazyinside.tsx
  • e2e/vue-router/basic-esbuild-file-based/src/routes/(group)/subfolder/inside.tsx
  • e2e/vue-router/basic-file-based-jsx/package.json
  • e2e/vue-router/basic-file-based-jsx/src/routes/(another-group)/onlyrouteinside.tsx
  • e2e/vue-router/basic-file-based-jsx/src/routes/(group)/_layout.insidelayout.tsx
  • e2e/vue-router/basic-file-based-jsx/src/routes/(group)/inside.tsx
  • e2e/vue-router/basic-file-based-jsx/src/routes/(group)/lazyinside.tsx
  • e2e/vue-router/basic-file-based-jsx/src/routes/(group)/subfolder/inside.tsx
  • e2e/vue-router/basic-file-based-sfc/package.json
  • e2e/vue-router/basic-file-based-sfc/src/routes/(another-group)/onlyrouteinside.ts
  • e2e/vue-router/basic-file-based-sfc/src/routes/(group)/_layout.insidelayout.ts
  • e2e/vue-router/basic-file-based-sfc/src/routes/(group)/inside.ts
  • e2e/vue-router/basic-file-based-sfc/src/routes/(group)/lazyinside.ts
  • e2e/vue-router/basic-file-based-sfc/src/routes/(group)/subfolder/inside.ts
  • e2e/vue-router/basic-vue-query-file-based/package.json
  • e2e/vue-router/scroll-restoration-sandbox-vite/package.json
  • e2e/vue-router/scroll-restoration-sandbox-vite/src/routes/(tests)/page-with-search.tsx
  • e2e/vue-start/basic-vue-query/package.json
  • e2e/vue-start/basic/package.json
  • e2e/vue-start/query-integration/package.json
  • e2e/vue-start/scroll-restoration/package.json
  • e2e/vue-start/scroll-restoration/src/routes/(tests)/with-search.tsx
  • e2e/vue-start/selective-ssr/package.json
  • e2e/vue-start/serialization-adapters/package.json
  • e2e/vue-start/server-functions/package.json
  • e2e/vue-start/server-routes/package.json
  • e2e/vue-start/spa-mode/package.json
  • e2e/vue-start/virtual-routes/package.json
  • e2e/vue-start/website/package.json
  • examples/react/authenticated-routes-firebase/package.json
  • examples/react/authenticated-routes/package.json
  • examples/react/basic-default-search-params/package.json
  • examples/react/basic-file-based/package.json
  • examples/react/basic-react-query-file-based/package.json
  • examples/react/basic-virtual-file-based/package.json
  • examples/react/basic-virtual-inside-file-based/package.json
  • examples/react/deferred-data/package.json
  • examples/react/kitchen-sink-file-based/package.json
  • examples/react/kitchen-sink-react-query-file-based/package.json
  • examples/react/kitchen-sink-react-query/package.json
  • examples/react/kitchen-sink/package.json
  • examples/react/large-file-based/package.json
  • examples/react/quickstart-esbuild-file-based/package.json
  • examples/react/quickstart-file-based/package.json
  • examples/react/router-monorepo-react-query/packages/post-query/package.json
  • examples/react/router-monorepo-react-query/packages/router/package.json
  • examples/react/router-monorepo-simple-lazy/packages/router/package.json
  • examples/react/router-monorepo-simple/packages/router/package.json
  • examples/react/start-bare/package.json
  • examples/react/start-basic/package.json
  • examples/react/start-convex-trellaux/package.json
  • examples/react/start-material-ui/package.json
  • examples/react/start-rscs/package.json
  • examples/react/start-streaming-data-from-server-functions/package.json
  • examples/react/start-tailwind-v4/package.json
  • examples/react/start-trellaux/package.json
  • examples/react/view-transitions/package.json
  • examples/react/with-framer-motion/package.json
  • examples/react/with-trpc-react-query/package.json
  • examples/react/with-trpc/package.json
  • examples/solid/authenticated-routes-firebase/package.json
  • examples/solid/authenticated-routes/package.json
  • examples/solid/basic-default-search-params/package.json
  • examples/solid/basic-file-based/package.json
  • examples/solid/basic-solid-query-file-based/package.json
  • examples/solid/basic-ssr-streaming-file-based/package.json
  • examples/solid/basic-virtual-file-based/package.json
  • examples/solid/basic-virtual-inside-file-based/package.json
  • examples/solid/deferred-data/package.json
  • examples/solid/kitchen-sink-file-based/package.json
  • examples/solid/kitchen-sink-solid-query-file-based/package.json
  • examples/solid/kitchen-sink-solid-query/package.json
  • examples/solid/kitchen-sink/package.json
  • examples/solid/large-file-based/package.json
  • examples/solid/quickstart-esbuild-file-based/package.json
  • examples/solid/quickstart-file-based/package.json
  • examples/solid/router-monorepo-simple-lazy/packages/router/package.json
  • examples/solid/router-monorepo-simple/packages/router/package.json
  • examples/solid/router-monorepo-solid-query/packages/post-query/package.json
  • examples/solid/router-monorepo-solid-query/packages/router/package.json
  • examples/solid/start-convex-better-auth/package.json
  • examples/solid/start-counter/package.json
  • examples/solid/start-streaming-data-from-server-functions/package.json
  • examples/solid/start-tailwind-v4/package.json
  • examples/solid/view-transitions/package.json
  • examples/solid/with-framer-motion/package.json
  • examples/solid/with-trpc/package.json
  • examples/vue/basic-file-based-jsx/package.json
  • examples/vue/basic-file-based-jsx/src/routes/(another-group)/onlyrouteinside.tsx
  • examples/vue/basic-file-based-jsx/src/routes/(group)/_layout.insidelayout.tsx
  • examples/vue/basic-file-based-jsx/src/routes/(group)/inside.tsx
  • examples/vue/basic-file-based-jsx/src/routes/(group)/lazyinside.tsx
  • examples/vue/basic-file-based-jsx/src/routes/(group)/subfolder/inside.tsx
  • examples/vue/basic-file-based-sfc/package.json
  • examples/vue/basic-file-based-sfc/src/routes/(another-group)/onlyrouteinside.ts
  • examples/vue/basic-file-based-sfc/src/routes/(group)/_layout.insidelayout.ts
  • examples/vue/basic-file-based-sfc/src/routes/(group)/inside.ts
  • examples/vue/basic-file-based-sfc/src/routes/(group)/lazyinside.ts
  • examples/vue/basic-file-based-sfc/src/routes/(group)/subfolder/inside.ts
  • packages/react-router/package.json
  • packages/router-core/skills/router-core/search-params/references/validation-patterns.md
  • packages/router-generator/package.json
  • packages/router-generator/src/config.ts
  • packages/router-plugin/package.json
  • packages/router-plugin/src/core/config.ts
  • packages/router-plugin/src/core/router-code-splitter-plugin.ts
  • packages/solid-router/package.json
  • packages/start-plugin-core/package.json
  • packages/start-plugin-core/src/rsbuild/schema.ts
  • packages/start-plugin-core/src/schema.ts
  • packages/start-plugin-core/src/vite/schema.ts
  • packages/vue-router/package.json

Copy link
Copy Markdown
Contributor

@nx-cloud nx-cloud Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

At least one additional CI pipeline execution has run since the conclusion below was written and it may no longer be applicable.

Nx Cloud is proposing a fix for your failed CI:

We fix the widespread src/src/routes build failure caused by the Zod v4 schema migration. Changing .default({}) to .prefault({}) caused tsrConfig's inner defaults (routesDirectory: './src/routes') to be applied even when the user didn't configure them, which parseStartConfig then incorrectly prepended with srcDirectory, doubling the src segment. By removing routesDirectory and generatedRouteTree from the omitted fields and re-adding them without defaults, these values correctly remain undefined when unset, preserving the original path resolution behavior.

Warning

  • We could not verify this fix.
  • The suggested diff is too large to display here, but you can view it on Nx Cloud ↗

Apply fix via Nx Cloud  Reject fix via Nx Cloud


Or Apply changes locally with:

npx nx-cloud apply-locally j6eZ-Ow3m

Apply fix locally with your editor ↗   View interactive diff ↗



🎓 Learn more about Self-Healing CI on nx.dev

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 19, 2026

Merging this PR will not alter performance

✅ 5 untouched benchmarks
⏩ 1 skipped benchmark1


Comparing opencode/quick-garden (abd959d) with main (5fa9e55)2

Open in CodSpeed

Footnotes

  1. 1 benchmark was skipped, so the baseline result was used instead. If it was deleted from the codebase, click here and archive it to remove it from the performance reports.

  2. No successful run was found on main (ac4b43f) during the generation of this report, so 5fa9e55 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 19, 2026

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/@tanstack/arktype-adapter@7441

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/@tanstack/eslint-plugin-router@7441

@tanstack/eslint-plugin-start

npm i https://pkg.pr.new/@tanstack/eslint-plugin-start@7441

@tanstack/history

npm i https://pkg.pr.new/@tanstack/history@7441

@tanstack/nitro-v2-vite-plugin

npm i https://pkg.pr.new/@tanstack/nitro-v2-vite-plugin@7441

@tanstack/react-router

npm i https://pkg.pr.new/@tanstack/react-router@7441

@tanstack/react-router-devtools

npm i https://pkg.pr.new/@tanstack/react-router-devtools@7441

@tanstack/react-router-ssr-query

npm i https://pkg.pr.new/@tanstack/react-router-ssr-query@7441

@tanstack/react-start

npm i https://pkg.pr.new/@tanstack/react-start@7441

@tanstack/react-start-client

npm i https://pkg.pr.new/@tanstack/react-start-client@7441

@tanstack/react-start-rsc

npm i https://pkg.pr.new/@tanstack/react-start-rsc@7441

@tanstack/react-start-server

npm i https://pkg.pr.new/@tanstack/react-start-server@7441

@tanstack/router-cli

npm i https://pkg.pr.new/@tanstack/router-cli@7441

@tanstack/router-core

npm i https://pkg.pr.new/@tanstack/router-core@7441

@tanstack/router-devtools

npm i https://pkg.pr.new/@tanstack/router-devtools@7441

@tanstack/router-devtools-core

npm i https://pkg.pr.new/@tanstack/router-devtools-core@7441

@tanstack/router-generator

npm i https://pkg.pr.new/@tanstack/router-generator@7441

@tanstack/router-plugin

npm i https://pkg.pr.new/@tanstack/router-plugin@7441

@tanstack/router-ssr-query-core

npm i https://pkg.pr.new/@tanstack/router-ssr-query-core@7441

@tanstack/router-utils

npm i https://pkg.pr.new/@tanstack/router-utils@7441

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/@tanstack/router-vite-plugin@7441

@tanstack/solid-router

npm i https://pkg.pr.new/@tanstack/solid-router@7441

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/@tanstack/solid-router-devtools@7441

@tanstack/solid-router-ssr-query

npm i https://pkg.pr.new/@tanstack/solid-router-ssr-query@7441

@tanstack/solid-start

npm i https://pkg.pr.new/@tanstack/solid-start@7441

@tanstack/solid-start-client

npm i https://pkg.pr.new/@tanstack/solid-start-client@7441

@tanstack/solid-start-server

npm i https://pkg.pr.new/@tanstack/solid-start-server@7441

@tanstack/start-client-core

npm i https://pkg.pr.new/@tanstack/start-client-core@7441

@tanstack/start-fn-stubs

npm i https://pkg.pr.new/@tanstack/start-fn-stubs@7441

@tanstack/start-plugin-core

npm i https://pkg.pr.new/@tanstack/start-plugin-core@7441

@tanstack/start-server-core

npm i https://pkg.pr.new/@tanstack/start-server-core@7441

@tanstack/start-static-server-functions

npm i https://pkg.pr.new/@tanstack/start-static-server-functions@7441

@tanstack/start-storage-context

npm i https://pkg.pr.new/@tanstack/start-storage-context@7441

@tanstack/valibot-adapter

npm i https://pkg.pr.new/@tanstack/valibot-adapter@7441

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/@tanstack/virtual-file-routes@7441

@tanstack/vue-router

npm i https://pkg.pr.new/@tanstack/vue-router@7441

@tanstack/vue-router-devtools

npm i https://pkg.pr.new/@tanstack/vue-router-devtools@7441

@tanstack/vue-router-ssr-query

npm i https://pkg.pr.new/@tanstack/vue-router-ssr-query@7441

@tanstack/vue-start

npm i https://pkg.pr.new/@tanstack/vue-start@7441

@tanstack/vue-start-client

npm i https://pkg.pr.new/@tanstack/vue-start-client@7441

@tanstack/vue-start-server

npm i https://pkg.pr.new/@tanstack/vue-start-server@7441

@tanstack/zod-adapter

npm i https://pkg.pr.new/@tanstack/zod-adapter@7441

commit: abd959d

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 19, 2026

Bundle Size Benchmarks

  • Commit: 2dbfcefd6265
  • Measured at: 2026-05-20T00:18:38.823Z
  • Baseline source: history:5fa9e555f3a2
  • Dashboard: bundle-size history
Scenario Current (gzip) Delta vs baseline Initial gzip Raw Brotli Trend
react-router.minimal 87.33 KiB 0 B (0.00%) 87.19 KiB 274.21 KiB 75.94 KiB ▁▁█████████
react-router.full 90.85 KiB 0 B (0.00%) 90.72 KiB 285.71 KiB 78.92 KiB ▁▁█████████
solid-router.minimal 35.57 KiB 0 B (0.00%) 35.44 KiB 106.51 KiB 31.99 KiB ▁▁▆▆▆▆▆▆▆▆█
solid-router.full 40.27 KiB 0 B (0.00%) 40.14 KiB 120.73 KiB 36.18 KiB ▁▁█████████
vue-router.minimal 53.33 KiB 0 B (0.00%) 53.19 KiB 151.65 KiB 47.89 KiB ▁▁█████████
vue-router.full 58.45 KiB 0 B (0.00%) 58.32 KiB 167.82 KiB 52.41 KiB ▁▁█████████
react-start.minimal 102.02 KiB 0 B (0.00%) 101.88 KiB 322.66 KiB 88.14 KiB ▁▁▇▇▇▇▇▇▇▇█
react-start.deferred-hydration 103.08 KiB 0 B (0.00%) 102.20 KiB 324.30 KiB 89.25 KiB
react-start.full 105.45 KiB 0 B (0.00%) 105.31 KiB 332.99 KiB 91.11 KiB ▁▁▇▇▆▆▆▆▆▆█
react-start.rsbuild.minimal 99.63 KiB 0 B (0.00%) 99.46 KiB 317.11 KiB 85.65 KiB ▁▁█████████
react-start.rsbuild.full 102.93 KiB 0 B (0.00%) 102.76 KiB 327.55 KiB 88.47 KiB ▁▁█████████
solid-start.minimal 49.69 KiB 0 B (0.00%) 49.56 KiB 152.64 KiB 43.82 KiB ▁▁▅▅▅▅▅▅▅▅█
solid-start.deferred-hydration 53.80 KiB 0 B (0.00%) 50.45 KiB 161.18 KiB 47.73 KiB
solid-start.full 55.46 KiB 0 B (0.00%) 55.33 KiB 169.55 KiB 48.82 KiB ▁▁▅▅▅▅▅▅▅▅█

Current gzip tracks all emitted client JS chunks. Initial gzip tracks only the entry/import graph. Trend sparkline is historical current gzip ending with this PR measurement; lower is better.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (3)
examples/react/start-trellaux/src/db/schema.ts (1)

7-20: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Verify explicit generic syntax on z.coerce methods.

Same concern: z.coerce.number<number>() and z.coerce.string<string>() syntax does not appear to be valid Zod API usage. Standard Zod coercion is simply z.coerce.number() and z.coerce.string() without generic type parameters.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/react/start-trellaux/src/db/schema.ts` around lines 7 - 20, The
z.coerce calls use invalid generic syntax; replace z.coerce.number<number>() and
z.coerce.string<string>() with the standard Zod forms z.coerce.number() and
z.coerce.string() in the schema definitions (e.g., the order field in the item
schema, the boardId fields in columnSchema and boardSchema) so the coercion uses
the correct Zod API.
e2e/solid-start/server-functions/src/routes/cookies/index.tsx (1)

4-7: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Verify .prefault() API usage.

Same concern as in the React version: please verify .prefault({}) is the correct Zod v4 API syntax and the intended migration pattern.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/solid-start/server-functions/src/routes/cookies/index.tsx` around lines 4
- 7, The code uses a non-existent/typo Zod API `.prefault({})` on the object
schema; update the schema definition in cookieSchema (the z.object({...}) chain)
to use the correct Zod v4 API (e.g., `.default({})` if you intend an object
default) or remove the call if no object-level default is needed, and ensure the
`.catch(...)` fallback remains appropriate for parse errors.
e2e/vue-start/server-functions/src/routes/cookies/index.tsx (1)

4-7: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Verify .prefault() API usage.

Same concern as in the React and Solid versions: please verify .prefault({}) is the correct Zod v4 API syntax.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e/vue-start/server-functions/src/routes/cookies/index.tsx` around lines 4 -
7, The code uses a non-existent Zod v4 method .prefault({}) on cookieSchema;
either remove that call or replace it with the correct API: if you intended a
default object for the whole schema use .default(() => ({ value:
`CLIENT-${Date.now()}` })) on the z.object(...) instead of .prefault({}), or if
you meant to allow missing properties use .partial() on the z.object; update the
cookieSchema declaration (the z.object({ value: z.string().default(...) })
chain) to use the appropriate method and keep the .catch(...) fallback only if
still needed.
🧹 Nitpick comments (5)
examples/react/search-validator-adapters/package.json (1)

7-7: ⚡ Quick win

Consider cross-platform environment variable syntax.

The NODE_OPTIONS=... prefix works on Unix/Mac but not Windows. Consider using cross-env for portability:

-    "build": "vite build && NODE_OPTIONS=--max-old-space-size=4096 tsc --noEmit",
+    "build": "vite build && cross-env NODE_OPTIONS=--max-old-space-size=4096 tsc --noEmit",

And add cross-env to devDependencies if not already present.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/react/search-validator-adapters/package.json` at line 7, The build
script in package.json uses the Unix-only prefix
NODE_OPTIONS=--max-old-space-size=4096 (the "build" script), which breaks on
Windows; update the "build" script to use cross-env (e.g., prefix with cross-env
NODE_OPTIONS=--max-old-space-size=4096) and add cross-env to devDependencies so
the script is cross-platform and portable.
examples/react/search-validator-adapters/src/routes/users/zod.index.tsx (2)

40-40: 💤 Low value

Clarify redundant fallback and default pattern.

The search field uses both fallbackString(z.string(), '') and .default(''). This appears redundant since both return the same empty string:

  • fallbackString(..., '') handles validation failures
  • .default('') handles undefined input

If this is intentional for the Zod v4 migration (separating undefined-handling from error-handling), consider adding a comment explaining the pattern. Otherwise, z.string().default('').catch('') might be clearer.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/react/search-validator-adapters/src/routes/users/zod.index.tsx` at
line 40, The `search` schema currently uses both fallbackString and .default on
z.string(), which is redundant; either keep the dual pattern but add a brief
inline comment next to the search field explaining that fallbackString handles
validation errors while .default handles undefined (this clarifies the Zod v4
migration intent), or simplify the schema by replacing the dual pattern with a
single clearer construct using z.string() with a default and a catch for
validation failures (refer to the symbols fallbackString, .default, z.string(),
and .catch to locate the change).

10-13: 💤 Low value

This type cast is a legitimate type-narrowing pattern for the generic fallback function.

The fallback function in @tanstack/zod-adapter is generic (<TSchema extends z.ZodTypeAny>), returning z.ZodPipeline<z.ZodType<...>, z.ZodCatch<TSchema>>. The cast narrows this to a specific type signature for z.ZodString, which TypeScript cannot infer automatically from the arguments alone. There is no underlying type mismatch or Zod v4 incompatibility; the cast is semantically correct since z.ZodPipeline is assignable to z.ZodType. This pattern is expected when specializing generic functions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/react/search-validator-adapters/src/routes/users/zod.index.tsx`
around lines 10 - 13, The explicit cast for fallbackString is a valid
type-narrowing of the generic fallback function for z.ZodString; keep the cast
but add a short inline comment above the declaration explaining that fallback is
a generic (<TSchema extends z.ZodTypeAny>) and TypeScript cannot infer the
specialized z.ZodString signature, so we intentionally narrow fallback to
(schema: z.ZodString, fallback: string) => z.ZodType<string, z.ZodTypeDef,
string> to satisfy the adapter usage; reference the symbols fallback and
fallbackString and mention z.ZodString in the comment for future maintainers.
examples/solid/search-validator-adapters/src/routes/users/zod.index.tsx (2)

40-40: ⚡ Quick win

Clarify the redundant fallback and default pattern.

The schema uses both fallbackString(z.string(), '') and .default(''), which both provide empty string defaults. This redundancy is confusing—does the fallback adapter handle validation failures while .default() handles undefined input?

Additionally, lines 17 and 46 still use ?? '' null coalescing, which shouldn't be necessary if the schema guarantees a string value.

Consider simplifying to either:

  • Use Zod v4 directly: search: z.string().catch('') (handles parse failures)
  • Or document why both mechanisms are needed in this adapter example
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/solid/search-validator-adapters/src/routes/users/zod.index.tsx` at
line 40, The schema for the "search" field currently uses both
fallbackString(z.string(), '') and .default(''), which is redundant; pick one
strategy (either rely on the adapter fallbackString or use Zod's own recovery
like z.string().catch('') / .default('')) and remove the duplicate. Update the
"search" property in the schema (the search: ... entry) to use only the chosen
mechanism and then remove the unnecessary null-coalescing (`?? ''`) usages
elsewhere in the module (the call sites that read the validated search value) so
they rely on the schema guarantee instead of manually defaulting.

10-13: ⚡ Quick win

Consider documenting or avoiding the unsafe type cast.

The double cast as unknown as completely bypasses TypeScript's type checker. While this may be necessary for adapter compatibility, it introduces type safety risk and isn't ideal for example code that developers will reference.

Consider either:

  1. Requesting proper type exports from @tanstack/zod-adapter to avoid the cast
  2. Adding a comment explaining why this cast is necessary
  3. Using Zod v4 directly without adapters (as done in other examples per the PR objectives)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/solid/search-validator-adapters/src/routes/users/zod.index.tsx`
around lines 10 - 13, The double cast using "fallback as unknown as (...) =>
z.ZodType<...>" (referenced by the symbols fallbackString and fallback and Zod
types z.ZodString/z.ZodType) bypasses TypeScript safety; fix by either (A)
changing the code to use Zod v4 types directly instead of the adapter so no
unsafe cast is needed, or (B) request/consume proper typed exports from
`@tanstack/zod-adapter` and replace the cast with the adapter's exported function
type, or (C) if the cast must remain, add a succinct inline comment explaining
why the double-cast is required and what assumptions it relies on (e.g., adapter
compatibility with z.ZodString -> z.ZodType<string,...>) so readers understand
the risk.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@e2e/solid-start/server-functions/src/routes/cookies/index.tsx`:
- Around line 4-7: The code uses a non-existent/typo Zod API `.prefault({})` on
the object schema; update the schema definition in cookieSchema (the
z.object({...}) chain) to use the correct Zod v4 API (e.g., `.default({})` if
you intend an object default) or remove the call if no object-level default is
needed, and ensure the `.catch(...)` fallback remains appropriate for parse
errors.

In `@e2e/vue-start/server-functions/src/routes/cookies/index.tsx`:
- Around line 4-7: The code uses a non-existent Zod v4 method .prefault({}) on
cookieSchema; either remove that call or replace it with the correct API: if you
intended a default object for the whole schema use .default(() => ({ value:
`CLIENT-${Date.now()}` })) on the z.object(...) instead of .prefault({}), or if
you meant to allow missing properties use .partial() on the z.object; update the
cookieSchema declaration (the z.object({ value: z.string().default(...) })
chain) to use the appropriate method and keep the .catch(...) fallback only if
still needed.

In `@examples/react/start-trellaux/src/db/schema.ts`:
- Around line 7-20: The z.coerce calls use invalid generic syntax; replace
z.coerce.number<number>() and z.coerce.string<string>() with the standard Zod
forms z.coerce.number() and z.coerce.string() in the schema definitions (e.g.,
the order field in the item schema, the boardId fields in columnSchema and
boardSchema) so the coercion uses the correct Zod API.

---

Nitpick comments:
In `@examples/react/search-validator-adapters/package.json`:
- Line 7: The build script in package.json uses the Unix-only prefix
NODE_OPTIONS=--max-old-space-size=4096 (the "build" script), which breaks on
Windows; update the "build" script to use cross-env (e.g., prefix with cross-env
NODE_OPTIONS=--max-old-space-size=4096) and add cross-env to devDependencies so
the script is cross-platform and portable.

In `@examples/react/search-validator-adapters/src/routes/users/zod.index.tsx`:
- Line 40: The `search` schema currently uses both fallbackString and .default
on z.string(), which is redundant; either keep the dual pattern but add a brief
inline comment next to the search field explaining that fallbackString handles
validation errors while .default handles undefined (this clarifies the Zod v4
migration intent), or simplify the schema by replacing the dual pattern with a
single clearer construct using z.string() with a default and a catch for
validation failures (refer to the symbols fallbackString, .default, z.string(),
and .catch to locate the change).
- Around line 10-13: The explicit cast for fallbackString is a valid
type-narrowing of the generic fallback function for z.ZodString; keep the cast
but add a short inline comment above the declaration explaining that fallback is
a generic (<TSchema extends z.ZodTypeAny>) and TypeScript cannot infer the
specialized z.ZodString signature, so we intentionally narrow fallback to
(schema: z.ZodString, fallback: string) => z.ZodType<string, z.ZodTypeDef,
string> to satisfy the adapter usage; reference the symbols fallback and
fallbackString and mention z.ZodString in the comment for future maintainers.

In `@examples/solid/search-validator-adapters/src/routes/users/zod.index.tsx`:
- Line 40: The schema for the "search" field currently uses both
fallbackString(z.string(), '') and .default(''), which is redundant; pick one
strategy (either rely on the adapter fallbackString or use Zod's own recovery
like z.string().catch('') / .default('')) and remove the duplicate. Update the
"search" property in the schema (the search: ... entry) to use only the chosen
mechanism and then remove the unnecessary null-coalescing (`?? ''`) usages
elsewhere in the module (the call sites that read the validated search value) so
they rely on the schema guarantee instead of manually defaulting.
- Around line 10-13: The double cast using "fallback as unknown as (...) =>
z.ZodType<...>" (referenced by the symbols fallbackString and fallback and Zod
types z.ZodString/z.ZodType) bypasses TypeScript safety; fix by either (A)
changing the code to use Zod v4 types directly instead of the adapter so no
unsafe cast is needed, or (B) request/consume proper typed exports from
`@tanstack/zod-adapter` and replace the cast with the adapter's exported function
type, or (C) if the cast must remain, add a succinct inline comment explaining
why the double-cast is required and what assumptions it relies on (e.g., adapter
compatibility with z.ZodString -> z.ZodType<string,...>) so readers understand
the risk.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8027542d-0f8b-4ef9-a8ca-52f65c64a50d

📥 Commits

Reviewing files that changed from the base of the PR and between 5eed2c9 and abd959d.

📒 Files selected for processing (9)
  • e2e/react-start/server-functions/src/routes/cookies/index.tsx
  • e2e/solid-start/server-functions/src/routes/cookies/index.tsx
  • e2e/vue-start/server-functions/src/routes/cookies/index.tsx
  • examples/react/search-validator-adapters/package.json
  • examples/react/search-validator-adapters/src/routes/users/zod.index.tsx
  • examples/react/start-convex-trellaux/src/db/schema.ts
  • examples/react/start-trellaux/src/db/schema.ts
  • examples/solid/search-validator-adapters/package.json
  • examples/solid/search-validator-adapters/src/routes/users/zod.index.tsx

@Sheraff Sheraff merged commit 9f6258f into main May 20, 2026
20 checks passed
@Sheraff Sheraff deleted the opencode/quick-garden branch May 20, 2026 06:41
birkskyum added a commit that referenced this pull request Jun 1, 2026
* fix: republish react-start-rsc dependency chain

* ci: changeset release

* chore: sync published start package versions

* ci: changeset release

* fix publishing

* ci: changeset release

* fix

* ci: apply automated fixes

* ci: changeset release

* refactor: switch router stores to atom get/set API (#7150)

* ci: changeset release

* refactor: shorten internal router store names (#7152)

* ci: changeset release

* chore(types): re-export SearchMiddleware type from react-router (#7087)

* fix(start-plugin-core): reuse deduped server function ids across compilers (#7153)

* ci: changeset release

* fix(router-core): avoid false notFound matches for proxied loader data (#7156)

* fix(router-core): avoid false notFound matches for proxied loader data

* test(react-start): cover proxied loader data notFound regression

* test(react-start): move notFound regression to rsc direct loader

* chore: add changeset

* ci: changeset release

* fix: reduce start SSR manifest asset duplication (#7157)

Co-authored-by: schiller-manuel <schiller-manuel@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* ci: changeset release

* docs: fix file extension syntax for prefix/suffix routing examples (#7149)

docs: fix file-based routing examples with literal dots

* chore: bump to h3 v2 rc.20 (#7140)

* ci: changeset release

* chore: stabilize tests (#7159)

* chore: add vite 8 to peer deps (#7160)

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: changeset release

* chore(start-server-core): remove unnecessary `any` in `getRequestHeaders` (#7164)

* fix(router-generator): harden route file transform rewrites (#7167)

* fix docs (#7168)

* ci: changeset release

* fix(router-plugin): update vite-plugin-solid peer dependency to support version 3.0.0-0 (#7170)

* ci: changeset release

* fix(router-generator): normalize virtual physical subtree paths (#7169)

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* ci: changeset release

* fix: unify virtual module handling for Start Vite plugins (#7178)

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
Co-authored-by: schiller-manuel <schiller-manuel@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* ci: changeset release

* fix: add react-server server export for react-start (#7180)

* ci: changeset release

* fix(docs): correct server function name in example (#7173)

* fix react server exports for start and react-router (#7183)

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* chore: stabilize tests (#7185)

* ci: changeset release

* fix(router-core): avoid intermediate success state for async notFound (#7184)

* ci: changeset release

* Add a React Start server-components skill (#7181)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* chore: add sharding for playwright tests (#7187)

* add sharding

* fix dependnancy

* fix playwright shard port reuse

* full bust

* throw more runners into this run

* try to throw money at it and see the effect

* tune

* fix react-router shared route css persistence on nav (#7186)

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* ci: changeset release

* chore: stabilize test (#7192)

* fix(start): include Vite style.css when cssCodeSplit is disabled (#7191)

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* ci: changeset release

* chore: bump solid-js override 1.9.12 (#7202)

* chore: bump query override to 5.99.0 (#7203)

* fix(solid-router): use keyed Show in Outlet to fix child route rendering with useQuery (#7204)

* ci: changeset release

* docs(start): fix authenticated routes doc URL (#7214)

* chore(deps): vitest 4.1.4 (#7212)

* stabilize rsc tests (#7217)

* fix(react-router): prevent webpack static analysis of React.use with let binding (#7182)

* ci: changeset release

* stabilize test (#7220)

* chore: unify react-start basic e2e mode projects (#7206)

* feat(nx): support rsbuild in Playwright inference (#7221)

* test(e2e-rsc): migrate to playwrightModes and dynamic inferred dist (#7222)

* fix(nx): align playwright mode build target naming (#7223)

* docs(start): add missing space after comma in 'Handling requests with a body' (#7234)

* update intent workflow (#7243)

* rsbuild plugin (#7228)

Co-authored-by: neverland <chenjiahan.jait@bytedance.com>
Co-authored-by: Keven Arroyo <dake.3601@gmail.com>

* ci: changeset release

* fix: Split Start plugin core (#7249)

* ci: changeset release

* update intent workflow (#7244)

* fix: asset sorting (#7251)

* ci: changeset release

* chore(deps): update Rsbuild related deps to v2.0.1 (#7245)

* fix actions again? (#7252)

* inline css (#7253)

* ci: changeset release

* fix: do not import 'react-refresh/runtime' (#7255)

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* ci: changeset release

* chore(examples): checkin git outdated route-tree files for react and solid examples (#7257)

* add new bundlesize measurements for rsbuild (#7256)

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* refactor(router-plugin): upgrade unplugin to `v3` (#7258)

* refactor(router-plugin): upgrade unplugin to `v3`

* refactor(start-client-core): use a more explicit typing to `CustomFetch` type

* chore(examples): runtime enforce for needing the `VITE_CONVEX_URL`

* ci: changeset release

* fix: issue 7240 causing fouc (#7250)

* fix: server middleware type in solid-router (#7260)

* replace tsx by jiti (#7261)

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* ci: changeset release

* docs: Fix server function middleware prop (#7262)

* feat(query): add support for custom dehydrate and hydrate options in SSR integration (#7246)

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: changeset release

* fix: use loader data goes undefined (#7265)

* fix: streaming when using Await component (#7264)

* ci: changeset release

* fix(solid-start): bundle solid-query packages during SSR to fix duplicate QueryClientContext (#6151) (#7267)

* ci: changeset release

* fix(solid-router): hydration mismatch for ssr='data-only' with pendingComponent (#7266)

* docs(router): fix typo in doc (#7268)

* ci: changeset release

* fix(router-core): wildcard nodes respect DFS priority like other nodes in route matching (#7273)

* ci: changeset release

* fix(solid-router): enable route component HMR for Solid

* ci: apply automated fixes

* Revert "ci: apply automated fixes"

This reverts commit 7122f28.

* Revert "fix(solid-router): enable route component HMR for Solid"

This reverts commit b86b061.

* fix(react-start-rsc): re-export renderable types from public entries (#7278)

* fix(react-start-rsc): re-export renderable types from public entries

* changeset - patch

* ci: changeset release

* fix: disabled topLevelVar (#7293)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: changeset release

* fix: fix exports for react-start so useServerFn is available with RSC (#7292)

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* feat: match params (#7263)

* ci: changeset release

* fix(start-plugin-core): sort server fn manifest entries for deterministic build output (#7287)

Co-authored-by: Dor Alagem <doralagem@MacBook-Pro-sl-Dor.local>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Manuel Schiller <meisterpink@gmail.com>

* docs: remove redundant code example from query integration doc (#7298)

* ci: changeset release

* fix: Ignore fully type-only imports and re-exports when collecting im… (#7305)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: changeset release

* feat: `strict: false` for server functions (#7277)

* feat: `strict: false` for server functions

Add a `strict` option to `createServerFn` for type-level server function serialization checks

* feat: `strict: false` for server functions [Self-Healing CI Rerun]

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* ci: changeset release

* fix: parse params union inference (#7306)

* ci: changeset release

* feat: rsc css (#7310)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: changeset release

* fix(router-plugin): isolate route metadata per plugin instance (#7313)

* ci: changeset release

* docs: Improve key differences b/w Start Server Functions and Next.js Server Actions (#7312)

* fix(deps): move fetchdts from devDependencies to dependencies (#7317)

* Revise bug report template for clarity and requirements

Updated the bug report template to clarify the requirements for a reproducer project and modified some labels and descriptions for better clarity.

* ci: changeset release

* chore: fix duplicate "the" typo across router packages (#7323)

* feat: early hints (#7324)

* ci: changeset release

* feat: Link header (#7327)

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* ci: changeset release

* docs(skills): address 8 agent failure modes from user feedback (#7314)

* docs(skills): address 8 agent failure modes from external feedback

Adds new start-core/auth-server-primitives skill (sessions, cookies,
OAuth+PKCE, password-reset enumeration defense, CSRF, rate limiting,
session rotation) and updates 8 existing skills + matching docs to fix
patterns where agents produce insecure or wrong-framework output.

Skill changes:
- new: start-core/auth-server-primitives (server half of auth)
- router-core/auth-and-guards: route guard != RPC guard
- start-core/server-functions: wrong import path, RPC auth required,
  Cache-Control public is a cross-tenant leak, wrong-framework patterns
- start-core/middleware: wrong import path, sendContext shape vs access
  (3-layer wrong/still-wrong/correct), authMiddleware framing
- start-core/execution-model: file markers (server-only/client-only),
  module-level process.env is undefined under Worker SSR
- start-core/deployment: cloudflare env-at-request-time
- router-core/ssr: wrong file structures (next.js, react-router-dom)
- router-core/type-safety: wrong-framework imports + structures

Docs updated to mirror each skill change so source-of-truth and the
intent-indexed skill stay in sync. New authentication-server-primitives
guide is the long-form companion to the new skill.

intent validate: 30 skill files pass (was 29).

* ci: apply automated fixes

* docs(skills): address coderabbit review feedback

- Fix internal docs links to use correct relative paths instead of an
  absolute /start/latest/... URL and missing one ../ segment
- Remove blank line inside auth-and-guards blockquote (markdownlint MD028)
- Restore overload pattern in type-safety ValidateNavigateOptions and
  ValidateRedirectOptions examples; the casts I had introduced stripped
  generic context and contradicted the skill's own no-cast rule
- Add db.sessions.revokeAllForUser before create in login rotation
  snippets so the example matches the prose
- Soften useServerFn guidance: it's required only when the server
  function throws redirect/notFound; plain-data calls work directly and
  via useMutation/useQuery

* ci: apply automated fixes

* docs(skills): compress type-safety to stay under 500-line cap

Prettier's autofix expanded my single-line overload signatures across
multiple lines, pushing the file over the 500-line limit. Drop the
redundant fetchOrRedirect example (same pattern as useDelayedNavigate)
and describe ValidateRedirectOptions usage in prose instead.

* docs(skills): CSRF origin check should compare full origin, not host alone

Comparing only new URL(origin).host against APP_HOST silently accepts a
mismatched scheme — http://example.com would pass a check meant for
https://example.com. Compare the full origin (scheme + host + port)
against APP_ORIGIN instead. Same fix in skill and docs.

* docs(skills): make useDelayedNavigate callback truly return void

The callback returned the result of setTimeout (a timer handle), not
void as the public overload's return type implied. Wrap in a block so
the example matches the declared return type.

Skipped the related nitpick to add a separate redirect example — the
existing prose already describes the same overload pattern, and a
duplicate example would push the file close to the 500-line cap that
prettier autofix has been bumping us against.

* docs(skills): fix two real bugs in auth-server-primitives examples

1. Cookie parser truncated values containing '='. Signed cookies, JWTs,
   and base64-padded values all use '='. Use indexOf to split on the
   FIRST '=' only.

2. Login example short-circuited verifyPasswordHash on user-not-found,
   contradicting the prose's "same time, same error" claim — the
   no-user branch returned instantly while wrong-password spent ~100ms
   hashing, leaking account existence over the wire. Always verify
   against a hash; use a precomputed DUMMY_PASSWORD_HASH when the user
   is missing, then combine with the user-exists bit for the final ok.

Same fixes in the SKILL.md and the docs companion.

* docs(skills): address manuel's review on react-specific guides

- middleware.md, server-functions.md: drop cross-framework <framework>
  placeholders; this is the React-specific guide, just say
  @tanstack/react-start
- execution-model.md: drop the same trailing line about solid-start /
  vue-start paths
- hosting.md: remove the Cloudflare env-handling subsection — the
  general per-request rule lives in environment-variables.md and
  doesn't need to be repeated under a specific host
- environment-variables.md: mention the cloudflare:workers env binding
  as the canonical Cloudflare way to read env (including module scope),
  per Manuel's link to the Cloudflare docs
- deployment skill: same upgrade — show the cloudflare:workers env
  pattern alongside the per-request handler approach

* docs(skills): drop redundant server-only marker in session example

The file already imports from @tanstack/react-start/server, which is
on import protection's default client-deny specifier list. The
side-effect marker is redundant — drop it. Same fix in skill and docs.

* docs(skills): drop wrong-import-path mistakes — TS already catches them

Manuel pointed out that TypeScript catches both common wrong paths:
'@tanstack/react-router' has no exported member createServerFn /
createMiddleware, and '@tanstack/start' is "Cannot find module". Skill
space is precious; the items don't earn their slot if tsc handles them.

Removed:
- Common Mistake "Wrong import path" from server-functions and
  middleware skills (renumbered the remaining mistakes)
- The matching top-of-file CRITICAL line in both skills
- The "Import path" callouts in the middleware and server-functions
  docs

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* remove old intent artifacts (#7333)

* fix(start-server-core): fall back to GET handler for HEAD requests (RFC 9110 §9.3.2) (#7325)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: changeset release

* test: add reproducer for #2514 (#7336)

* test: reproducer for #2547 (#7337)

* fix: fix plain TypeScript parser handling (#7342)

* ci: changeset release

* fix: disable rsbuild server compression (#7348)

* fix: update deps (#7340)

* ci: changeset release

* update bundlesize benchmark (#7356)

* fix: Bump jiti to 2.7.0 (#7355)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* ci: apply automated fixes

* ci: changeset release

* Document server function strict serialization options (#7358)

* Document server function strict option

Agent-Logs-Url: https://github.com/TanStack/router/sessions/8deabe7a-7412-455e-9111-97a13cb4582e

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* Refine strict docs wording

Agent-Logs-Url: https://github.com/TanStack/router/sessions/e2857d6e-314e-496c-b99b-78c207c28c77

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* feat(start): CSRF middleware (#7373)

* fix(router-core): fix missing closing paren in CSS.supports check for view transition types (#7369)

* fix: fix jiti usage for tsconfig paths (#7382)

* Enable jiti tsconfig path aliases

Agent-Logs-Url: https://github.com/TanStack/router/sessions/0a481c9b-eb97-4543-acc5-71d43b97d386

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* Use fixture for jiti tsconfig aliases

Agent-Logs-Url: https://github.com/TanStack/router/sessions/182b9baa-9e54-4813-a322-c33a1da5417d

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* Track fixture path alias helper

Agent-Logs-Url: https://github.com/TanStack/router/sessions/182b9baa-9e54-4813-a322-c33a1da5417d

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* Add router-generator changeset

Agent-Logs-Url: https://github.com/TanStack/router/sessions/ab1a42cc-7326-4e36-a656-f01179221cee

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* Format virtual config fixture

Agent-Logs-Url: https://github.com/TanStack/router/sessions/22194166-b3a7-431e-b723-ad594d4b0405

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* Update bundle-size.yml

* Update labeler.yml

* Update bundle-size.yml

* ci: add pinGitHubActionDigests (#7387)

* chore(deps): pin dependencies (#7388)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* minor semver bump to all packages (#7395)

* ci: zizmor (#7389)

* chore(pnpm): update pnpm to v11 (#7392)

* chore: add CODEOWNERS file (#7394)

* chore: add CODEOWNERS file

* chore: add Nx and NPMRC

* Update .github/CODEOWNERS

---------

Co-authored-by: Nicolas Beaussart <nic.beaussart@gmail.com>

* fix: revert plugin changes, createCsrfMiddleware compilation, fix HMR tests (#7400)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Manuel Schiller <manuel.schiller@caligano.de>

* ci: align release workflow to query (#7404)

* ci: Version Packages (#7405)

ci: changeset release

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(start): add inline CSS runtime controls and asset URL templates (#7380)

* ci: Version Packages (#7407)

* fix: Fix literal underscore paths under pathless layouts (#7408)

* ci: Version Packages (#7409)

ci: changeset release

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(router-core): params.priority route option as tie breaker in matching algorithm (#7411)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: Version Packages (#7413)

* fix(router-core): hydrate before initial client route match (#7416)

* ci: Version Packages (#7417)

* fix(router-plugin): detect typed root route context for HMR (#7420)

* ci: Version Packages (#7421)

* fix: fix route mismatch warnings and HMR route indexes (#7422)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: Version Packages (#7423)

* security: stricter pnpm config blockExoticSubdeps & trustPolicy (#7425)

* docs(start): use router package for module declaration to type the request context (#7427)

* feat: deferred hydration (#7362)

* feat: deferred hydration

* fix

* tests

* solid tests

* Changes before error encountered

Agent-Logs-Url: https://github.com/TanStack/router/sessions/5263c469-75c2-4470-bd4c-86f9b43964f4

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* chore: address hydration review follow-ups

Agent-Logs-Url: https://github.com/TanStack/router/sessions/16e27113-ff01-4de8-aded-b9be9f6dd4ff

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

* fix(start-client-core): correct import order in hydrateStart.ts

Co-authored-by: schiller-manuel <schiller-manuel@users.noreply.github.com>

* chore: remove tracked nx self-healing artifacts

Agent-Logs-Url: https://github.com/TanStack/router/sessions/95750760-1348-437c-8f73-cc45e899003a

Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: schiller-manuel <schiller-manuel@users.noreply.github.com>

* chore: update @swc/core in example/react/quickstart-webpack-file-based (#7434)

* chore: update @swc/core in example/react/quickstart-webpack-file-based

* chore: update @swc/core in example/react/quickstart-webpack-file-based [Self-Healing CI Rerun]

---------

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>

* docs(start): compare deferred hydration to Astro islands (#7438)

Adds a short mental-model section answering the common question
about how TanStack Start's deferred hydration relates to Astro
islands.

* docs(start): compare deferred hydration to React selective hydration (#7442)

Adds a short comparison section answering the common question about how
TanStack Start's deferred hydration relates to React 18's selective
hydration. The framing: selective hydration controls the order of
inevitable hydration work; deferred hydration controls whether and when
that work happens at all.

* chore: update chokidar to v5 (#7439)

* chore: update @rolldown/pluginutils to 1.0.1 (#7440)

* chore: update zod to v4.4.3 (#7441)

* chore: update zod to v4.4.3

* fix(start): preserve route path defaults

* fix(examples): resolve zod 4 build failures

* chore: update express and webpack-dev-server (#7443)

* chore: update express to v5.2.1

* chore: update webpack-dev-server to v5.2.4

* ci: Version Packages (#7435)

ci: changeset release

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* chore: ignore nx generated folders (#7451)

* perf: optimize and test rewrite (#7448)

optimize and test rewrite

* fix: fix scroll restoration issues (#7447)

Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

* ci: Version Packages (#7452)

* fix: Fix escaped underscore index route generation (#7453)

* ci: Version Packages (#7454)

* ci: fix release notes diff range after Release PR flow (#7456)

* fix(start): explicitly re-export public API to survive SSR cold-start cycle (#7466)

* fix: Fix hash scrolling with `resetScroll={false}` (#7464)

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* chore: enforce pnpm 11 (#7465)

* ci: Version Packages (#7467)

* chore: only run autofix on PRs (#7469)

* feat(start): support rsbuild iife client output (#7477)

* ci: Version Packages (#7478)

* fix: bundled dev support for vite (#7482)

* ci: Version Packages (#7483)

* fix(start): avoid encoded virtual adapter ids in vite dev (#7484)

* fix release (#7487)

* ci: Version Packages (#7485)

* chore: migrate changesets changelog generator (#7490)

* fix: Fix Hydrate re-exports to avoid circular HMR updates (#7492)

* ci: Version Packages (#7493)

* fix(start): emit boot-sibling chunks as scripts for IIFE entries (#7501)

Co-authored-by: Keven Arroyo <kevenarroyo@microsoft.com>

* ci: Version Packages (#7502)

* chore: stabilize tests (#7503)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: fix streaming (#7497)

* ci: Version Packages (#7504)

ci: changeset release

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* ci: update all actions (#7506)

* ci: update all actions

* disable package manager cache

* fix: fix primitive beforeLoad errors (#7505)

* fix: fix primitive beforeLoad errors

* ci: apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: Version Packages (#7508)

* feat(rsbuild): add RSC support (#7509)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* ci: Version Packages (#7513)

* fix(solid): resolve Solid 2 merge issues

* ci: apply automated fixes

* use v2 query

* fix solid v2 imports

* solid v2 port of new e2e

* solid v2

* nxignore solid v1 peer deps

* use "@rsbuild/plugin-solid": "^2.0.0-beta.0",

* fix hydrationscript

* add nohydration

* remove early return

* fix: solid-start hydration

* fix: update createEffect to return true for hydration signals

* remove nxignore

* add back nxignore for 3rdparty deps

* $_TSR stub to fix serialization tests

* Revert "$_TSR stub to fix serialization tests"

This reverts commit ef802e9.

* fix: update solid selective ssr links

* fix: stream solid Await fallback

* align solid-start basic by removing test:e2e

* remove unusese build:prerender build:spa

* fix: clean up solid hydrate fallback dom

* fix: resolve solid wrapper children

* fix: stabilize serialization stream e2e test

* fix: keep SSR globals through document parse

* html standard mode

* clean

* fix: pass solid ssr manifest

* use await fallback

---------

Co-authored-by: Tanner Linsley <tannerlinsley@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Manuel Schiller <manuel.schiller@caligano.de>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Flo <fpellet@ensc.fr>
Co-authored-by: James Howard <james@reetgood.co.uk>
Co-authored-by: schiller-manuel <schiller-manuel@users.noreply.github.com>
Co-authored-by: nx-cloud[bot] <71083854+nx-cloud[bot]@users.noreply.github.com>
Co-authored-by: Mohamed Khaled <mohamedkhaled012@yahoo.com>
Co-authored-by: Birk Skyum <74932975+birkskyum@users.noreply.github.com>
Co-authored-by: schiller-manuel <6340397+schiller-manuel@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Ulrich Stark <github@ustark.de>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
Co-authored-by: MoonBrillante <32852571+MoonBrillante@users.noreply.github.com>
Co-authored-by: Coding Cossack <108333654+CodingCossack@users.noreply.github.com>
Co-authored-by: Nicolas Beaussart <nic.beaussart@gmail.com>
Co-authored-by: Pavan Shinde <pavann97@gmail.com>
Co-authored-by: mixelburg <52622705+mixelburg@users.noreply.github.com>
Co-authored-by: Mukunda Rao Katta <mukunda.vjcs6@gmail.com>
Co-authored-by: Sarah Gerrard <gerrardsarah@gmail.com>
Co-authored-by: neverland <chenjiahan.jait@bytedance.com>
Co-authored-by: Keven Arroyo <dake.3601@gmail.com>
Co-authored-by: Sean Cassiere <33615041+SeanCassiere@users.noreply.github.com>
Co-authored-by: Abhishek Raj <abhi@raj.me>
Co-authored-by: Dominik Dorfmeister 🔮 <office@dorfmeister.cc>
Co-authored-by: Birk Skyum <birk.skyum@pm.me>
Co-authored-by: Keven Arroyo <kevenarroyo@microsoft.com>
Co-authored-by: Dor Alagem <dor3382@gmail.com>
Co-authored-by: Dor Alagem <doralagem@MacBook-Pro-sl-Dor.local>
Co-authored-by: Manuel Schiller <meisterpink@gmail.com>
Co-authored-by: Franklin Shera <fshera96@gmail.com>
Co-authored-by: Tom Smithhisler <tomsmithhisler@gmail.com>
Co-authored-by: dfedoryshchev <64079946+dfedoryshchev@users.noreply.github.com>
Co-authored-by: Sarah Gerrard <hello@sarahgerrard.me>
Co-authored-by: Zelys <zelys@dfkhelper.com>
Co-authored-by: Shkumbin Hasani <34962865+shkumbinhasani@users.noreply.github.com>
Co-authored-by: Lachlan Collins <1667261+lachlancollins@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Harry Whorlow <79278353+harry-whorlow@users.noreply.github.com>
Co-authored-by: Corbin Crutchley <git@crutchcorn.dev>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant