Skip to content

Conversation

beaussan
Copy link
Contributor

@beaussan beaussan commented Oct 8, 2025

Adds a history panel to the devtools, super useful to be able to track down redirects.

If you don't think it should land, I'm totally ok by building it in userland too.

Ideally, I'd also want to, when I click on a history item, have a side panel that shows the matches for this given pathname, but that's a bigger change that I rather wait until I'm given confirmation it's wanted.

Demo: https://discord.com/channels/719702312431386674/1425569815304863844/1425607969680130058

image

Summary by CodeRabbit

  • New Features

    • Tabbed DevTools panel (Routes, Matches, History) with active tab persisted and history capped at 15 entries; history shows time-since indicators and quick navigation.
  • Refactor

    • Replaced single toggle with unified tabbed layout and consolidated content switching; matches render as a navigable, selectable list with age indicators.
  • Style

    • Added scrollable history container and overflow spacing for clearer history display.

Copy link

nx-cloud bot commented Oct 8, 2025

View your CI Pipeline Execution ↗ for commit 326a007

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

☁️ Nx Cloud last updated this comment at 2025-10-13 21:11:10 UTC

Copy link
Contributor

coderabbitai bot commented Oct 8, 2025

Walkthrough

Introduces a three-tab panel state (routes | matches | history) persisted to localStorage, adds a HISTORY_LIMIT (15) capped navigation history of deduplicated AnyRouteMatch entries updated via effects (using untrack), and refactors rendering to a Switch/Match tabbed UI with new scrollable history styles.

Changes

Cohort / File(s) Summary
Devtools panel logic
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx
Replaces prior show/hide toggle with currentTab persisted as tanstackRouterDevtoolsActiveTab. Adds HISTORY_LIMIT = 15, a history signal of AnyRouteMatch[], and hasHistoryOverflowed. Two createEffect blocks (one using untrack) prepend current matches, dedupe by location, and truncate to limit. Reworks UI to a Switch/Match tabbed view: Routes tab renders RouteComp; Matches tab lists current/pending matches with NavigateButton, AgeTicker, and selection styling; History tab lists past matches with per-item navigation, AgeTicker, and overflow notice. Updates imports to include Solid primitives and AnyRouteMatch.
Styles
packages/router-devtools-core/src/useStyles.tsx
Adds historyContainer (flex: 1 1 auto, scrollable, overflow/height constraints aligned with existing containers) and historyOverflowContainer (horizontal/vertical padding using size tokens, smaller font) to the styles factory output.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev as Developer
  participant Panel as DevtoolsPanel
  participant Router as Router
  participant Storage as localStorage

  note over Panel: Initialize currentTab from Storage (tanstackRouterDevtoolsActiveTab)

  Dev->>Panel: Click tab (routes | matches | history)
  Panel->>Panel: set currentTab()
  Panel->>Storage: persist currentTab

  Router-->>Panel: match/pathname change
  rect rgba(200,230,255,0.35)
    note right of Panel: createEffect (uses untrack) prepends match,\ndeduplicates by location and truncates to HISTORY_LIMIT
    Panel->>Panel: update history signal
  end

  alt currentTab == routes
    Panel-->>Dev: render routes view (RouteComp)
  else currentTab == matches
    Panel-->>Dev: render matches list (NavigateButton + AgeTicker)
  else currentTab == history
    Panel-->>Dev: render history list (scrollable) with AgeTicker and overflow note
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20-30 minutes

Poem

I twitch my whiskers, three tabs in view,
Routes, matches, history—crumbs anew.
Fifteen small hops held in a scroll,
Each tick marks a step, a rabbit's toll.
I nibble code and bounce—huzzah! 🥕🐇

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title succinctly captures the primary change introduced by the pull request, which is adding a history tab to the devtools core. It follows a conventional commit style, clearly indicates the scope (devtools-core) and the nature of the change (feat). This makes it immediately understandable to team members reviewing the commit history.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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 and usage tips.

Copy link

pkg-pr-new bot commented Oct 8, 2025

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/arktype-adapter@5410

@tanstack/directive-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/directive-functions-plugin@5410

@tanstack/eslint-plugin-router

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

@tanstack/history

npm i https://pkg.pr.new/TanStack/router/@tanstack/history@5410

@tanstack/nitro-v2-vite-plugin

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

@tanstack/react-router

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

@tanstack/react-router-devtools

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

@tanstack/react-router-ssr-query

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

@tanstack/react-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start@5410

@tanstack/react-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-client@5410

@tanstack/react-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-server@5410

@tanstack/router-cli

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

@tanstack/router-core

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

@tanstack/router-devtools

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

@tanstack/router-devtools-core

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

@tanstack/router-generator

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

@tanstack/router-plugin

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

@tanstack/router-ssr-query-core

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

@tanstack/router-utils

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

@tanstack/router-vite-plugin

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

@tanstack/server-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/server-functions-plugin@5410

@tanstack/solid-router

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

@tanstack/solid-router-devtools

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

@tanstack/solid-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start@5410

@tanstack/solid-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-client@5410

@tanstack/solid-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-server@5410

@tanstack/start-client-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-client-core@5410

@tanstack/start-plugin-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-plugin-core@5410

@tanstack/start-server-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-core@5410

@tanstack/start-static-server-functions

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

@tanstack/start-storage-context

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-storage-context@5410

@tanstack/valibot-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/valibot-adapter@5410

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/TanStack/router/@tanstack/virtual-file-routes@5410

@tanstack/zod-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/zod-adapter@5410

commit: 326a007

@beaussan beaussan marked this pull request as ready for review October 8, 2025 22:20
Copy link
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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3097080 and fbdbea9.

📒 Files selected for processing (2)
  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (4 hunks)
  • packages/router-devtools-core/src/useStyles.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript in strict mode with extensive type safety across the codebase

Files:

  • packages/router-devtools-core/src/useStyles.tsx
  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx

Copy link
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: 0

♻️ Duplicate comments (1)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (1)

305-323: Remove duplicate history tracking effect.

This entire createEffect block should be removed. You've already added the correct history tracking logic at lines 282-303 that properly compares pathname and search. This second effect:

  1. Creates duplicate history entries on every navigation
  2. Still uses match.id comparison, which was flagged in the previous review as missing same-route navigations
  3. Doesn't guard against empty matches array (line 307 could be undefined)
  4. Would fail at line 315 when accessing currentPathname.id if matches is empty

Apply this diff to remove the duplicate effect:

-    createEffect(() => {
-      const currentPathname =
-        routerState().matches[routerState().matches.length - 1]
-
-      // Read history WITHOUT tracking it to avoid infinite loops
-      const lastPathname = untrack(() => {
-        const h = history()
-        return h[0]
-      })
-
-      if (!lastPathname || lastPathname.id !== currentPathname.id) {
-        setHistory((prev) => {
-          const newHistory = [currentPathname, ...prev]
-          // truncate to ensure we don't overflow too much the ui
-          newHistory.splice(15)
-          return newHistory
-        })
-      }
-    })
-
🧹 Nitpick comments (1)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (1)

578-617: History tab rendering looks good.

The implementation correctly:

  • Iterates over history entries with For
  • Shows current location in green (index() === 0), past entries in gray
  • Provides navigation buttons and age tickers
  • Displays route ID or pathname

Optional: The <ul> wrapper at line 580 is unnecessary and can be removed:

-                  <div>
-                    <ul>
-                      <For each={history()}>
+                  <div>
+                    <For each={history()}>
                        {(match, index) => (
                          <li
...
                          </li>
                        )}
-                      </For>
-                    </ul>
-                  </div>
+                    </For>
+                  </div>
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fbdbea9 and 4cd748c.

📒 Files selected for processing (1)
  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (4 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript in strict mode with extensive type safety across the codebase

Files:

  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx
🧬 Code graph analysis (1)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (1)
packages/router-devtools-core/src/NavigateButton.tsx (1)
  • NavigateButton (9-25)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Test
  • GitHub Check: Preview
🔇 Additional comments (2)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (2)

282-303: LGTM! History tracking logic is correct.

The effect properly:

  • Guards against empty matches
  • Uses untrack to prevent infinite loops
  • Compares pathname and search to detect all navigation changes (including same-route param/search changes)
  • Handles the initial case when lastMatch is undefined

This correctly addresses the concerns from the previous review.


513-516: Verify the third parameter for the History button.

The History button passes false as the third parameter to routeMatchesToggleBtn, while the Routes and Matches buttons pass true.

Confirm this is intentional (e.g., different styling for the last button) rather than an oversight.

Copy link
Member

@SeanCassiere SeanCassiere left a comment

Choose a reason for hiding this comment

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

I like it, I'm in favor of adding this in.

@SeanCassiere SeanCassiere changed the title feat(devtools): add history pannel feat(devtools-core): add history tab Oct 10, 2025
Copy link
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

🧹 Nitpick comments (1)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (1)

307-323: Clean up the redundant history effect

The new effect above already handles tracking and dedupe, so this second effect never fires (and still hardcodes 15). Dropping it avoids confusion and keeps the truncation logic in one place using HISTORY_LIMIT.

-    createEffect(() => {
-      const currentPathname =
-        routerState().matches[routerState().matches.length - 1]
-
-      // Read history WITHOUT tracking it to avoid infinite loops
-      const lastPathname = untrack(() => {
-        const h = history()
-        return h[0]
-      })
-
-      if (!lastPathname || lastPathname.id !== currentPathname.id) {
-        setHistory((prev) => {
-          const newHistory = [currentPathname, ...prev]
-          // truncate to ensure we don't overflow too much the ui
-          newHistory.splice(15)
-          return newHistory
-        })
-      }
-    })
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4cd748c and cc81275.

📒 Files selected for processing (1)
  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (5 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript in strict mode with extensive type safety across the codebase

Files:

  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx
🧬 Code graph analysis (1)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (1)
packages/router-devtools-core/src/NavigateButton.tsx (1)
  • NavigateButton (9-25)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Test

@beaussan
Copy link
Contributor Author

I also added an overflow indicator on the panel
image

Ideally, I'd also want to, when I click on a history item, have a side panel that shows the matches for this given pathname, but that's a bigger change that I rather wait until I'm given confirmation it's wanted.

I was thinking of doing this in a separate pr, it will require a bit more work and rework of some devtool state

Copy link
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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cc81275 and ab43d45.

📒 Files selected for processing (2)
  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (5 hunks)
  • packages/router-devtools-core/src/useStyles.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/router-devtools-core/src/useStyles.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript in strict mode with extensive type safety across the codebase

Files:

  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx
🧬 Code graph analysis (1)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (1)
packages/router-devtools-core/src/NavigateButton.tsx (1)
  • NavigateButton (9-25)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Test
  • GitHub Check: Preview
🔇 Additional comments (5)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (5)

68-69: LGTM!

Good extraction of the magic number into a named constant.


273-283: LGTM!

State initialization is well-structured with proper types and localStorage persistence.


285-310: LGTM!

The history tracking logic correctly:

  • Guards against empty matches
  • Uses untrack to prevent infinite reactive loops
  • Normalizes both sides of the search comparison with ?? {}
  • Deduplicates by location (pathname + search) rather than route id
  • Tracks overflow for UI indication

483-527: LGTM!

Tab button implementation is consistent and correctly manages active/disabled states.


534-631: LGTM!

Tab content rendering is well-structured:

  • Proper use of Switch/Match for exclusive tab rendering
  • History list uses For with proper key management
  • Overflow indicator provides good UX feedback
  • Navigation buttons and age tickers integrated consistently

@SeanCassiere
Copy link
Member

I also added an overflow indicator on the panel

@beaussan could you reduce the text-size of this indicator please?

Provided no other changes are required, I'll merge this in after that fix comes in.

@beaussan
Copy link
Contributor Author

Text size and content changed @SeanCassiere ! I've used the xs font variant

image

Copy link
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: 0

🧹 Nitpick comments (3)
packages/router-devtools-core/src/useStyles.tsx (1)

407-412: Unused style definition.

The historyContainer style is defined but never referenced in BaseTanStackRouterDevtoolsPanel.tsx. The History tab content is rendered inside the shared routesContainer wrapper (line 513 in the panel file), which may not provide optimal overflow behavior for the history list.

Consider either:

  1. Removing this unused style definition, or
  2. Applying it to wrap the History tab content for consistent container styling across tabs:
<Match when={currentTab() === 'history'}>
  <div class={styles().historyContainer}>
    <ul>
      {/* existing history list content */}
    </ul>
  </div>
</Match>
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (2)

285-310: Consider deep equality for search comparison.

The history deduplication logic correctly tracks location changes and addresses previous review feedback. However, JSON.stringify can be brittle for complex objects with different key orders, circular references, or non-JSON-serializable values.

For more robust comparison, consider using a deep equality function (many libraries provide this) or document the assumption that search params are simple key-value pairs:

// Option 1: Use a deep equality library
import { isEqual } from 'lodash-es' // or similar

const sameLocation =
  lastMatch &&
  lastMatch.pathname === currentMatch.pathname &&
  isEqual(lastMatch.search ?? {}, currentMatch.search ?? {})

// Option 2: Add a comment documenting the constraint
// Assumes search params are simple key-value pairs without circular refs
const sameLocation =
  lastMatch &&
  lastMatch.pathname === currentMatch.pathname &&
  JSON.stringify(lastMatch.search ?? {}) ===
    JSON.stringify(currentMatch.search ?? {})

That said, the current implementation is likely sufficient for typical router search params.


565-610: History items styled as interactive but lack click handlers.

The history list items (lines 570-599) use matchRow styling, which includes cursor: pointer and other interactive visual cues, but the <li> elements don't have onClick handlers or role="button" attributes. In contrast, the Matches tab items (lines 532-560) correctly pair matchRow styling with click handlers.

The current implementation works since users can click the NavigateButton inside each item. However, for consistency with the Matches tab and to avoid misleading cursor states, consider either:

  1. Adding click handlers to history items to navigate on item click (matching Matches tab behavior), or
  2. Using a different style variant that doesn't imply the entire row is clickable:
// Option 1: Add click handlers (matches the Matches tab pattern)
<li
  role="button"
  aria-label={`Navigate to ${match.pathname}`}
  onClick={() => router().navigate({ to: match.pathname, params: match.params, search: match.search })}
  class={cx(styles().matchRow(match === activeMatch()))}
>

// Option 2: Create a non-interactive row style variant
// In useStyles.tsx, add a historyRow style without cursor: pointer
historyRow: (active: boolean) => {
  const base = css`
    display: flex;
    border-bottom: 1px solid ${colors.darkGray[400]};
    align-items: center;
    padding: ${size[1]} ${size[2]};
    // ... other styles without cursor: pointer
  `
  // ...
}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bdf3892 and 326a007.

📒 Files selected for processing (2)
  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (5 hunks)
  • packages/router-devtools-core/src/useStyles.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use TypeScript in strict mode with extensive type safety across the codebase

Files:

  • packages/router-devtools-core/src/useStyles.tsx
  • packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx
🧬 Code graph analysis (1)
packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (1)
packages/router-devtools-core/src/NavigateButton.tsx (1)
  • NavigateButton (9-25)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Test
🔇 Additional comments (4)
packages/router-devtools-core/src/useStyles.tsx (1)

413-416: LGTM!

The overflow indicator styling correctly uses a small font size (xs) as requested in the PR comments, with appropriate padding.

packages/router-devtools-core/src/BaseTanStackRouterDevtoolsPanel.tsx (3)

4-14: LGTM!

The new imports (For, Match, Switch, createEffect, untrack) are appropriate for implementing the history tab with Solid.js reactive patterns.


68-68: LGTM!

The HISTORY_LIMIT constant is correctly defined as requested in previous review comments and used consistently throughout the file.


463-507: LGTM!

The tab button implementation correctly manages the three-tab state with proper disabled states and border styling.

@SeanCassiere
Copy link
Member

Looks like nx is having a moment right now. I've tested this and it seems to work.

Merging this in.

@SeanCassiere SeanCassiere merged commit c4d3bde into TanStack:main Oct 13, 2025
6 checks passed
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.

2 participants