Use the following commands to quickly start a Remix v2 app with a basic Express server:
- CommonJS + server.js:
npx create-remix --template https://github.com/xHomu/remix-v2-server/tree/cjs-server.js
- CommonJS + server.ts:
npx create-remix --template https://github.com/xHomu/remix-v2-server/tree/cjs-server.ts
- ES Modules + server.js:
npx create-remix --template https://github.com/xHomu/remix-v2-server/tree/esm-server.js
- ES Modules + server.ts:
npx create-remix --template https://github.com/xHomu/remix-v2-server/tree/cjs-server.ts
If updating from a v1 Remix app, the following files probably needs to be adjusted:
- package.json
- remix.config.js
- tsconfig.json
- server.ts or server.js
What changes will depend on whether your repo is ESM/CJS, and whether you're using a typescript or javascript server:
For more on Remix v2 dev server, check these talks by @pcattori Pedro Cattori!
This is actually a Node 20 bug, downgrade to Node 18 should fix it.
- See TypeStrong/ts-node#1997 for issue status
This occurs because you're accidentally using the built-in RAS instead of of a custom Express server.js/ts.
Make sure you're using v2_dev: true
instead of unstable_dev: true
when using Remix v1.18+.
To maintain Windows compatibility, escape the quotation marks in package.json script:
- ❌
"dev": "remix dev -c 'npm run dev:server' --manual",
- ✅
"dev": "remix dev -c \"npm run dev:server\" --manual",
- Reference remix-run/remix#6538
Due to upstream an tsx watch
bug, use ts-node
and nodemon --watch
instead.
If you prefer tsx watch
, you will need to patch node_modules\@remix-run\dev\dist\devServer_unstable\index.js
with patch-package
to fix the issue:
let newAppServer = execa.command(command, {
- stdio: "pipe",
+ stdio: ['ignore', 'inherit', 'inherit'],
+ shell: true,
Alternatively, you can use tsx
without the watch flag: "dev:server": "tsx ./server.ts",
.
Beware that without tsx watch
, changes to server.ts
will not appear until you manually reboot the server.
- See also: tsx workaround on Epic Stack
Start the Remix development asset server and the Express server by running:
npm run dev
This starts your app in development mode, which will purge the server require cache when Remix rebuilds assets so you don't need a process manager restarting the express server.
First, build your app for production:
npm run build
Then run the app in production mode:
npm start
Now you'll need to pick a host to deploy it to.
If you're familiar with deploying express applications you should be right at home just make sure to deploy the output of remix build
build/
public/build/
When you ran npx create-remix@latest
there were a few choices for hosting. You can run that again to create a new project, then copy over your app/
folder to the new project that's pre-configured for your target server.
cd ..
# create a new project, and pick a pre-configured host
npx create-remix@latest
cd my-new-remix-app
# remove the new project's app (not the old one!)
rm -rf app
# copy your app over
cp -R ../my-old-remix-app/app app