Skip to main content
Deploying any JavaScript/Node based framework on Upsun is easy. But as Remix does not have any bundled web server, let’s see how we can run it. We will implement and deploy the Remix Tutorial here so you can refer to it if you need to grab the actual code.

Initializing the Remix application

Let’s start by initializing our application:
We can start it locally with npm run dev:
We have followed the amazing tutorial and we are now presented with a fully working application: Remix Application Don’t forget to commit your changes to the local repository.

Creating the Upsun configuration

Let’s move to the fun part. Make sure your Upsun CLI is installed and logged in with upsun login. We now need to create a new project to deploy our Remix. We will use upsun project:create:
Choose a name and a deployment region. The command will automatically set a new git remote on your local repository. We now have an empty Upsun project ready to be deployed to:
We now need a configuration to tell Upsun how to run our project. Fortunately Upsun comes with the upsun ify command that will generate most of the YAML configuration automatically.
We haven’t selected any services here because our data is fully local. If your application need to write some local files, look for the mounts: key in the newly created .upsun/config.yaml.

Setting up the Node.js server

As mentionned in the Remix documentation, the default setup does not come with a web server capable of handling incoming requests.
Remix is not an HTTP server, but rather a handler inside an existing HTTP server. Adapters allow the Remix handler to run inside the HTTP server. Some JavaScript runtimes, especially Node.js, have multiple ways to create an HTTP server. For example, in Node.js you can use Express.js, fastify, or raw http.createServer.
We will go the easy route and use the Remix App Server. It is a basic production-ready node.js Express server made by the Remix team. Good enough for our use-case. Running it locally is straight-forward:
Let’s implement this in our Upsun configuration. As the generated configuration already includes the build command, we just need to specify our start command. Upsun automatically inject the $HOST environment variable so you don’t need to explicitely add it to the command.
Commit your changes and push your code:

Deploying to Upsun

The Upsun platform is now fetching the dependencies and building the project. After a couple minutes, our application is now deployed:
You can access the app on the auto-generated URL: Remix Application Deployed Congratulations! Our app is deployed and working. If you want to add more customization to how requests are handled, the Remix documentation explains how to implement @remix-run/express.
Last modified on April 17, 2026