Skip to content

Add variadic path parameters support#7735

Open
IderAghbal wants to merge 2 commits into
TanStack:mainfrom
IderAghbal:feat/variadic-path-params
Open

Add variadic path parameters support#7735
IderAghbal wants to merge 2 commits into
TanStack:mainfrom
IderAghbal:feat/variadic-path-params

Conversation

@IderAghbal

@IderAghbal IderAghbal commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Hi team,

This PR is both a proposal and its implementation. I am open to any feedback or change of direction.

Summary

This PR adds a new path-segment kind, spelled {...$param}, which is a named, non-terminal, multi-segment parameter:

/$bucket/{...$folders}/$file/versions/$versionId

It matches zero or more URL segments in the middle of a path, binds them as Array<string> (per-segment decoded), and, unlike the existing $ splat, allows routes to continue after it. A route path may contain up to three variadic segments if consecutive ones are separated by a static segment.

Problem

TanStack Router's grammar today has exactly one multi-segment construct: the $ splat, and it is greedy-terminal. It consumes the remainder of the URL and cannot have children.

That makes an entire family of URL schemes (paths where a variable-depth hierarchy sits between fixed parts of the URL, like /files/{path…}/preview or /$bucket/{...$folders}/$file/versions/$versionId) inexpressible as typed routes.

The only workaround inside the current grammar is unrolling depth into repeated optionals. E.g.

/$bucket/{-$d1}/{-$d2}/{-$d3}/{-$d4}/{-$d5}/$file/versions/$versionId

Proposed syntax

{...$param} joins the existing braced-segment family ({-$param} optional, {prefix{$id}suffix}, {$}), and ... reads as JS spread, familiar from Next.js's [...slug].

The value is Array<string> rather than a joined string because a joined string cannot distinguish an encoded / (%2F) inside a segment from a segment separator. An array preserves the distinction, and interpolation re-encodes per element.

Matching semantics

  • The variadic is non-greedy and consumes as few segments as the rest of the pattern allows; when several lengths could match (optionals in the continuation), fewest-consumed wins.
  • The ranking of segment positions is the following: static > required param > optional param > variadic > splat.
  • The following is rejected at route-tree processing time: two variadics, or a variadic followed by a splat, without a static segment between them (params and optionals do not count as separators), and prefixes/suffixes on a variadic. This is because an unanchored boundary between two unbounded segments would leave the first one structurally empty on every URL, and prefixes and suffixes are single-segment concepts with no clear meaning on a multi-segment match.
  • The variadic is practically additive. {...$param} previously fell through to the tokenizer's literal-static fallback, so only a route deliberately matching that literal text would change behavior. No existing app's matching order can change.

Examples

Route URL Result
/$bucket/{...$folders}/$file /media/kyoto.jpg {bucket:'media', folders:[], file:'kyoto.jpg'}
/$bucket/{...$folders}/$file /media/photos/2026/kyoto.jpg {folders:['photos','2026'], file:'kyoto.jpg'}
/$bucket/{...$folders}/$file/versions/$id /media/photos/kyoto.jpg/versions/42 {folders:['photos'], file:'kyoto.jpg', id:'42'}
/$bucket/{...$folders}/$file and /$bucket/settings /media/settings static wins, settings route
/files/{...$path}/preview /files/preview {path:[]}

Usage with Link

  • params.folders: ['a','b'] -> /a/b (each element encodeURIComponent-encoded, joined with /).
  • [] or undefined -> the segment is omitted entirely (no double slashes).
  • Not counted toward isMissingParams.

Summary by CodeRabbit

  • New Features
    • Added variadic path parameters with {...$param} to match zero or more middle segments and capture decoded values as Array<string>.
    • Updated route matching and interpolation to support variadic captures, including zero-consumption and per-entry encoding/joining.
    • Extended route param typings so variadic params resolve to arrays.
  • Bug Fixes
    • Improved routing precedence and validation, enforcing variadic constraints (non-greedy matching, separator rules, and limits).
  • Documentation
    • Added “Variadic Path Parameters” guidance with examples and updated routing precedence notes.
  • Tests
    • Added type-level and runtime coverage for parsing, matching, extraction, interpolation, and precedence.

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds non-terminal variadic path parameters ({...$param}) across router parsing, matching, interpolation, validation, tests, and documentation.

Changes

Variadic path parameters feature

Layer / File(s) Summary
Type-level parsing and param resolution
packages/router-core/src/link.ts, packages/router-core/src/route.ts
ParsePathParamsResult gains a variadic generic/field propagated through boundary/symbol/escape parsing logic; ResolveParams intersects a new ResolveVariadicParams mapping variadic params to Array<T>.
Route tree parsing and trie construction
packages/router-core/src/new-process-route-tree.ts
Adds SEGMENT_TYPE_VARIADIC constant/lane sizing, parseSegment recognition of {...$param}, nearestAnchor invariant helper, trie construction branch for variadic nodes with ordinal tracking, and sorting/schema updates for variadic node lists.
Matching, extraction, and ranking
packages/router-core/src/new-process-route-tree.ts
Adds RawRouteParams type, variadic-aware match stack state (variadics/variadicCounts), a dedicated variadic matching phase, array-based param extraction, widened params.parse typing, and specificity ranking that accounts for variadics.
Path interpolation
packages/router-core/src/path.ts
interpolatePath gains a SEGMENT_TYPE_VARIADIC branch that joins encoded array items with / or omits the segment when empty/absent.
Generator and eslint param extraction
packages/router-generator/src/utils.ts, packages/router-generator/src/validate-route-params.ts, packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts
Brace-pattern and split regexes are updated to recognize {...$paramName} alongside existing route token forms.
Tests
packages/router-core/tests/variadic-path-params.test.ts, packages/router-core/tests/variadic-path-params.test-d.ts, packages/router-core/tests/new-process-route-tree.test.ts, packages/router-generator/tests/utils.test.ts, packages/eslint-plugin-router/src/__tests__/route-param-names.utils.test.ts
New runtime and type-level test suites cover parsing, invariants, matching, ranking, params.parse interplay, interpolation, and route-path generation; existing snapshots and parser tests are updated for variadic fields and syntax.
Documentation and changeset
.changeset/variadic-path-params.md, docs/router/guide/path-params.md, docs/router/routing/route-matching.md, docs/router/routing/routing-concepts.md, docs/start/framework/react/migrate-from-next-js.md
Adds changeset and documentation sections describing variadic syntax, matching behavior, ranking, constraints, and Next.js migration mapping.

Estimated code review effort: 4 (Complex) | ~75 minutes

Suggested labels: documentation, package: router-generator, package: router-core

Suggested reviewers: Sheraff, nlynzaad

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding support for variadic path parameters.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (4)
packages/router-generator/src/validate-route-params.ts (2)

53-70: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Regex update looks correct; minor stale comment.

The updated bracePattern correctly captures the ...$ prefix alongside -$/$, and since only match[2] (the param name) is used here, validity checking is unaffected by prefix type. One nit: the comment at Line 62 (// This is a wildcard {$} or {-$}, skip) doesn't mention that a nameless {...$} is now also silently skipped via the same branch.

📝 Suggested comment tweak
-    if (!paramName) {
-      // This is a wildcard {$} or {-$}, skip
+    if (!paramName) {
+      // This is a wildcard {$}, {-$}, or {...$}, skip
       continue
     }
🤖 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 `@packages/router-generator/src/validate-route-params.ts` around lines 53 - 70,
The brace-pattern handling in validate-route-params.ts is correct, but the stale
inline comment in the wildcard branch no longer reflects the supported patterns.
Update the comment near the paramName guard in validateRouteParams to note that
nameless {...$} is also skipped, alongside {$} and {-$}, so the documentation
matches the current bracePattern behavior.

55-55: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

Duplicated brace-pattern regex across two packages.

The same bracePattern regex (and near-identical extractParamsFromSegment logic) now exists in both this file and packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts. Any future change to the variadic/optional param syntax will need to be kept in sync manually across both packages, risking drift.

🤖 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 `@packages/router-generator/src/validate-route-params.ts` at line 55, The
bracePattern regex and extractParamsFromSegment logic are duplicated between
validate-route-params and route-param-names.utils, so update this code to use a
shared helper instead of maintaining two copies. Move the regex and segment
parsing behavior into a common utility that both packages can import, then have
validate-route-params and the route-param-names rule consume that shared
implementation to keep variadic/optional param syntax changes in one place.
packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts (2)

25-79: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add test coverage for {...$paramName} extraction.

Existing tests (per provided context in route-param-names.utils.test.ts) cover $param, {$param}, and {-$param} but no case is shown for the new {...$paramName} variadic form, including its isOptional: false behavior and fullParam value. Since this file is the entry point for eslint recognizing the new syntax, add explicit tests for it.

🤖 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
`@packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts`
around lines 25 - 79, Add test coverage in route-param-names.utils.test.ts for
the new variadic `{...$paramName}` form handled by extractParamsFromSegment in
route-param-names.utils.ts. Create explicit assertions that the parser returns
the extracted param with the correct paramName, fullParam value, and isOptional:
false, alongside the existing `$param`, `{$param}`, and `{-$param}` cases.

3-12: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Stale doc comments after adding variadic prefix support.

The fullParam JSDoc (Line 4) and the inline comment at Line 60 still only reference $userId/-$optional and "$" or "-$" respectively, without mentioning the new ...$paramName variadic form now handled by the regex.

📝 Suggested comment updates
-  /** The full param string including $ prefix (e.g., "$userId", "-$optional") */
+  /** The full param string including $ prefix (e.g., "$userId", "-$optional", "...$items") */
-    const prefix = match[1] // "$" or "-$"
+    const prefix = match[1] // "$", "-$", or "...$"

Also applies to: 54-61

🤖 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
`@packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts`
around lines 3 - 12, Update the stale documentation in ExtractedParam and the
related parsing comments so they reflect the new variadic parameter form handled
by the route param regex. In route-param-names.utils.ts, revise the JSDoc for
fullParam and the inline comments around the regex logic to mention
...$paramName alongside $userId and -$optional, keeping the descriptions aligned
with the actual behavior in the route param parsing helpers.
🤖 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 `@docs/router/guide/path-params.md`:
- Line 811: The path-params guide wording is too narrow about variadic segment
restrictions. Update the sentence in the path-params documentation so that the
rule around variadics and splats matches the behavior in the router tests: a
variadic must be separated from a wildcard/splat by a static segment, not just
not “directly followed” by one. Keep the rest of the variadic-segment
explanation in sync with the behavior described by the route parsing rules.

In `@docs/router/routing/routing-concepts.md`:
- Around line 376-378: Clarify the route ranking sentence in the variadic
parameter section: the current wording says variadic routes are below optional
routes, but the example in the same paragraph uses both a dynamic route and an
optional route. Update the text around the variadic parameter precedence note so
it either says “dynamic and optional” or splits the example to match the actual
routes shown, keeping the terminology consistent with the Path Params/variadic
route documentation.

---

Nitpick comments:
In
`@packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts`:
- Around line 25-79: Add test coverage in route-param-names.utils.test.ts for
the new variadic `{...$paramName}` form handled by extractParamsFromSegment in
route-param-names.utils.ts. Create explicit assertions that the parser returns
the extracted param with the correct paramName, fullParam value, and isOptional:
false, alongside the existing `$param`, `{$param}`, and `{-$param}` cases.
- Around line 3-12: Update the stale documentation in ExtractedParam and the
related parsing comments so they reflect the new variadic parameter form handled
by the route param regex. In route-param-names.utils.ts, revise the JSDoc for
fullParam and the inline comments around the regex logic to mention
...$paramName alongside $userId and -$optional, keeping the descriptions aligned
with the actual behavior in the route param parsing helpers.

In `@packages/router-generator/src/validate-route-params.ts`:
- Around line 53-70: The brace-pattern handling in validate-route-params.ts is
correct, but the stale inline comment in the wildcard branch no longer reflects
the supported patterns. Update the comment near the paramName guard in
validateRouteParams to note that nameless {...$} is also skipped, alongside {$}
and {-$}, so the documentation matches the current bracePattern behavior.
- Line 55: The bracePattern regex and extractParamsFromSegment logic are
duplicated between validate-route-params and route-param-names.utils, so update
this code to use a shared helper instead of maintaining two copies. Move the
regex and segment parsing behavior into a common utility that both packages can
import, then have validate-route-params and the route-param-names rule consume
that shared implementation to keep variadic/optional param syntax changes in one
place.
🪄 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: b7d5705a-c158-49f9-b01f-c0b7bf961c9c

📥 Commits

Reviewing files that changed from the base of the PR and between a6337fb and 82c0029.

📒 Files selected for processing (14)
  • .changeset/variadic-path-params.md
  • docs/router/guide/path-params.md
  • docs/router/routing/route-matching.md
  • docs/router/routing/routing-concepts.md
  • docs/start/framework/react/migrate-from-next-js.md
  • packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts
  • packages/router-core/src/link.ts
  • packages/router-core/src/new-process-route-tree.ts
  • packages/router-core/src/path.ts
  • packages/router-core/src/route.ts
  • packages/router-core/tests/new-process-route-tree.test.ts
  • packages/router-core/tests/variadic-path-params.test-d.ts
  • packages/router-core/tests/variadic-path-params.test.ts
  • packages/router-generator/src/validate-route-params.ts

Comment thread docs/router/guide/path-params.md Outdated
Comment thread docs/router/routing/routing-concepts.md Outdated
@IderAghbal IderAghbal force-pushed the feat/variadic-path-params branch from 82c0029 to 4efb2f5 Compare July 2, 2026 20:19

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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 `@docs/router/guide/path-params.md`:
- Around line 724-726: Update the opening sentence in the Variadic Path
Parameters section so it applies only to regular path params, not variadic ones;
the current blanket statement conflicts with the new `{...$paramName}` behavior.
Adjust the wording near the introduction of this section in the path-params
guide, keeping the rest of the explanation about variadic matching unchanged.
🪄 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: df6478b5-acbf-46c7-8a56-891844f12769

📥 Commits

Reviewing files that changed from the base of the PR and between 82c0029 and 4efb2f5.

📒 Files selected for processing (15)
  • .changeset/variadic-path-params.md
  • docs/router/guide/path-params.md
  • docs/router/routing/route-matching.md
  • docs/router/routing/routing-concepts.md
  • docs/start/framework/react/migrate-from-next-js.md
  • packages/eslint-plugin-router/src/__tests__/route-param-names.utils.test.ts
  • packages/eslint-plugin-router/src/rules/route-param-names/route-param-names.utils.ts
  • packages/router-core/src/link.ts
  • packages/router-core/src/new-process-route-tree.ts
  • packages/router-core/src/path.ts
  • packages/router-core/src/route.ts
  • packages/router-core/tests/new-process-route-tree.test.ts
  • packages/router-core/tests/variadic-path-params.test-d.ts
  • packages/router-core/tests/variadic-path-params.test.ts
  • packages/router-generator/src/validate-route-params.ts
✅ Files skipped from review due to trivial changes (3)
  • docs/start/framework/react/migrate-from-next-js.md
  • docs/router/routing/route-matching.md
  • .changeset/variadic-path-params.md
🚧 Files skipped from review as they are similar to previous changes (7)
  • packages/router-core/src/path.ts
  • packages/router-core/tests/new-process-route-tree.test.ts
  • packages/router-core/src/route.ts
  • packages/router-core/tests/variadic-path-params.test-d.ts
  • packages/router-core/src/link.ts
  • packages/router-core/src/new-process-route-tree.ts
  • packages/router-core/tests/variadic-path-params.test.ts

Comment thread docs/router/guide/path-params.md Outdated
@IderAghbal IderAghbal force-pushed the feat/variadic-path-params branch from 4efb2f5 to 865a313 Compare July 2, 2026 20:28

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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 `@docs/router/guide/path-params.md`:
- Around line 735-775: The repeated framework headings in the path params
examples need to be renamed to avoid duplicate Markdown headings (MD024). Update
the second pair of headings in this section so they are distinct from the
earlier “React” and “Solid” headings, such as using “React example” and “Solid
example,” while keeping the surrounding examples and symbols like
createFileRoute, Route, and FileComponent unchanged.

In `@docs/router/routing/routing-concepts.md`:
- Around line 334-372: The repeated framework headings in the routing concepts
markdown are triggering the duplicate-heading rule because the same section
labels are used earlier in the document. Update the second pair of headings in
this React/Solid example block to distinct text, and keep the example code
blocks under those renamed headings so the markdown remains unique and
searchable.
🪄 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: a5e20e00-1732-4dc7-b416-bf78b766b7a9

📥 Commits

Reviewing files that changed from the base of the PR and between 4efb2f5 and 865a313.

📒 Files selected for processing (4)
  • docs/router/guide/path-params.md
  • docs/router/routing/route-matching.md
  • docs/router/routing/routing-concepts.md
  • docs/start/framework/react/migrate-from-next-js.md
✅ Files skipped from review due to trivial changes (2)
  • docs/router/routing/route-matching.md
  • docs/start/framework/react/migrate-from-next-js.md

Comment thread docs/router/guide/path-params.md
Comment thread docs/router/routing/routing-concepts.md
@nx-cloud

nx-cloud Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

View your CI Pipeline Execution ↗ for commit 865a313

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ❌ Failed 12m 52s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 2m 18s View ↗

☁️ Nx Cloud last updated this comment at 2026-07-02 21:54:32 UTC

@pkg-pr-new

pkg-pr-new Bot commented Jul 2, 2026

Copy link
Copy Markdown
More templates

@tanstack/arktype-adapter

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

@tanstack/eslint-plugin-router

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

@tanstack/eslint-plugin-start

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

@tanstack/history

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

@tanstack/nitro-v2-vite-plugin

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

@tanstack/react-router

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

@tanstack/react-router-devtools

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

@tanstack/react-router-ssr-query

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

@tanstack/react-start

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

@tanstack/react-start-client

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

@tanstack/react-start-rsc

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

@tanstack/react-start-server

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

@tanstack/router-cli

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

@tanstack/router-core

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

@tanstack/router-devtools

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

@tanstack/router-devtools-core

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

@tanstack/router-generator

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

@tanstack/router-plugin

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

@tanstack/router-ssr-query-core

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

@tanstack/router-utils

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

@tanstack/router-vite-plugin

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

@tanstack/solid-router

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

@tanstack/solid-router-devtools

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

@tanstack/solid-router-ssr-query

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

@tanstack/solid-start

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

@tanstack/solid-start-client

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

@tanstack/solid-start-server

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

@tanstack/start-client-core

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

@tanstack/start-fn-stubs

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

@tanstack/start-plugin-core

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

@tanstack/start-server-core

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

@tanstack/start-static-server-functions

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

@tanstack/start-storage-context

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

@tanstack/valibot-adapter

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

@tanstack/virtual-file-routes

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

@tanstack/vue-router

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

@tanstack/vue-router-devtools

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

@tanstack/vue-router-ssr-query

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

@tanstack/vue-start

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

@tanstack/vue-start-client

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

@tanstack/vue-start-server

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

@tanstack/zod-adapter

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

commit: 865a313

@nx-cloud nx-cloud Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nx Cloud has identified a possible root cause for your failed CI:

We identified that the tanstack-start-example-rscs:build failure is unrelated to this PR — it stems from a broken nitro-nightly dependency where ./runtime/meta is not a defined export, causing the Vite config to fail on load. We confirmed the same failure exists independently in branch 7732, indicating a pre-existing environment issue across the repository.

No code changes were suggested for this issue.

You can trigger a rerun by pushing an empty commit:

git commit --allow-empty -m "chore: trigger rerun"
git push

Nx Cloud View detailed reasoning on Nx Cloud ↗


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

@codspeed-hq

codspeed-hq Bot commented Jul 2, 2026

Copy link
Copy Markdown

Merging this PR will improve performance by 22.1%

⚡ 1 improved benchmark
❌ 1 regressed benchmark
✅ 142 untouched benchmarks

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Memory mem request-churn (solid) 1.2 MB 1.4 MB -15.01%
Memory mem serialization-payload (solid) 6.2 MB 3.6 MB +75.39%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing IderAghbal:feat/variadic-path-params (865a313) with main (a6337fb)

Open in CodSpeed

@IderAghbal IderAghbal force-pushed the feat/variadic-path-params branch 3 times, most recently from 3c238cd to e290b5c Compare July 3, 2026 23:57
Non-terminal, named, multi-segment path parameters: {...$param} matches
zero or more URL segments mid-path, binds them as Array<string> with
per-segment decoding, and allows child routes to continue after it,
unlike the terminal $ splat. Matching is non-greedy, resolved by the
existing backtracking matcher, and ranks below optional params and
above the terminal wildcard. A route path supports up to three
variadics; consecutive unbounded segments (variadic-variadic or
variadic-splat) must be separated by a static segment, since an
unanchored boundary would leave the first structurally empty. No
prefix/suffix. Per-variadic consumption counts pack into 17-bit lanes
of one float64-exact integer on the match frame (at most 131071
segments per variadic; longer URLs fail to match rather than corrupt
counts). Type layer resolves variadic params as Array<string> via a
fourth ParsePathParams bucket. The generator's file-route tokenizer
keeps the dots of a variadic token instead of treating them as
flat-route separators, and generator and eslint-plugin param-name
validation accept the new token.
Adds the variadic section to the path-params guide and routing
concepts, includes optional and variadic parameters in the route
matching order (optional parameters were missing from it), and maps
Next.js optional catch-all segments to variadic parameters in the
migration guide.
@IderAghbal IderAghbal force-pushed the feat/variadic-path-params branch from e290b5c to 860c45c Compare July 4, 2026 00:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant