diff --git a/examples/angular/cli-standalone-17/.gitignore b/integrations/angular-cli-standalone-17/.gitignore
similarity index 100%
rename from examples/angular/cli-standalone-17/.gitignore
rename to integrations/angular-cli-standalone-17/.gitignore
diff --git a/examples/angular/cli-standalone-17/README.md b/integrations/angular-cli-standalone-17/README.md
similarity index 100%
rename from examples/angular/cli-standalone-17/README.md
rename to integrations/angular-cli-standalone-17/README.md
diff --git a/examples/angular/cli-standalone-17/angular.json b/integrations/angular-cli-standalone-17/angular.json
similarity index 100%
rename from examples/angular/cli-standalone-17/angular.json
rename to integrations/angular-cli-standalone-17/angular.json
diff --git a/examples/angular/cli-standalone-17/package.json b/integrations/angular-cli-standalone-17/package.json
similarity index 83%
rename from examples/angular/cli-standalone-17/package.json
rename to integrations/angular-cli-standalone-17/package.json
index a932c734ad..229f11f1c3 100644
--- a/examples/angular/cli-standalone-17/package.json
+++ b/integrations/angular-cli-standalone-17/package.json
@@ -1,9 +1,8 @@
{
- "name": "@tanstack/query-example-angular-cli-standalone-17",
+ "name": "angular-cli-standalone-17",
"private": true,
"scripts": {
- "build": "ng build",
- "test:types": "tsc"
+ "build": "ng build"
},
"dependencies": {
"@angular/animations": "^17.0.8",
diff --git a/examples/angular/cli-standalone-17/src/app/app.component.ts b/integrations/angular-cli-standalone-17/src/app/app.component.ts
similarity index 100%
rename from examples/angular/cli-standalone-17/src/app/app.component.ts
rename to integrations/angular-cli-standalone-17/src/app/app.component.ts
diff --git a/examples/angular/cli-standalone-17/src/app/app.config.ts b/integrations/angular-cli-standalone-17/src/app/app.config.ts
similarity index 100%
rename from examples/angular/cli-standalone-17/src/app/app.config.ts
rename to integrations/angular-cli-standalone-17/src/app/app.config.ts
diff --git a/examples/angular/cli-standalone-17/src/assets/.gitkeep b/integrations/angular-cli-standalone-17/src/assets/.gitkeep
similarity index 100%
rename from examples/angular/cli-standalone-17/src/assets/.gitkeep
rename to integrations/angular-cli-standalone-17/src/assets/.gitkeep
diff --git a/examples/angular/cli-standalone-17/src/favicon.ico b/integrations/angular-cli-standalone-17/src/favicon.ico
similarity index 100%
rename from examples/angular/cli-standalone-17/src/favicon.ico
rename to integrations/angular-cli-standalone-17/src/favicon.ico
diff --git a/examples/angular/cli-standalone-17/src/index.html b/integrations/angular-cli-standalone-17/src/index.html
similarity index 100%
rename from examples/angular/cli-standalone-17/src/index.html
rename to integrations/angular-cli-standalone-17/src/index.html
diff --git a/examples/angular/cli-standalone-17/src/main.ts b/integrations/angular-cli-standalone-17/src/main.ts
similarity index 100%
rename from examples/angular/cli-standalone-17/src/main.ts
rename to integrations/angular-cli-standalone-17/src/main.ts
diff --git a/examples/angular/cli-standalone-17/src/styles.css b/integrations/angular-cli-standalone-17/src/styles.css
similarity index 100%
rename from examples/angular/cli-standalone-17/src/styles.css
rename to integrations/angular-cli-standalone-17/src/styles.css
diff --git a/examples/angular/cli-standalone-17/tsconfig.app.json b/integrations/angular-cli-standalone-17/tsconfig.app.json
similarity index 100%
rename from examples/angular/cli-standalone-17/tsconfig.app.json
rename to integrations/angular-cli-standalone-17/tsconfig.app.json
diff --git a/examples/angular/cli-standalone-17/tsconfig.json b/integrations/angular-cli-standalone-17/tsconfig.json
similarity index 100%
rename from examples/angular/cli-standalone-17/tsconfig.json
rename to integrations/angular-cli-standalone-17/tsconfig.json
diff --git a/examples/react/create-react-app-4/.eslintrc.cjs b/integrations/react-cra4/.eslintrc.cjs
similarity index 100%
rename from examples/react/create-react-app-4/.eslintrc.cjs
rename to integrations/react-cra4/.eslintrc.cjs
diff --git a/examples/react/create-react-app-4/.gitignore b/integrations/react-cra4/.gitignore
similarity index 100%
rename from examples/react/create-react-app-4/.gitignore
rename to integrations/react-cra4/.gitignore
diff --git a/examples/react/create-react-app-4/package.json b/integrations/react-cra4/package.json
similarity index 91%
rename from examples/react/create-react-app-4/package.json
rename to integrations/react-cra4/package.json
index 30f95bdf8a..eb8f62921f 100644
--- a/examples/react/create-react-app-4/package.json
+++ b/integrations/react-cra4/package.json
@@ -1,5 +1,5 @@
{
- "name": "@tanstack/query-example-react-create-react-app-4",
+ "name": "react-cra4",
"private": true,
"scripts": {
"build": "cross-env DISABLE_ESLINT_PLUGIN=true SKIP_PREFLIGHT_CHECK=true NODE_OPTIONS=--openssl-legacy-provider react-scripts build"
diff --git a/examples/react/create-react-app-4/public/index.html b/integrations/react-cra4/public/index.html
similarity index 100%
rename from examples/react/create-react-app-4/public/index.html
rename to integrations/react-cra4/public/index.html
diff --git a/examples/react/create-react-app-4/src/App.jsx b/integrations/react-cra4/src/App.jsx
similarity index 100%
rename from examples/react/create-react-app-4/src/App.jsx
rename to integrations/react-cra4/src/App.jsx
diff --git a/examples/react/create-react-app-4/src/index.jsx b/integrations/react-cra4/src/index.jsx
similarity index 100%
rename from examples/react/create-react-app-4/src/index.jsx
rename to integrations/react-cra4/src/index.jsx
diff --git a/examples/react/create-react-app-4/src/react-app-env.d.ts b/integrations/react-cra4/src/react-app-env.d.ts
similarity index 100%
rename from examples/react/create-react-app-4/src/react-app-env.d.ts
rename to integrations/react-cra4/src/react-app-env.d.ts
diff --git a/examples/react/create-react-app-4/tsconfig.json b/integrations/react-cra4/tsconfig.json
similarity index 100%
rename from examples/react/create-react-app-4/tsconfig.json
rename to integrations/react-cra4/tsconfig.json
diff --git a/examples/react/create-react-app-5/.eslintrc.cjs b/integrations/react-cra5/.eslintrc.cjs
similarity index 100%
rename from examples/react/create-react-app-5/.eslintrc.cjs
rename to integrations/react-cra5/.eslintrc.cjs
diff --git a/examples/react/create-react-app-5/.gitignore b/integrations/react-cra5/.gitignore
similarity index 100%
rename from examples/react/create-react-app-5/.gitignore
rename to integrations/react-cra5/.gitignore
diff --git a/examples/react/create-react-app-5/package.json b/integrations/react-cra5/package.json
similarity index 90%
rename from examples/react/create-react-app-5/package.json
rename to integrations/react-cra5/package.json
index 75e3afdec4..e7ed13c543 100644
--- a/examples/react/create-react-app-5/package.json
+++ b/integrations/react-cra5/package.json
@@ -1,5 +1,5 @@
{
- "name": "@tanstack/query-example-react-create-react-app-5",
+ "name": "react-cra5",
"private": true,
"scripts": {
"build": "cross-env DISABLE_ESLINT_PLUGIN=true react-scripts build"
diff --git a/examples/react/create-react-app-5/public/index.html b/integrations/react-cra5/public/index.html
similarity index 100%
rename from examples/react/create-react-app-5/public/index.html
rename to integrations/react-cra5/public/index.html
diff --git a/examples/react/create-react-app-5/src/App.jsx b/integrations/react-cra5/src/App.jsx
similarity index 100%
rename from examples/react/create-react-app-5/src/App.jsx
rename to integrations/react-cra5/src/App.jsx
diff --git a/examples/react/create-react-app-5/src/index.jsx b/integrations/react-cra5/src/index.jsx
similarity index 100%
rename from examples/react/create-react-app-5/src/index.jsx
rename to integrations/react-cra5/src/index.jsx
diff --git a/examples/react/create-react-app-5/src/react-app-env.d.ts b/integrations/react-cra5/src/react-app-env.d.ts
similarity index 100%
rename from examples/react/create-react-app-5/src/react-app-env.d.ts
rename to integrations/react-cra5/src/react-app-env.d.ts
diff --git a/examples/react/create-react-app-5/tsconfig.json b/integrations/react-cra5/tsconfig.json
similarity index 100%
rename from examples/react/create-react-app-5/tsconfig.json
rename to integrations/react-cra5/tsconfig.json
diff --git a/integrations/react-next/.eslintrc.cjs b/integrations/react-next/.eslintrc.cjs
new file mode 100644
index 0000000000..847a1c4694
--- /dev/null
+++ b/integrations/react-next/.eslintrc.cjs
@@ -0,0 +1,18 @@
+/** @type {import('eslint').Linter.Config} */
+module.exports = {
+ root: true,
+ extends: [
+ '../../.eslintrc.cjs',
+ 'plugin:react/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: './tsconfig.json',
+ },
+ settings: {
+ react: {
+ version: 'detect',
+ },
+ },
+}
diff --git a/integrations/react-next/.gitignore b/integrations/react-next/.gitignore
new file mode 100644
index 0000000000..8f322f0d8f
--- /dev/null
+++ b/integrations/react-next/.gitignore
@@ -0,0 +1,35 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/integrations/react-next/README.md b/integrations/react-next/README.md
new file mode 100644
index 0000000000..f4da3c4c1c
--- /dev/null
+++ b/integrations/react-next/README.md
@@ -0,0 +1,34 @@
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+
+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/integrations/react-next/app/client-component.tsx b/integrations/react-next/app/client-component.tsx
new file mode 100644
index 0000000000..2147d13624
--- /dev/null
+++ b/integrations/react-next/app/client-component.tsx
@@ -0,0 +1,24 @@
+'use client'
+
+import React from 'react'
+import { useQuery } from '@tanstack/react-query'
+
+export function ClientComponent() {
+ const query = useQuery({
+ queryKey: ['test'],
+ queryFn: async () => {
+ await new Promise((r) => setTimeout(r, 1000))
+ return 'Success'
+ },
+ })
+
+ if (query.isPending) {
+ return
Loading...
+ }
+
+ if (query.isError) {
+ return An error has occurred!
+ }
+
+ return {query.data}
+}
diff --git a/integrations/react-next/app/favicon.ico b/integrations/react-next/app/favicon.ico
new file mode 100644
index 0000000000..718d6fea48
Binary files /dev/null and b/integrations/react-next/app/favicon.ico differ
diff --git a/integrations/react-next/app/layout.tsx b/integrations/react-next/app/layout.tsx
new file mode 100644
index 0000000000..265be95e9e
--- /dev/null
+++ b/integrations/react-next/app/layout.tsx
@@ -0,0 +1,22 @@
+import React from 'react'
+import Providers from './providers'
+import type { Metadata } from 'next'
+
+export const metadata: Metadata = {
+ title: 'Create Next App',
+ description: 'Generated by create next app',
+}
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode
+}) {
+ return (
+
+
+ {children}
+
+
+ )
+}
diff --git a/integrations/react-next/app/page.tsx b/integrations/react-next/app/page.tsx
new file mode 100644
index 0000000000..dd1d6ca900
--- /dev/null
+++ b/integrations/react-next/app/page.tsx
@@ -0,0 +1,16 @@
+import React from 'react'
+import { queryOptions } from '@tanstack/react-query'
+import { ClientComponent } from './client-component'
+
+const options = queryOptions({
+ queryKey: ['foo'],
+})
+
+export default function Home() {
+ return (
+
+
+ Key: {JSON.stringify(options.queryKey)}
+
+ )
+}
diff --git a/integrations/react-next/app/providers.tsx b/integrations/react-next/app/providers.tsx
new file mode 100644
index 0000000000..4e24c0c97b
--- /dev/null
+++ b/integrations/react-next/app/providers.tsx
@@ -0,0 +1,15 @@
+'use client'
+import * as React from 'react'
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
+import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
+
+export default function Providers({ children }: { children: React.ReactNode }) {
+ const [queryClient] = React.useState(() => new QueryClient())
+
+ return (
+
+ {children}
+
+
+ )
+}
diff --git a/integrations/react-next/next.config.js b/integrations/react-next/next.config.js
new file mode 100644
index 0000000000..8d2a9bf37a
--- /dev/null
+++ b/integrations/react-next/next.config.js
@@ -0,0 +1,8 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ eslint: {
+ ignoreDuringBuilds: true,
+ },
+}
+
+module.exports = nextConfig
diff --git a/integrations/react-next/package.json b/integrations/react-next/package.json
new file mode 100644
index 0000000000..6531717f06
--- /dev/null
+++ b/integrations/react-next/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "react-next",
+ "private": true,
+ "scripts": {
+ "build": "next build"
+ },
+ "dependencies": {
+ "@tanstack/react-query": "workspace:*",
+ "@tanstack/react-query-devtools": "workspace:*",
+ "next": "^14.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@types/node": "^18.19.3",
+ "@types/react": "^18.2.45",
+ "@types/react-dom": "^18.2.18",
+ "typescript": "5.2.2"
+ }
+}
diff --git a/integrations/react-next/tsconfig.json b/integrations/react-next/tsconfig.json
new file mode 100644
index 0000000000..e3ea9649f2
--- /dev/null
+++ b/integrations/react-next/tsconfig.json
@@ -0,0 +1,34 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ".eslintrc.cjs"
+ ],
+ "exclude": ["node_modules"]
+}
diff --git a/integrations/react-vite/.eslintrc.cjs b/integrations/react-vite/.eslintrc.cjs
new file mode 100644
index 0000000000..847a1c4694
--- /dev/null
+++ b/integrations/react-vite/.eslintrc.cjs
@@ -0,0 +1,18 @@
+/** @type {import('eslint').Linter.Config} */
+module.exports = {
+ root: true,
+ extends: [
+ '../../.eslintrc.cjs',
+ 'plugin:react/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: './tsconfig.json',
+ },
+ settings: {
+ react: {
+ version: 'detect',
+ },
+ },
+}
diff --git a/integrations/react-vite/.gitignore b/integrations/react-vite/.gitignore
new file mode 100644
index 0000000000..a547bf36d8
--- /dev/null
+++ b/integrations/react-vite/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/integrations/react-vite/index.html b/integrations/react-vite/index.html
new file mode 100644
index 0000000000..d81a5fe9fb
--- /dev/null
+++ b/integrations/react-vite/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Vite + React
+
+
+
+
+
+
diff --git a/integrations/react-vite/package.json b/integrations/react-vite/package.json
new file mode 100644
index 0000000000..5c5d1b0fa3
--- /dev/null
+++ b/integrations/react-vite/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "react-vite",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "vite build"
+ },
+ "dependencies": {
+ "@tanstack/react-query": "workspace:*",
+ "@tanstack/react-query-devtools": "workspace:*",
+ "@vitejs/plugin-react": "^4.2.1",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "vite": "^5.0.10"
+ }
+}
diff --git a/integrations/react-vite/src/App.jsx b/integrations/react-vite/src/App.jsx
new file mode 100644
index 0000000000..7d11f25b98
--- /dev/null
+++ b/integrations/react-vite/src/App.jsx
@@ -0,0 +1,24 @@
+import React from 'react'
+import { useQuery } from '@tanstack/react-query'
+
+const App = () => {
+ const query = useQuery({
+ queryKey: ['test'],
+ queryFn: async () => {
+ await new Promise((r) => setTimeout(r, 1000))
+ return 'Success'
+ },
+ })
+
+ if (query.isPending) {
+ return Loading...
+ }
+
+ if (query.isError) {
+ return An error has occurred!
+ }
+
+ return {query.data}
+}
+
+export default App
diff --git a/integrations/react-vite/src/main.jsx b/integrations/react-vite/src/main.jsx
new file mode 100644
index 0000000000..70e5b183fc
--- /dev/null
+++ b/integrations/react-vite/src/main.jsx
@@ -0,0 +1,18 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
+import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
+import App from './App.jsx'
+
+const queryClient = new QueryClient()
+
+const root = ReactDOM.createRoot(document.getElementById('root'))
+
+root.render(
+
+
+
+
+
+ ,
+)
diff --git a/integrations/react-vite/tsconfig.json b/integrations/react-vite/tsconfig.json
new file mode 100644
index 0000000000..ca2f77f62a
--- /dev/null
+++ b/integrations/react-vite/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noFallthroughCasesInSwitch": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx"
+ },
+ "include": ["src", ".eslintrc.cjs"]
+}
diff --git a/integrations/react-vite/vite.config.js b/integrations/react-vite/vite.config.js
new file mode 100644
index 0000000000..9ffcc67574
--- /dev/null
+++ b/integrations/react-vite/vite.config.js
@@ -0,0 +1,6 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+
+export default defineConfig({
+ plugins: [react()],
+})
diff --git a/integrations/solid-vite/.gitignore b/integrations/solid-vite/.gitignore
new file mode 100644
index 0000000000..a547bf36d8
--- /dev/null
+++ b/integrations/solid-vite/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/integrations/solid-vite/index.html b/integrations/solid-vite/index.html
new file mode 100644
index 0000000000..e2c177e748
--- /dev/null
+++ b/integrations/solid-vite/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Vite + Solid
+
+
+
+
+
+
diff --git a/integrations/solid-vite/package.json b/integrations/solid-vite/package.json
new file mode 100644
index 0000000000..d659e607ba
--- /dev/null
+++ b/integrations/solid-vite/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "solid-vite",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "vite build"
+ },
+ "dependencies": {
+ "@tanstack/solid-query": "workspace:*",
+ "@tanstack/solid-query-devtools": "workspace:*",
+ "solid-js": "^1.8.7",
+ "vite": "^5.0.10",
+ "vite-plugin-solid": "^2.8.0"
+ }
+}
diff --git a/integrations/solid-vite/src/App.jsx b/integrations/solid-vite/src/App.jsx
new file mode 100644
index 0000000000..69b43f0950
--- /dev/null
+++ b/integrations/solid-vite/src/App.jsx
@@ -0,0 +1,22 @@
+import { Match, Switch } from 'solid-js'
+import { createQuery } from '@tanstack/solid-query'
+
+const App = () => {
+ const query = createQuery(() => ({
+ queryKey: ['test'],
+ queryFn: async () => {
+ await new Promise((r) => setTimeout(r, 1000))
+ return 'Success'
+ },
+ }))
+
+ return (
+
+ Loading...
+ An error has occurred!
+ {query.data}
+
+ )
+}
+
+export default App
diff --git a/integrations/solid-vite/src/index.jsx b/integrations/solid-vite/src/index.jsx
new file mode 100644
index 0000000000..9317a5bb8a
--- /dev/null
+++ b/integrations/solid-vite/src/index.jsx
@@ -0,0 +1,19 @@
+/* @refresh reload */
+import { render } from 'solid-js/web'
+import { QueryClient, QueryClientProvider } from '@tanstack/solid-query'
+import { SolidQueryDevtools } from '@tanstack/solid-query-devtools'
+import App from './App'
+
+const queryClient = new QueryClient()
+
+const root = document.getElementById('root')
+
+render(
+ () => (
+
+
+
+
+ ),
+ root,
+)
diff --git a/integrations/solid-vite/vite.config.js b/integrations/solid-vite/vite.config.js
new file mode 100644
index 0000000000..4095d9be50
--- /dev/null
+++ b/integrations/solid-vite/vite.config.js
@@ -0,0 +1,6 @@
+import { defineConfig } from 'vite'
+import solid from 'vite-plugin-solid'
+
+export default defineConfig({
+ plugins: [solid()],
+})
diff --git a/integrations/svelte-vite/.gitignore b/integrations/svelte-vite/.gitignore
new file mode 100644
index 0000000000..a547bf36d8
--- /dev/null
+++ b/integrations/svelte-vite/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/integrations/svelte-vite/index.html b/integrations/svelte-vite/index.html
new file mode 100644
index 0000000000..35b8882d24
--- /dev/null
+++ b/integrations/svelte-vite/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Vite + Svelte
+
+
+
+
+
+
diff --git a/integrations/svelte-vite/package.json b/integrations/svelte-vite/package.json
new file mode 100644
index 0000000000..a4e8471208
--- /dev/null
+++ b/integrations/svelte-vite/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "svelte-vite",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "vite build"
+ },
+ "devDependencies": {
+ "@sveltejs/vite-plugin-svelte": "^3.0.1",
+ "@tanstack/svelte-query": "workspace:*",
+ "@tanstack/svelte-query-devtools": "workspace:*",
+ "svelte": "^4.2.8",
+ "vite": "^5.0.10"
+ }
+}
diff --git a/integrations/svelte-vite/src/App.svelte b/integrations/svelte-vite/src/App.svelte
new file mode 100644
index 0000000000..1a5f9e8d4f
--- /dev/null
+++ b/integrations/svelte-vite/src/App.svelte
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/integrations/svelte-vite/src/Simple.svelte b/integrations/svelte-vite/src/Simple.svelte
new file mode 100644
index 0000000000..8e18cfc849
--- /dev/null
+++ b/integrations/svelte-vite/src/Simple.svelte
@@ -0,0 +1,19 @@
+
+
+{#if $query.isPending}
+ Loading...
+{:else if $query.error}
+ An error has occurred!
+{:else}
+ {$query.data}
+{/if}
diff --git a/integrations/svelte-vite/src/main.js b/integrations/svelte-vite/src/main.js
new file mode 100644
index 0000000000..fb363569dd
--- /dev/null
+++ b/integrations/svelte-vite/src/main.js
@@ -0,0 +1,7 @@
+import App from './App.svelte'
+
+const app = new App({
+ target: document.getElementById('app'),
+})
+
+export default app
diff --git a/integrations/svelte-vite/src/vite-env.d.ts b/integrations/svelte-vite/src/vite-env.d.ts
new file mode 100644
index 0000000000..4078e7476a
--- /dev/null
+++ b/integrations/svelte-vite/src/vite-env.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/integrations/svelte-vite/svelte.config.js b/integrations/svelte-vite/svelte.config.js
new file mode 100644
index 0000000000..8abe4369b8
--- /dev/null
+++ b/integrations/svelte-vite/svelte.config.js
@@ -0,0 +1,5 @@
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
+
+export default {
+ preprocess: vitePreprocess(),
+}
diff --git a/integrations/svelte-vite/vite.config.js b/integrations/svelte-vite/vite.config.js
new file mode 100644
index 0000000000..951a9ba4b6
--- /dev/null
+++ b/integrations/svelte-vite/vite.config.js
@@ -0,0 +1,6 @@
+import { defineConfig } from 'vite'
+import { svelte } from '@sveltejs/vite-plugin-svelte'
+
+export default defineConfig({
+ plugins: [svelte()],
+})
diff --git a/integrations/vue-vite/.gitignore b/integrations/vue-vite/.gitignore
new file mode 100644
index 0000000000..a547bf36d8
--- /dev/null
+++ b/integrations/vue-vite/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/integrations/vue-vite/index.html b/integrations/vue-vite/index.html
new file mode 100644
index 0000000000..9a556eca85
--- /dev/null
+++ b/integrations/vue-vite/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+ Vite + Vue + TS
+
+
+
+
+
+
diff --git a/integrations/vue-vite/package.json b/integrations/vue-vite/package.json
new file mode 100644
index 0000000000..3f9de425d2
--- /dev/null
+++ b/integrations/vue-vite/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "vue-vite",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "test:types": "vue-tsc",
+ "build": "vite build"
+ },
+ "dependencies": {
+ "@tanstack/vue-query": "workspace:*",
+ "vue": "^3.3.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^4.5.2",
+ "typescript": "5.2.2",
+ "vite": "^5.0.10",
+ "vue-tsc": "^1.8.26"
+ }
+}
diff --git a/integrations/vue-vite/src/App.vue b/integrations/vue-vite/src/App.vue
new file mode 100644
index 0000000000..a958333725
--- /dev/null
+++ b/integrations/vue-vite/src/App.vue
@@ -0,0 +1,17 @@
+
+
+
+ Loading...
+ An error has occurred!
+ {{ data }}
+
diff --git a/integrations/vue-vite/src/main.ts b/integrations/vue-vite/src/main.ts
new file mode 100644
index 0000000000..b11bc7e96c
--- /dev/null
+++ b/integrations/vue-vite/src/main.ts
@@ -0,0 +1,5 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+import { VueQueryPlugin } from '@tanstack/vue-query'
+
+createApp(App).use(VueQueryPlugin).mount('#app')
diff --git a/integrations/vue-vite/src/vite-env.d.ts b/integrations/vue-vite/src/vite-env.d.ts
new file mode 100644
index 0000000000..11f02fe2a0
--- /dev/null
+++ b/integrations/vue-vite/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/integrations/vue-vite/tsconfig.json b/integrations/vue-vite/tsconfig.json
new file mode 100644
index 0000000000..4cf77182ea
--- /dev/null
+++ b/integrations/vue-vite/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "preserve",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "vite.config.ts"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/integrations/vue-vite/tsconfig.node.json b/integrations/vue-vite/tsconfig.node.json
new file mode 100644
index 0000000000..42872c59f5
--- /dev/null
+++ b/integrations/vue-vite/tsconfig.node.json
@@ -0,0 +1,10 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/integrations/vue-vite/vite.config.ts b/integrations/vue-vite/vite.config.ts
new file mode 100644
index 0000000000..c40aa3c361
--- /dev/null
+++ b/integrations/vue-vite/vite.config.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+export default defineConfig({
+ plugins: [vue()],
+})
diff --git a/knip.ts b/knip.ts
index 2b18e392dd..e19f84e648 100644
--- a/knip.ts
+++ b/knip.ts
@@ -4,7 +4,7 @@ const vueCompiler = /