Use TanStack Start with Bun

TanStack Start is a full-stack framework powered by TanStack Router and Vite. It supports full-document SSR, streaming, server functions, and bundling.


Create a new TanStack Start app

Use the interactive CLI to create a new TanStack Start app.

terminal
bunx @tanstack/cli create my-tanstack-app

Start the dev server

Change to the project directory and start the Vite dev server with Bun.

terminal
cd my-tanstack-app
bun --bun run dev

Update scripts in package.json

In the scripts field of your package.json, prefix the Vite CLI commands with bun --bun so that Bun runs the Vite CLI for dev, build, and preview.

package.json
{
  "scripts": {
    "dev": "bun --bun vite dev", 
    "build": "bun --bun vite build", 
    "serve": "bun --bun vite preview" 
  }
}

Hosting#

To host your TanStack Start app in production, use Nitro or a custom Bun server.

Add Nitro to your project

Add Nitro to your project to deploy your TanStack Start app to different platforms.

terminal
bun add nitro

Update your vite.config.ts file

Add the Nitro plugin to your vite.config.ts file.

vite.config.ts
// other imports...
import { nitro } from "nitro/vite"; 

const config = defineConfig({
  plugins: [
    tanstackStart(),
    nitro({ preset: "bun" }), 
    // other plugins...
  ],
});

export default config;

The bun preset is optional, but it configures the build output specifically for Bun's runtime.

Update the start command

Make sure build and start scripts are present in your package.json file:

package.json
  {
    "scripts": {
      "build": "bun --bun vite build", 
      // The .output files are created by Nitro when you run `bun run build`.
      // Not necessary when deploying to Vercel.
      "start": "bun run .output/server/index.mjs" 
    }
  }

You do not need the custom start script when deploying to Vercel.

Deploy your app

Use one of the following guides to deploy your app to a hosting provider.

When deploying to Vercel, either add "bunVersion": "1.x" to your vercel.json file, or set the Bun version in the nitro config in your vite.config.ts file:

Do not use the bun Nitro preset when deploying to Vercel.

vite.config.ts
export default defineConfig({
  plugins: [
    tanstackStart(),
    nitro({
      preset: "bun", 
      vercel: { 
        functions: { 
          runtime: "bun1.x", 
        }, 
    }, 
    }),
  ],
});

Templates#


→ See TanStack Start's hosting documentation