diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index fc3a7200d..f8aa5b26d 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -57,6 +57,7 @@ import { Route as ShopSearchRouteImport } from './routes/shop.search' import { Route as ShopCartRouteImport } from './routes/shop.cart' import { Route as ShopHandleRouteImport } from './routes/shop.$handle' import { Route as PartnersRailwayRouteImport } from './routes/partners.railway' +import { Route as PartnersCoderabbitRouteImport } from './routes/partners.coderabbit' import { Route as PartnersPartnerRouteImport } from './routes/partners.$partner' import { Route as OauthTokenRouteImport } from './routes/oauth/token' import { Route as OauthRegisterRouteImport } from './routes/oauth/register' @@ -402,6 +403,11 @@ const PartnersRailwayRoute = PartnersRailwayRouteImport.update({ path: '/railway', getParentRoute: () => PartnersRoute, } as any) +const PartnersCoderabbitRoute = PartnersCoderabbitRouteImport.update({ + id: '/coderabbit', + path: '/coderabbit', + getParentRoute: () => PartnersRoute, +} as any) const PartnersPartnerRoute = PartnersPartnerRouteImport.update({ id: '/$partner', path: '/$partner', @@ -1029,6 +1035,7 @@ export interface FileRoutesByFullPath { '/oauth/register': typeof OauthRegisterRoute '/oauth/token': typeof OauthTokenRoute '/partners/$partner': typeof PartnersPartnerRoute + '/partners/coderabbit': typeof PartnersCoderabbitRoute '/partners/railway': typeof PartnersRailwayRoute '/shop/$handle': typeof ShopHandleRoute '/shop/cart': typeof ShopCartRoute @@ -1176,6 +1183,7 @@ export interface FileRoutesByTo { '/oauth/register': typeof OauthRegisterRoute '/oauth/token': typeof OauthTokenRoute '/partners/$partner': typeof PartnersPartnerRoute + '/partners/coderabbit': typeof PartnersCoderabbitRoute '/partners/railway': typeof PartnersRailwayRoute '/shop/$handle': typeof ShopHandleRoute '/shop/cart': typeof ShopCartRoute @@ -1329,6 +1337,7 @@ export interface FileRoutesById { '/oauth/register': typeof OauthRegisterRoute '/oauth/token': typeof OauthTokenRoute '/partners/$partner': typeof PartnersPartnerRoute + '/partners/coderabbit': typeof PartnersCoderabbitRoute '/partners/railway': typeof PartnersRailwayRoute '/shop/$handle': typeof ShopHandleRoute '/shop/cart': typeof ShopCartRoute @@ -1485,6 +1494,7 @@ export interface FileRouteTypes { | '/oauth/register' | '/oauth/token' | '/partners/$partner' + | '/partners/coderabbit' | '/partners/railway' | '/shop/$handle' | '/shop/cart' @@ -1632,6 +1642,7 @@ export interface FileRouteTypes { | '/oauth/register' | '/oauth/token' | '/partners/$partner' + | '/partners/coderabbit' | '/partners/railway' | '/shop/$handle' | '/shop/cart' @@ -1784,6 +1795,7 @@ export interface FileRouteTypes { | '/oauth/register' | '/oauth/token' | '/partners/$partner' + | '/partners/coderabbit' | '/partners/railway' | '/shop/$handle' | '/shop/cart' @@ -2301,6 +2313,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof PartnersRailwayRouteImport parentRoute: typeof PartnersRoute } + '/partners/coderabbit': { + id: '/partners/coderabbit' + path: '/coderabbit' + fullPath: '/partners/coderabbit' + preLoaderRoute: typeof PartnersCoderabbitRouteImport + parentRoute: typeof PartnersRoute + } '/partners/$partner': { id: '/partners/$partner' path: '/$partner' @@ -3267,12 +3286,14 @@ const BuilderRouteWithChildren = interface PartnersRouteChildren { PartnersPartnerRoute: typeof PartnersPartnerRoute + PartnersCoderabbitRoute: typeof PartnersCoderabbitRoute PartnersRailwayRoute: typeof PartnersRailwayRoute PartnersIndexRoute: typeof PartnersIndexRoute } const PartnersRouteChildren: PartnersRouteChildren = { PartnersPartnerRoute: PartnersPartnerRoute, + PartnersCoderabbitRoute: PartnersCoderabbitRoute, PartnersRailwayRoute: PartnersRailwayRoute, PartnersIndexRoute: PartnersIndexRoute, } diff --git a/src/routes/partners.coderabbit.tsx b/src/routes/partners.coderabbit.tsx new file mode 100644 index 000000000..71b27b3a6 --- /dev/null +++ b/src/routes/partners.coderabbit.tsx @@ -0,0 +1,1030 @@ +import * as React from 'react' +import { Link, createFileRoute } from '@tanstack/react-router' +import { + ArrowUpRight, + Brain, + Check, + Code2, + GitPullRequest, + ListChecks, + Plus, + ScrollText, + ShieldCheck, + Sparkles, + Terminal, + Wand2, +} from 'lucide-react' +import { twMerge } from 'tailwind-merge' +import { Footer } from '~/components/Footer' +import { Card } from '~/components/Card' +import { Button } from '~/ui' +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from '~/components/Collapsible' +import { CodeBlock } from '~/components/markdown/CodeBlock' +import { seo } from '~/utils/seo' +import { getPartnerById, PartnerImage } from '~/utils/partners' +import { getPartnerJsonLd } from '~/utils/partner-pages' +import { trackEvent } from '~/utils/analytics' + +const CODERABBIT_HREF = + 'https://coderabbit.link/tanstack?utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page&via=tanstack' +const CODERABBIT_DOCS_HREF = + 'https://docs.coderabbit.ai/?utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page' +const CODERABBIT_HOME_HREF = + 'https://www.coderabbit.ai/?utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page' +const CODERABBIT_PRICING_HREF = + 'https://www.coderabbit.ai/pricing?utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page' +const CODERABBIT_IDE_HREF = + 'https://www.coderabbit.ai/ide?utm_medium=sponsor&utm_source=tanstack&utm_campaign=partner-page' + +const CONFIG_SNIPPET = `# .coderabbit.yaml +language: en +reviews: + profile: chill + high_level_summary: true + auto_review: + enabled: true + drafts: false + path_instructions: + - path: "src/**/*.tsx" + instructions: "Flag unstable references passed to TanStack hooks." +` + +const COMMANDS_SNIPPET = `# Chat with CodeRabbit in any pull request comment +@coderabbitai review +@coderabbitai generate unit tests +@coderabbitai resolve +` + +type FeatureIcon = React.ComponentType<{ className?: string }> + +const features: Array<{ Icon: FeatureIcon; title: string; desc: string }> = [ + { + Icon: GitPullRequest, + title: 'Line-by-line PR reviews', + desc: 'Every pull request gets context-aware, file-by-file feedback within minutes — not just a linter dump, but real reasoning about your changes.', + }, + { + Icon: Code2, + title: 'Free reviews in your IDE', + desc: 'The VS Code, Cursor, and Windsurf extension reviews committed and uncommitted changes in your editor — no subscription required.', + }, + { + Icon: Wand2, + title: 'One-click fixes', + desc: 'Turn a review comment into a committed change with a "Fix with AI" button, or hand it to Copilot, Claude Code, or Cline.', + }, + { + Icon: Brain, + title: 'Learns from your team', + desc: 'Teach CodeRabbit in plain English. It remembers your conventions across repos so the same nit never comes back twice.', + }, + { + Icon: ShieldCheck, + title: '40+ linters & SAST built in', + desc: 'CodeRabbit runs ast-grep, Semgrep, and dozens of scanners for you, then explains findings in the context of the diff.', + }, + { + Icon: ScrollText, + title: 'Summaries & diagrams', + desc: 'A TL;DR walkthrough and sequence diagrams for every PR make big TanStack changes reviewable at a glance.', + }, + { + Icon: ListChecks, + title: 'Custom pre-merge checks', + desc: 'Describe the standards a PR must meet in natural language, and gate merges on them — no rules engine to maintain.', + }, + { + Icon: Terminal, + title: 'CLI for CI/CD', + desc: 'Run the same review from the command line with agent-optimized output, so automated checks run before anything merges.', + }, +] + +const steps: Array<{ num: string; title: string; code: string }> = [ + { + num: '01', + title: 'Install the GitHub App', + code: 'github.com/apps/coderabbitai', + }, + { + num: '02', + title: 'Choose which repos it reviews', + code: 'app.coderabbit.ai/settings', + }, + { num: '03', title: 'Open a pull request', code: '@coderabbitai review' }, + { num: '04', title: 'Tune the rules (optional)', code: '.coderabbit.yaml' }, +] + +const pricing: Array<{ + plan: string + price: string + note: string + features: Array + highlight?: boolean +}> = [ + { + plan: 'Free', + price: '$0', + note: 'per user · no credit card', + features: [ + 'Unlimited public & private repos', + 'PR summaries & IDE reviews', + '14-day Pro Plus trial', + 'Free forever in VS Code', + ], + }, + { + plan: 'Pro', + price: '$24', + note: 'per user / mo · billed annually', + features: [ + 'Full line-by-line PR reviews', + '40+ linters & SAST', + 'Jira & Linear integrations', + 'Agentic chat & analytics', + '5 PR reviews / dev / hour', + ], + highlight: true, + }, + { + plan: 'Pro Plus', + price: '$48', + note: 'per user / mo · billed annually', + features: [ + 'Everything in Pro', + 'Custom pre-merge checks', + 'Finishing touches & issue planner', + 'Higher rate & MCP limits', + ], + }, + { + plan: 'Enterprise', + price: 'Custom', + note: 'for teams at scale', + features: [ + 'SSO, RBAC & audit logs', + 'Self-hosting & API access', + 'EU SaaS deployment', + 'SLA + dedicated CSM', + ], + }, +] + +const extras: Array<[string, string]> = [ + ['Free in your IDE', 'VS Code · Cursor · Windsurf'], + ['Reviews on', 'GitHub · GitLab · Azure · Bitbucket'], + ['Time to first review', 'Under 2 minutes'], +] + +const testimonials: Array<{ quote: string; author: string; role: string }> = [ + { + quote: "We're using CodeRabbit all over NVIDIA.", + author: 'Jensen Huang', + role: 'Founder & CEO at NVIDIA', + }, + { + quote: + 'Since adopting CodeRabbit, our confidence is up and our bugs are down; it catches edge cases humans skim past.', + author: 'Brandon Romano', + role: 'Sr. Staff Software Engineer at Clerk', + }, + { + quote: + 'Before CodeRabbit, quality depended on who reviewed your PR. Now, the bar is the same for everyone.', + author: 'Abhi Aiyer', + role: 'CTO at Mastra', + }, + { + quote: + 'The bottleneck was always code review. CodeRabbit solves that one problem.', + author: 'Kiran Kanagasekar', + role: 'Sr. Engineering Manager at TaskRabbit', + }, +] + +const libraries = [ + 'Start', + 'Router', + 'Query', + 'Table', + 'Form', + 'DB', + 'AI', + 'Virtual', + 'Pacer', + 'Store', + 'Devtools', + 'CLI', +] + +const libDetails: Array<{ label: string; desc: string }> = [ + { + label: 'TanStack Start', + desc: 'Reviews server functions, route loaders, and SSR logic in the PR — the seams where full-stack bugs actually hide.', + }, + { + label: 'TanStack Router', + desc: 'Catches unstable route options, missing loader deps, and search-param mistakes before they ship to a preview.', + }, + { + label: 'TanStack Query', + desc: 'Flags fragile query keys, missing invalidations, and effect-vs-query anti-patterns that are easy to miss in review.', + }, + { + label: 'TanStack Table & Form', + desc: 'Reasons about the heavy generics these libraries lean on, so type regressions get caught at review time.', + }, +] + +const catches: Array<{ label: string; desc: string }> = [ + { + label: 'Unstable hook inputs', + desc: 'Flags new object, array, or function references passed into Router and Query hooks that quietly trigger extra re-renders or refetches.', + }, + { + label: 'Query key & cache mistakes', + desc: 'Catches query keys that drift out of sync with their invalidations, and effect-driven fetching that should really be a query.', + }, + { + label: 'Server function safety', + desc: 'Points out missing awaits, unhandled errors, and unvalidated input in TanStack Start server functions before they reach production.', + }, + { + label: 'Routing & loaders', + desc: 'Surfaces missing loader dependencies, unparsed search params, and route options that break on navigation or SSR.', + }, + { + label: 'Type regressions', + desc: 'Reasons about the heavy generics in Table and Form so a subtle type break gets called out at review time, not in CI.', + }, + { + label: 'Security & leaked secrets', + desc: 'Runs SAST scanners and secret detection over the diff, then explains each finding in context instead of dumping raw linter output.', + }, +] + +type ComparisonValue = boolean | 'partial' + +const comparison: Array<{ + capability: string + manual: ComparisonValue + linters: ComparisonValue + coderabbit: ComparisonValue +}> = [ + { + capability: 'Catches context & logic bugs', + manual: true, + linters: false, + coderabbit: true, + }, + { + capability: 'Runs 40+ security scanners', + manual: false, + linters: 'partial', + coderabbit: true, + }, + { + capability: 'Explains findings in plain English', + manual: true, + linters: false, + coderabbit: true, + }, + { + capability: 'One-click / "Fix with AI"', + manual: false, + linters: false, + coderabbit: true, + }, + { + capability: "Learns your team's conventions", + manual: true, + linters: false, + coderabbit: true, + }, + { + capability: 'Generates tests & docstrings', + manual: false, + linters: false, + coderabbit: true, + }, + { + capability: 'Instant, on every pull request', + manual: false, + linters: true, + coderabbit: true, + }, +] + +const faqs: Array<{ q: string; a: string }> = [ + { + q: 'Do I need to add CodeRabbit code to my TanStack app?', + a: 'No. CodeRabbit is a GitHub App, not an SDK — you install it on your repositories and it reviews pull requests externally. There is no runtime code to add. An optional .coderabbit.yaml file at the root of your repo lets you tune review behavior and add path-specific instructions.', + }, + { + q: 'Which platforms and editors does CodeRabbit support?', + a: 'CodeRabbit reviews pull requests on GitHub, GitLab, Azure DevOps, and Bitbucket. It also ships a free extension for VS Code, Cursor, and Windsurf, plus a CLI you can run locally or in CI/CD pipelines.', + }, + { + q: 'Is there a free option?', + a: 'Yes. The Free plan covers unlimited public and private repositories with PR summaries and IDE reviews, and every account starts with a 14-day Pro Plus trial — no credit card required. AI code reviews in VS Code, Cursor, and Windsurf are free to use.', + }, + { + q: 'How much does CodeRabbit cost?', + a: 'Free is $0 per user. Pro is $24 per user per month billed annually and adds full PR reviews, 40+ linters and SAST tools, and integrations. Pro Plus is $48 per user per month and adds custom pre-merge checks and higher limits. Enterprise is custom and adds SSO, self-hosting, and API access.', + }, + { + q: 'Can CodeRabbit understand TanStack-specific patterns?', + a: 'Yes. Reviews are context-aware across your whole diff, and CodeRabbit learns from your feedback in plain English so it remembers your conventions. You can also add path_instructions in .coderabbit.yaml to give it TanStack-specific guidance, such as flagging unstable references passed to Router or Query hooks.', + }, + { + q: 'How is this different from GitHub Copilot or a plain linter?', + a: "CodeRabbit reviews the whole change with reasoning, not just the line under your cursor. It runs 40+ scanners for you, explains findings in context, offers one-click fixes, learns your standards, and gates merges on custom checks. As one CTO put it, the differentiator isn't generating code — it's governing it.", + }, + { + q: 'Does CodeRabbit train on my code?', + a: 'No. CodeRabbit never uses customer code to train models, whether data retention is enabled or not. Your code is shared with its LLM providers only to generate a review, with data isolation for proprietary code, and Enterprise self-hosting lets you opt out of all retention entirely.', + }, + { + q: 'What languages does CodeRabbit support?', + a: 'CodeRabbit is language-agnostic and reviews all major programming languages, with depth varying by how common the language is. For TanStack teams that means full TypeScript, JavaScript, and TSX/JSX coverage alongside whatever backend language shares the repo.', + }, + { + q: 'Can I scope CodeRabbit to specific folders or a monorepo package?', + a: 'Yes. A .coderabbit.yaml file supports path filters and path-specific instructions, so you can focus reviews on the packages that matter and give per-directory guidance — handy in the monorepos many TanStack projects live in.', + }, + { + q: 'Does CodeRabbit generate tests and docstrings?', + a: 'Yes. It can check test coverage and generate the missing unit tests, and it can create docstrings for changed files — automatically or on request in a pull request comment.', + }, + { + q: 'Can I chat with CodeRabbit or ask it to make changes?', + a: 'Yes. You can chat with the CodeRabbit bot in any pull request, ask follow-up questions, and apply fixes with one-click commits or the "Fix with AI" button for the harder ones.', + }, + { + q: 'Does CodeRabbit connect to Jira, Linear, or other tools?', + a: 'Yes. Pro and above integrate Jira and Linear, pull in linked issues and web context, and connect to MCP servers so reviews can reason about work that lives outside the diff.', + }, +] + +const PAGE_TITLE = 'CodeRabbit for TanStack — AI Code Review, Gold Partner' +const PAGE_DESCRIPTION = + 'CodeRabbit gives TanStack teams AI code review on every pull request, in the IDE, and in the CLI. Line-by-line reviews, 40+ built-in linters and SAST tools, one-click fixes, and custom pre-merge checks — installed as a GitHub App with no runtime code to add. Free in VS Code, Cursor, and Windsurf.' + +function getFaqJsonLd() { + return { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqs.map((faq) => ({ + '@type': 'Question', + name: faq.q, + acceptedAnswer: { + '@type': 'Answer', + text: faq.a, + }, + })), + } +} + +export const Route = createFileRoute('/partners/coderabbit')({ + head: () => { + const partner = getPartnerById('coderabbit') + + return { + meta: seo({ + title: PAGE_TITLE, + description: PAGE_DESCRIPTION, + keywords: + 'coderabbit tanstack, ai code review, coderabbit pricing, tanstack pull request review, coderabbit github app, coderabbit gold sponsor', + image: 'https://tanstack.com/og.png', + }), + scripts: [ + ...(partner + ? [ + { + type: 'application/ld+json', + children: JSON.stringify(getPartnerJsonLd(partner)), + }, + ] + : []), + { + type: 'application/ld+json', + children: JSON.stringify(getFaqJsonLd()), + }, + ], + } + }, + component: CodeRabbitPartnerPage, +}) + +function CheckBadge() { + return ( + + + + ) +} + +function ComparisonCell({ value }: { value: ComparisonValue }) { + if (value === 'partial') { + return ( + + Partial + + ) + } + return value ? ( + + + + ) : ( + + ) +} + +function trackCodeRabbitClick() { + trackEvent('partner_clicked', { + partner_id: 'coderabbit', + placement: 'detail', + destination: 'external', + destination_host: 'coderabbit.ai', + }) +} + +function CodeRabbitCodeExample({ + code, + lang, + title, +}: { + code: string + lang: string + title: string +}) { + return ( + + {code} + + ) +} + +function CodeRabbitPartnerPage() { + const [openFaq, setOpenFaq] = React.useState(null) + + React.useEffect(() => { + trackEvent('partner_viewed', { + partner_id: 'coderabbit', + placement: 'detail', + }) + }, []) + + const partner = getPartnerById('coderabbit') + + return ( +
+
+ + + {/* Hero */} +
+
+ {partner ? ( +
+ +
+ ) : null} +
+ + Gold Sponsor · AI Code Review + +
+ + + Most installed AI app on GitHub + +
+
+
+ +

+ Cut TanStack code review +
+ time and bugs in half +

+ +

+ CodeRabbit gives TanStack teams AI code review on every pull request + — line-by-line feedback, 40+ built-in scanners, and one-click fixes. + It installs as a GitHub App, so there is no code to add to your app. +

+ +

+ "The bottleneck was always code review. CodeRabbit solves that one + problem." — Kiran Kanagasekar, Sr. Engineering Manager at TaskRabbit +

+ +
+ + +
+

+ No credit card required. 14-day Pro Plus trial on every account. +

+
+ + {/* Stats */} +
+ {[ + ['6M+', 'Repositories reviewed'], + ['75M+', 'Defects caught'], + ['15,000+', 'Customers'], + ['$0', 'Reviews in your IDE'], + ].map(([value, label]) => ( +
+
{value}
+
+ {label} +
+
+ ))} +
+ + {/* Features */} +
+

+ CodeRabbit is all-in on the TanStack community +

+

+ CodeRabbit went all-in as a Gold sponsor to reach the developers its + AI reviews were built for — fast-moving teams shipping type-heavy, + full-stack code. Here's what that commitment brings to your + workflow. +

+
+ {features.map(({ Icon, title, desc }) => ( + + +
{title}
+

+ {desc} +

+
+ ))} +
+
+ + {/* How it works */} +
+

+ From install to first review in 4 steps +

+

+ CodeRabbit runs as a GitHub App on top of your repos. Install it, + pick your repositories, and open a PR — no runtime code required. +

+ +
+ {steps.map(({ num, title, code }) => ( + +
+ {num} +
+
+
{title}
+ + {code} + +
+
+ ))} +
+ +
+ + +
+ +
+ + +
+
+ + {/* Library fit */} +
+

+ Reviews every TanStack library +

+

+ CodeRabbit reads your whole diff, so it understands the parts of + TanStack apps that are easiest to get wrong in review. +

+ +
+ {libraries.map((lib) => ( + + {lib} + + ))} +
+ +
+ {libDetails.map(({ label, desc }) => ( + +
+ + {label} +
+

+ {desc} +

+
+ ))} +
+
+ + {/* What it catches */} +
+

+ What CodeRabbit catches in a TanStack PR +

+

+ Reviews are context-aware across the whole diff, so in a TanStack + codebase CodeRabbit routinely flags issues like these — and you can + steer it further with path instructions in{' '} + + .coderabbit.yaml + + . +

+
+ {catches.map(({ label, desc }) => ( + +
+ + {label} +
+

+ {desc} +

+
+ ))} +
+
+ + {/* Comparison */} +
+

+ How CodeRabbit compares +

+

+ Manual review understands context but is slow and uneven. Linters + are instant but shallow. CodeRabbit is the only one that does both — + reasoning about your changes and running the scanners, on every pull + request. +

+
+ + + + + + + + + + + {comparison.map((row) => ( + + + + + + + ))} + +
+ Capability + + Manual review + + Linters alone + + CodeRabbit +
+ {row.capability} + + + + + + +
+
+
+ + {/* Pricing */} +
+

+ Pricing that scales with your team +

+

+ Start free, and only pay per seat when your team is ready for full + pull-request reviews. IDE reviews stay free. +

+ +
+ {pricing.map(({ plan, price, note, features: pf, highlight }) => ( + + {highlight ? ( + + Most popular + + ) : null} +
{plan}
+
+ {price} +
+
+ {note} +
+
    + {pf.map((feat) => ( +
  • + + {feat} +
  • + ))} +
+
+ ))} +
+ +
+ {extras.map(([key, value]) => ( +
+
+ {key} +
+
{value}
+
+ ))} +
+ +
+ + +
+
+ + {/* Testimonials */} +
+

+ What engineering teams say +

+

+ Real quotes from engineers who put CodeRabbit in front of their pull + requests. +

+
+ {testimonials.map(({ quote, author, role }) => ( + +
+ "{quote}" +
+
+
{author}
+
+ {role} +
+
+
+ ))} +
+ +
+ + + + Free in VS Code, Cursor & Windsurf + +
+
+ + {/* FAQ */} +
+

+ Frequently asked questions +

+

+ Common questions from TanStack developers evaluating CodeRabbit. +

+ +
+ {faqs.map(({ q, a }, i) => { + const isOpen = openFaq === i + return ( + setOpenFaq(next ? i : null)} + className="border-b border-gray-200 dark:border-gray-800" + > + + + {q} + + + + +

+ {a} +

+
+
+ ) + })} +
+
+ + {/* CTA */} +
+
+ Free AI reviews in your IDE and your PRs +
+

+ Ship TanStack code with confidence +

+

+ No credit card required. No runtime code to add. Just install the + GitHub App and open a pull request. +

+

+ Trusted by 15,000+ teams to catch the bugs humans skim past. +

+ +
+ + +
+
+ +

+ CodeRabbit is a Gold-tier TanStack sponsor.{' '} + + Browse all TanStack partners + + .{' '} + + coderabbit.ai + +

+
+ +
+ ) +}