Jacob Paris
← Back to all content

Where to host your Remix app in 2024

Remix supports many different hosting options. This guide will help you choose the right one for your app.

Last updated on Apr 04 2024. Is any of this out of date? Please yell at me on Twitter and I will fix it, or submit a PR to the article. Links to data sources are appreciated.

Recommendations

This guide is not meant to sway you toward any one provider, just to give you the information you need to make an informed decision.

That said, I do believe that the best architecture for most people is to run Remix in a managed container on a long-lived server, using the backend-for-frontend pattern within the app, and occasionally calling serverless functions for workloads that demand it.

You should highly prefer keeping your app server and database as close to each other as possible. This might be the single most important performance factor. Hosting your app on Vercel and having each loader and action call an API server hosted somewhere else is going to throttle your app's performance punitively.

Serverless Functions

Serverless functions are a form of managed hosting where application code is started and stopped on demand at request-time. Sometimes entire applications fit in a single function, or an app can be distributed across many, with each endpoint being its own function.

  • often billed by the number of requests, the amount of time the function is running, and the amount of memory the function uses
  • can scale up to handle large amounts of traffic, and scale back down when traffic resumes to normal levels
  • often run in normal datacenters, but others run on an edge network, which means they run in datacenters all over the world, close to the end user
  • often run Node.js, but "edge" functions run on the very fast, but less supported, V8 runtime

Because of the ephemeral nature of these functions, the first request to a function may cause a cold-start and take several seconds to respond.

All of these platforms also support static hosting, such as with Remix SPA mode.

VercelFastlyNetlifyCloudflareSST
RuntimeNode/V8 (per route)WASMNode/V8V8Node
Remix ViteYesYesYesYesYes
Git-based deploysYesNoYesYeswith Seed
Deploy previewsYesNoYesYeswith Seed
WebsocketsNoYesNoYesYes
Bundle size50MB100MB50MB25MB50MB
Request body size4.5MBNo limit3MB (edge ♾️)100MB6MB
Image CDNYesYesYesYesYes
Colocated databasesPostgres, KV, BlobKVBlobSQL, KV, BlobEverything AWS offers
SPA ModeYesYesYesYesYes

Long-lived servers

A more traditonal approach to application hosting is to run your application on a long-lived server. The server (or servers) remain running and handle requests as they come in.

  • no cold start time, so the first request is as fast as any other
  • can be more expensive than serverless during low traffic
  • you can run a database on the same server, so you don't need to worry about network latency
  • most of these platforms also support deploying managed Redis and Postgres databases
  • can have full access to the file system, to spawning child processes, to streaming responses, deferred data, server-sent events, running websocket servers in parallel with your app, and more
FlyRenderRailwayDigitalOcean
Git based deployswith FlyCDYesYesYes
Preview environmentswith FlyCDYesNoNo
Staging environmentsYesNoYesNo
Static assets CDNYesNoNoYes
Multi-region deploysYesNoNoNo

Vercel

Vercel is a serverless hosting platform for web apps.

They support git-based deployments, and deploy previews for every branch and pull request, as well as some fancy collaboration tools built on top.

Vercel allows you to specify whether to use a Node runtime or a V8 Edge runtime on a per-page basis, so you can use Node functions for some pages and V8 functions for others.

As Vercel splits each endpoint into its own function, the 50MB limit for each function bundle becomes very hard to hit.

  • Vercel does not support websockets, and while it does support streaming, connections can only be open for 30s so Server-Sent Events aren't practical.
  • Full cache-control support, including stale-while-revalidate and stale-if-error, as well as the s-maxage property.
  • The maximum request body size with Vercel is 4.5MB, which can be problematic for direct file uploads.

Vercel supports several colocated databases, including Vercel Postgres, Vercel KV, and Vercel Blob.

Fastly

Fastly is a powerful CDN and hosting platform and the hosting provider of choice for the Remix + React Router docs.

Fastly supports Remix with their Compute@Edge platform. This is a serverless platform that runs on the edge, compiling Typescript down to WebAssembly.

Fastly has full cache-control header support, including stale-while-revalidate and stale-if-error. For more control, they also offer the Surrogate-Control header for making CDN specific settings.

They also offer APIs to programmatically purge the cache, which is not common.

Fastly has support for websockets, which is not common for serverless platforms.

  • Because it doesn't run node, many node modules are not compatible with Remix on Fastly. In exchange, you get the current fastest possible runtime.
  • Fastly supports a 100MB compiled bundle size limit, measured after compilation to WASM and after all compiler optimizations have been applied.
  • No git based deployments, but easy to deploy in GitHub Actions

Fastly supports colocated KV storage deployed alongside your app.

Netlify

Netlify is the original JAMStack hosting platform that has grown from a simple static site host to a full-featured serverless platform.

With built-in git-based deployments, every time you push to your git repo, Netlify will build and deploy your app. You can also use deploy previews to test your app before merging a pull request.

Netlify supports both Node (Netlify functions) and V8 (Netlify Edge Functions) runtimes as separate targets, so your entire app will run on one or the other.

On node, you can choose which region your functions are deployed to, but you can’t deploy to multiple regions at once. Edge functions are always multi-region.

Edge functions also allow server-sent events on Netlify

Netlify supports powerful fine-grained cache control in a few ways

  • Cache-Tag headers which can be used to invalidate specific pages or assets
  • Netlify-Vary header, which can vary cache policies on specific headers, like device type, or specific cookie values, like user sessions or A/B tests.

They also support Blob Storage for colocated file storage.

Cloudflare

Cloudflare Pages is a hosting service, like Netlify or Vercel, but built on Cloudflare's network. You get a git based deploy workflow and preview deployments for different branches.

Static content is hosted from Cloudflare's CDN and the rest of the Remix app is compiled into a single cloudflare worker on the edge. which uses the V8 runtime, so they aren't compatible with many node modules.

Cloudflare supports the additional CDN-Cache-Control header for making CDN specific cache settings.

Cloudflare supports a request body size of 100MB for most apps, but if you need more, you can request a limit increase. This is higher than any other serverless platform.

Websockets also work on Cloudflare, which is not common for serverless platforms.

  • Pages supports a bundle size of 25MB
  • Deployments have a 400ms startup time limit, which can be problematic as your app grows.

SST

SST is an infrastructure-as-code framework for building serverless applications on AWS.

They support Remix via the RemixSite construct which will deploy your app to AWS Lambda or AWS Lambda@Edge and using Cloudfront as a CDN.

  • Git based deploys are not included, but you can easily set up your own with a Github Action or by using Seed, the deployment infrastucture tool that is built by the SST team.
  • Preview and staging environments are created via the SST CLI, which you can do in a Github Action.

Fly.io

Fly.io is a managed container platform that runs on the edge.

One of Fly's biggest advantages is its multi-region support. You can deploy your app to any of Fly's 20+ regions, and Fly will automatically replicate your app to every region you deploy to. This means that your app will be closer to your users, and will be more resilient to outages.

You can scale the amount of RAM and CPU provisioned for your app with a simple CLI command. By default, Fly will give you 256MB of RAM, but this is pretty slim for Remix apps, and I recommend 512MB as a reasonable minimum for most apps.

The number of available machines to serve your app can also be configured, and you can tell fly to autoscale within a range. This is useful for autoscaling to zero for low traffic applications.

Fly also supports Postgres and Redis databases that can be deployed alongside your app and replicated across every region you deploy to.

Fly offers a CDN for serving static assets, but does not offer APIs to programmatically purge the cache. Cache-control headers are supported, including stale-while-revalidate and stale-if-error.

  • There is no built in git based deployments, but easy to set up in GitHub Actions
  • No preview environments. You can use FlyCD for automatic preview environments on Fly.io
  • Fly has an 8GB uncompressed docker image limit
  • Fly has a 10MB request body buffer, but can handle larger bodies by streaming them

Render

Render is a managed hosting platform that supports Remix without needing Docker, though you still have the ability to package your app as a Docker image if you have special dependencies you want to install.

Render supports git based deployments, so you just need to push code to your git repo and Render will deploy it. They also support preview environments for their Team plans.

Their built in databases are Postgres and Redis, though nothing stops you from spinning up new containers running anything else.

  • There is no multi-region support like Fly
  • Render has no request body size limit
  • They don't seem to have published their bundle/image limits

Railway

Railway is a managed container hosting platform. If you don't supply your own Dockerfile, Railway will let you deploy without it.

Railway supports git based deployments, so you just need to push code to your git repo and Railway will deploy it. They also support preview environments for their Team plans.

For databases, Railway has built-in support for Postgres, MySQL, Redis, and MongoDB, and they have a web UI for managing them as well.

  • Railway supports deploying to different continental regions, but no multi-region support like Fly
  • No automatic preview environments, but it's easy to set up staging environments

DigitalOcean App Platform

DigitalOcean App Platform is a managed container hosting platform. If you don't supply your own Dockerfile, DigitalOcean will let you deploy without it.

DigitalOcean supports git-based deployments and also offers a Github action for more advanced deployment workflows.

Postgres, MySQL, Redis, and MongoDB databases can be deployed from the DigitalOcean web console alongside your application.

  • No automatic preview environments or built-in staging environments

GitHub Pages

Remix v2.5 introduces SPA mode, which allows you to export your app as a static bundle of HTML, CSS, and JS files.

GitHub Pages is an official GitHub feature that allows you to set up a public website for your GitHub repository.

You can either build your site locally and commit the bundle with the static assets you want to host, or you can use a GitHub action to build your app and push the static assets to the gh-pages branch.

Other hosts

  • PartyKit is a framework for building collaborative apps on Cloudflare infrastructure. PartyKit's Remix starter uses a custom server that allows your Remix app and your websocket server to be deployed to Cloudflare together.
  • AWS Fargate is a managed container platform that allows you to run your app in a container on AWS. This is the equivalent to Fly/Render/Railway but running directly in AWS.
  • Arc is a serverless framework that allows you to deploy your app to AWS Lambda.
  • Remix Adapter for Azure Functions
Professional headshot
Moulton
Moulton

Hey there! I'm a developer, designer, and digital nomad building cool things with Remix, and I'm also writing Moulton, the Remix Community Newsletter

About once per month, I send an email with:

  • New guides and tutorials
  • Upcoming talks, meetups, and events
  • Cool new libraries and packages
  • What's new in the latest versions of Remix

Stay up to date with everything in the Remix community by entering your email below.

Unsubscribe at any time.