# tanstack.com: the docs and marketing site for the TanStack projects

> The TanStack/tanstack.com repository holds the website that serves documentation for every TanStack library, fetching doc pages from the sibling repositories and assembling them into one site, with a Cloudflare Workers deployment and an optional database behind the accounts and registry features. It suits a maintainer who wants to edit docs in the project they belong to rather than in a separate site repository.

**TanStack/tanstack.com** — The marketing and docs site for all TanStack projects

- Repository: https://github.com/TanStack/tanstack.com
- Website: https://tanstack.com
- Stars: 1,132 · Forks: 417
- Language: TypeScript
- License: not declared
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/tanstack-tanstack-com

## One site assembled from sibling repositories

This repository is the marketing and docs site for all TanStack projects, and the home of the TanStack ecosystem. It is built with TanStack Router and deployed on Cloudflare Workers. The architecture is the interesting part. The documentation for all TanStack projects, except React Charts, is hosted on tanstack.com, and the doc pages are fetched from GitHub, so the content lives in the project repository rather than in a separate documentation tree. In development, a local copy takes precedence when one is available. The consequence is that a documentation fix is a pull request against the library it documents, and the site assembles the whole catalogue at build time. The primary language is TypeScript, the default branch is `main`, the last push was on 2026-10-15, and the repository has no GitHub releases since it is a site rather than a library.

## Running it, and the promise that nothing else is needed

The quick start is two commands from your terminal:

```sh
pnpm install
pnpm dev
```

It requires Node.js 22.12 or newer and pnpm 11, and it starts the site at http://localhost:3000 and rebuilds on file changes. The detail in the README is the one that makes this approachable, that no environment file, Cloudflare account, database or sibling repository is required, and that internet access is needed to download dependencies and read remote documentation. So a first run works with a clone and two commands, and the site fills itself with docs fetched from GitHub. The package manifest shows the shape of the tooling, with `dev` running through a `with-env` wrapper that loads `.env.local` with dotenv, a `build` script running `vite build --logLevel warn`, and a separate `dev:cloudflare` variant that sets `DISABLE_REDACT=true` for the Workers runtime.

## The optional services table, and what each one degrades to

The optional services section is a table of fifteen or so integrations, each with the credentials it needs and what happens without them, and that second column is the most valuable part of the README. Missing credentials disable the relevant local service, they do not prevent the site from starting. Public docs read from GitHub when there is no local copy, with `TANSTACK_LOCAL_REPOS_DIR` and a `TANSTACK_DOCS_USE_REMOTE=true` flag to skip local files. GitHub data stays anonymous without `GITHUB_AUTH_TOKEN`, with GitHub's rate limits and private sponsor data omitted. Database features, which cover the project gallery and the Intent registry lists and the feedback leaderboard, are empty without `DATABASE_URL` and applied migrations, and accounts and writes are unavailable. GitHub and Google sign-in are hidden without the database plus the respective OAuth client id and secret. Sessions generate a random worker-local secret in development, so a restart signs you out, and production requires a configured secret.

## The AI and commerce features, and their cost

The later rows of the table are where a site like this gets interesting. Workers AI needs a `CLOUDFLARE_API_TOKEN` plus a `CLOUDFLARE_ACCOUNT_ID` to use your own account, and without it remote bindings are disabled and the included chat model is unavailable, though local R2, Durable Objects and Workflows still use the local emulator. TanChat and connected accounts need the database, sign-in, chat access and an `ENCRYPTION_KEY` of at least 32 characters, and without that private chat and encrypted connected-account storage are unavailable, though provider API keys can be added in chat settings once chat is configured. The AI Gateway has its own account id, gateway id and token, Kody has an origin and the encryption key, notifications go to Discord or Resend, server error reporting uses a Sentry DSN, the Kapa docs assistant has a Vite-prefixed integration id, and the WebContainer runtime has a Vite-prefixed API key. The README also warns that Cloudflare's included model makes real remote requests and can incur usage charges once a token is supplied.

## Cloning the sibling repositories, and the naming rule

To edit docs for a project you need the sibling repositories, and the README sets out the layout. You create a `tanstack` parent directory and clone this repo alongside the projects:

```sh
mkdir tanstack && cd tanstack
git clone git@github.com:TanStack/tanstack.com.git
git clone git@github.com:TanStack/query.git
git clone git@github.com:TanStack/router.git
git clone git@github.com:TanStack/table.git
```

and the resulting structure has `tanstack.com/`, `query/`, `router/` and `table/` as siblings. The warning is the part that trips people up, that directory names must match repo names exactly, for example `query` and not `tanstack-query`, because the app finds docs by looking for sibling directories by name. The root of the repository shows the same convention in the tooling, with `content-collections.ts` and a `content:build` script that runs `scripts/build-content-collections.mjs` to generate the content index the routes read.

## The database, the deploy and the tests

The manifest shows a Drizzle-based persistence layer with `drizzle.config.ts` and a `drizzle/` directory, and the scripts `db:generate`, `db:migrate` and `db:push` for schema work. The deploy script is a chain worth reading, since it shows what a release actually involves: it runs `pnpm run db:migrate`, then `db:verify-builder` and `db:verify-chat`, then the Cloudflare build, then `wrangler deploy --name tanstack-com`, and finally a cache purge. The production bindings and deployment configuration stay in `wrangler.jsonc`, and local storage stays in `.wrangler/state`. Linting has moved to oxlint with the type-aware flag, formatting to oxfmt, and the tests are Vitest with separate configs for the chat runtime, plus a `harness-tests/` directory and a `tests/` directory. There is also a `desktop/` directory, `patches/`, a `skills-lock.json` and an `opencode.json` for agent tooling, and `.husky/` for git hooks.

## Conclusion

Adopt this repository if you are running a TanStack project and want its documentation published on tanstack.com, since the site fetches doc pages from the project repository itself. Skip it if you only need one project's docs, because the whole design assumes a set of sibling repositories cloned side by side. Before you set it up, read the local setup section, because the directory names must match the repo names exactly or the app will not find the docs, and note that the site starts with no environment file at all, with every optional service degrading to a documented reduced state.

## FAQ

### How does the tanstack.com site get its documentation?

Doc pages are fetched from GitHub, and in development a local copy takes precedence when one is available. You only need the sibling repositories if you are editing their docs, and the directory names must match the repo names exactly because the app finds docs by looking for sibling directories by name.

### What do I need to run the TanStack site locally?

Node.js 22.12 or newer and pnpm 11. Run `pnpm install` then `pnpm dev`, which starts the site at http://localhost:3000. No environment file, Cloudflare account, database or sibling repository is required, though internet access is needed to download dependencies and read remote documentation.

### What happens if I do not configure optional services in tanstack.com?

Missing credentials disable the relevant local service, they do not prevent the site from starting. The README documents each case, for example sign-in buttons are hidden without OAuth credentials, the project gallery and registry lists are empty without a database, and remote Workers AI bindings are disabled without a Cloudflare API token.

### How is the TanStack site deployed?

To Cloudflare Workers with wrangler. The deploy script runs the database migrations, verifies the builder and chat schemas, builds for Cloudflare, runs `wrangler deploy --name tanstack-com` and then purges the cache, with production bindings in wrangler.jsonc.

## Sources

- [Issues](https://github.com/TanStack/tanstack.com/issues)
- [Project website](https://tanstack.com)
- [README](https://github.com/TanStack/tanstack.com/blob/main/README.md)
- [TanStack/tanstack.com on GitHub](https://github.com/TanStack/tanstack.com)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/tanstack-tanstack-com
