TanStackFull-stack

How to deploy a TanStack Start app on Rock8Cloud

Deploy a full-stack TanStack Start app to Rock8Cloud - server-side rendered React on its own Node server. Connect your GitHub repo or start from the one-click blueprint, live in about two minutes.

Updated 29 September 2026·Port 3000
The Driftwave demo landing page the TanStack Start blueprint deploys, with a hero headline and a morning digest card

TanStack Start renders React on the server and ships it as a self-contained Node server. On Rock8Cloud it runs in your own container. Connect your GitHub repo, hit deploy, and you get a live URL in about two minutes.

Deploy your app#

One step: select GitHub repository deployment, connect your repo, and hit Deploy. Rock8Cloud builds the container image and serves your app at a live URL, with build and runtime logs in your browser.

No Dockerfile in the repo? Copy the example below.

Pro tip:Set EXPOSE 3000 in your Dockerfile and Rock8Cloud infers the container port automatically - nothing else to configure.

Example Dockerfile
# Build
FROM oven/bun:1.3.14 AS build
WORKDIR /app
COPY package.json bun.lock ./
RUN bun install --frozen-lockfile
COPY . .
RUN bun run build

# Run
FROM node:22-slim
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000
COPY --from=build /app/.output ./.output
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]

Vite and Nitro emit the whole server to .output, so the runtime image needs nothing else. PORT is overridden by the platform and the server binds whatever it is given.

Don’t have an app?#

One-click start from our open-source template - TanStack Start on React 19 with TanStack Query, Tailwind CSS v4 and shadcn/ui wired up. It’s cloned to your GitHub, built, and put live on our domain. Or just browse it on GitHub and borrow what you need.

Pro tip:You can assign your own domain to the app later.

TanStack Start example
rock8-cloud/tanstack-start-blueprint

Or ask an agent instead of clicking. With Rock8Cloud connected over MCP, deploy_blueprint with the tanstack-start slug forks the same template into your GitHub account, creates the project with its service, and starts the first build. The template also ships a .mcp.json, so an agent opened in your clone can redeploy it with a single prompt.

The template’s landing page is for Driftwave, a fictional product. Replace the copy in src/content/landing.ts and add routes under src/routes/.

What you get#

  • A live URL on our domain - share it the moment the first build lands.
  • Deploy on push - every push to your configured default branch rebuilds and ships automatically.
  • A preview URL per pull request - review real builds, not screenshots.
  • Instant rollback - one click back to any known-good build.

Environment variables#

Read configuration at request time inside server functions or route handlers (process.env.MY_VAR), not at module top level. The image is built without secrets, and Rock8Cloud provides the environment when the container starts. Anything read in a server function stays on the server and never reaches the browser.

Need a database?#

Server functions can talk to a database directly. Add PostgreSQL or Dragonfly to the same project in one click and link its connection string to your service. Want auth and a separate API from day one? Start from the Elysia + TanStack dashboard instead.

Frequently asked questions

Do I need a Dockerfile to deploy TanStack Start?
Copy the example from this guide. It builds with Bun and runs the Nitro server output on Node. If it sets EXPOSE, Rock8Cloud infers the container port automatically.
Is there a faster way to try it?
Yes. The open-source TanStack Start blueprint clones to your GitHub account, builds, and goes live on our domain in one click. All you need is a GitHub sign-in. You can assign your own domain later.
Is this for TanStack Start or TanStack Router?
This guide targets TanStack Start, which renders on the server and runs server functions. A client-only TanStack Router SPA deploys like a static React app.
How do I use environment variables?
Read them at request time inside server functions or route handlers with process.env, not at module top level. The image is built without secrets and Rock8Cloud provides the environment at runtime. PORT is set by the platform.
How do I add a database?
Provision PostgreSQL in the same project and link its connection string to your service. Read it inside a server function so it never reaches the browser.

More guides

Ship today

Ship your TanStack Start app.Today.

Server-rendered React on its own Node server. Connect the repo, hit deploy, share the URL.

30 days free. No credit card required to start.