Skip to main content

Installation

Remix 3 can be installed using any JavaScript package manager. The framework is distributed as a single remix package that includes all core functionality, or you can install individual packages as needed.

Requirements

Remix 3 requires Node.js v25 or higher when using Node.js as your runtime.
For other runtimes:
  • Bun: Any recent version
  • Deno: Any recent version
  • Cloudflare Workers: Compatible with the Workers runtime

Package Managers

Install Remix 3 using your preferred package manager:
npm install remix

Individual Packages

You can also install individual packages if you only need specific functionality:
npm install @remix-run/fetch-router
When using individual packages, make sure to install all required dependencies. Check each package’s documentation for its specific requirements.

TypeScript Configuration

Remix 3 is written in TypeScript and includes full type definitions. For the best development experience, configure your tsconfig.json:
tsconfig.json
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "verbatimModuleSyntax": true,
    "lib": ["ESNext"]
  }
}

Runtime-Specific Setup

Node.js

For Node.js applications, you’ll need the @remix-run/node-fetch-server package to create HTTP servers:
npm install remix
Create a basic server:
server.ts
import * as http from 'node:http'
import { createRequestListener } from 'remix/node-fetch-server'
import { router } from './app/router.js'

const PORT = 3000

let server = http.createServer(
  createRequestListener(async (request) => {
    return await router.fetch(request)
  })
)

server.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}`)
})
Run with native TypeScript support (Node.js v25+):
node server.ts

Bun

Bun has built-in TypeScript support and a native HTTP server:
index.ts
import { router } from './app/router.js'

const PORT = 3000

Bun.serve({
  port: PORT,
  async fetch(request) {
    return await router.fetch(request)
  },
})

console.log(`Server running at http://localhost:${PORT}`)
Run with:
bun run index.ts

Deno

Deno works directly with Remix 3’s web standard APIs:
main.ts
import { router } from './app/router.ts'

const PORT = 3000

Deno.serve({ port: PORT }, async (request) => {
  return await router.fetch(request)
})

console.log(`Server running at http://localhost:${PORT}`)
Run with:
deno run --allow-net main.ts

Cloudflare Workers

For Cloudflare Workers, use Wrangler for development:
npm install -D wrangler
Create a worker:
worker.ts
import { router } from './app/router.js'

export default {
  async fetch(request: Request): Promise<Response> {
    return await router.fetch(request)
  },
}
Configure wrangler.toml:
wrangler.toml
name = "my-remix-app"
main = "worker.ts"
compatibility_date = "2024-01-01"
Run locally:
npx wrangler dev

Installing Preview Builds

To try the latest development version from the main branch, use pnpm (version 9+):
pnpm install "remix-run/remix#preview/main&path:packages/remix"
For individual packages:
pnpm install "remix-run/remix#preview/main&path:packages/@remix-run/fetch-router"
Preview builds are bleeding-edge and may contain unstable features. Use them for testing and experimentation, not production.

Verify Installation

Create a simple test file to verify your installation:
test.ts
import { createRouter } from 'remix/fetch-router'
import { route } from 'remix/fetch-router/routes'

let routes = route({
  home: '/',
})

let router = createRouter()

router.get(routes.home, () => {
  return new Response('Remix 3 is working!')
})

let response = await router.fetch(new Request('http://localhost/'))
console.log(await response.text()) // "Remix 3 is working!"
Run it:
node test.ts
If you see Remix 3 is working! in your console, you’re all set!

Next Steps

Quick Start

Build your first Remix 3 application

Core Concepts

Learn about routing, middleware, and architecture

Build docs developers (and LLMs) love