# Railway Documentation > Railway is an all-in-one intelligent cloud provider that makes it easy to provision infrastructure, develop locally, and deploy to the cloud. This file contains the full text of the Railway documentation, intended for LLM consumption. ### Quick start Source: https://docs.railway.com/quick-start.md Get started with Railway in minutes! This Quick Start tutorial walks you through deploying your first app via GitHub, the CLI, a Docker image, or a template. Railway is a deployment platform that lets you provision infrastructure, develop locally with that infrastructure, and deploy to the cloud or simply run ready-made software from the template marketplace. **This guide covers two different topics to get you quickly started with the platform -** 1. **Deploying your project** - Bring your code and let Railway handle the rest. **[Option 1](/quick-start#deploying-your-project---from-github)** - Deploying from **GitHub**. **[Option 2](/quick-start#deploying-your-project---with-the-cli)** - Deploying with the **[CLI](/cli)**. **[Option 3](/quick-start#deploying-your-project---from-a-docker-image)** - Deploying from a **Docker Image**. 2. **Deploying a template** - Ideal for deploying pre-configured software with minimal effort. To demonstrate deploying directly from a GitHub repository through Railway's dashboard, this guide uses a basic NextJS app that was prepared for this guide. For the template deployment, this guide uses the Umami template from the template marketplace. #### Deploying your project - from GitHub If this is your first time deploying code on Railway, it is recommended to forking the previously mentioned NextJS app's repository so that you can follow along. To get started deploying your NextJS app, first make a new project. - Open up the dashboard β†’ Click **New Project**. - Choose the **GitHub repo** option. screenshot of new project menu with deploy from github selected _Railway requires a valid GitHub account to be linked. If your Railway account isn't associated with one, you will be prompted to link it._ - Search for your GitHub project and click on it. screenshot of new project menu with nextjs repo selected - Choose either **Deploy Now** or **Add variables**. **Deploy Now** will immediately start to build and deploy your selected repo. **Add Variables** will bring you to your service and ask you to add variables, when done you will need to click the **Deploy** button at the top of your canvas to initiate the first deployment. _For brevity, choose **Deploy Now**._ screenshot of new project menu with deploy now option selected When you click **Deploy Now**, Railway will create a new project for you and kick off an initial deploy after the project is created. **Once the project is created you will land on your Project Canvas**. #### Deploying your project - with the CLI As with the [Deploy from GitHub guide](/quick-start#deploying-your-project---from-github), if you're deploying code with the CLI for the first time, it's recommended to fork the NextJS app's repository to follow along. Since you'll be deploying local code, you'll also need to clone the forked repository. The CLI can create a new project entirely from the command line, use it to scaffold your project. - Open up a command prompt inside your local project. - Run `railway init` This will create a new empty project with the name provided, which will be used for any subsequent commands. screenshot of the command line after railway init was run Deploying your code is now only a single command away. - Run `railway up` The CLI will now scan your project files, compress them, and upload them to Railway's backend for deployment. screenshot of the command line after railway up was run **You can now run `railway open` and you will taken to your [Project Canvas](/quick-start#the-canvas)**. #### Deploying your project - from a Docker image Railway supports deploying pre-built Docker images from the following registries: - Docker Hub - GitHub Container Registry - RedHat Container Registry - GitLab Container Registry To get started deploying a Docker image, first make a new project. - Open up the dashboard β†’ Click **New Project**. - Choose the **Empty project** option. screenshot of new project menu with deploy from github selected After the project is created, you will land on the Project Canvas. A panel will appear prompting you to Add a Service. screenshot of add a service panel on the canvas - Click **Add a Service** and select the **Docker Image** option from the modal that pops up. screenshot of select docker image option selected - In the **Image name** field, enter the name of the Docker image, e.g, `blueriver/nextjs` and press Enter. screenshot of example docker image name, blueriver/nextjs in modal If you're using a registry other than Docker Hub (such as GitHub, GitLab, Quay), you need to provide the full Docker image URL from the respective registry. screenshot of docker image name entry in modal - Press Enter and click **Deploy**. Railway will now provision a new service for your project based on the specified Docker image. And that's it! πŸŽ‰ Your project is now ready for use. Private Docker registry deployments require the [Pro plan](/services#deploying-a-private-docker-image). #### The canvas Whether you deploy your project through the dashboard with GitHub or locally using the CLI, you'll ultimately arrive at your project canvas. screenshot of the project canvas showing the nextjs deploy This is your _mission control_. Your project's infrastructure, environments, and deployments are all controlled from here. Once the initial deployment is complete, your app is ready to go. If applicable, generate a domain by clicking Generate Domain within the service settings panel. **Additional Information -** If anything fails during this time, you can explore your build or deploy logs for clues. A helpful tip is to scroll through the entire log; important details are often missed, and the actual error is rarely at the bottom! If you're stuck don't hesitate to open a Help Thread. #### Deploying a template Railway's template marketplace offers over 650+ unique templates that have been created both by the community and Railway! Deploying a template is not too dissimilar to deploying a GitHub repo - - Open up the dashboard β†’ Click **New Project**. - Choose **Deploy a template**. screenshot of new project menu with deploy a template option selected - Search for your desired template. _Hint: If your desired template isn't found feel free to reach out to the community._ - Click on the template you want to deploy. screenshot of new project menu the umami template selected _Hint: Generally it's best to choose the template with a combined higher deployment and success count._ - Fill out any needed information that the template may require. In the case of the Umami template, you don't need to provide any extra information. screenshot of the deploy umami screen with no extra configurations needed - Click **Deploy**. Railway will now provision a new project with all services and configurations that were defined in the template. That's it, deploying a template is as easy as a few clicks! screenshot of the project canvas showing umami and postgres #### Closing Railway aims to be the simplest way to develop, deploy, and diagnose issues with your application. As your Project scales, Railway scales with you by supporting multiple Teams, vertical scaling, and horizontal scaling; leaving you to focus on what matters: your code. Happy Building! ##### What to explore next - **[Environments](/environments)** - Railway lets you create parallel, identical environments for PRs/testing. - **[Observability Dashboard](/observability)** - Railway's built-in observability dashboard offers a customizable view of metrics, logs, and usage in one place. - **[Project Members](/projects/project-members)** - Adding members to your projects is as easy as sending them an invite link. - **[Staged Changes](/deployments/staged-changes)** - When you make changes to your Railway project, such as adding or removing components and configurations, these updates will be gathered into a changeset for you to review and apply. ##### Join the community Chat with Railway members, ask questions, and get help on [Central Station](https://station.railway.com)! We'd love to have you! ### The basics Source: https://docs.railway.com/overview/the-basics.md Learn about the core concepts of Railway. This document outlines the core concepts of Railway, providing foundational knowledge of the basic building blocks you'll work with in the platform. #### In a nutshell - **[Dashboard](#dashboard--projects)** - Main entrypoint for all projects under your account. - **[Project](#project--project-canvas)** - A collection of services under the same network. - **[Project Settings](#project-settings)** - Contains all project-level settings. - **[Service](#services)** - A target for a deployment source (e.g. Web Application). - **[Service Variables](#service-variables)** - A collection of configurations and secrets. - **[Backups](#backups)** - A collection of backups for a service. - **[Service Metrics](#service-metrics)** - Rundown of metrics for a service. - **[Service Settings](#service-settings)** - Contains all service-level settings. - **[Deployment](#deployments)** - Built and deliverable unit of a service. - **[Volumes](#volumes)** - Persistent storage solution for services. - **[Volume Metrics](#volume-metrics)** - Rundown of metrics for volumes (e.g. disk usage over time). - **[Volume Settings](#volume-settings)** - Contains all volume-level settings. #### Dashboard / projects Your main entrypoint to Railway where all your [projects](/overview/the-basics#project--project-canvas) are shown in the order they were last opened. Projects contain your [services](/overview/the-basics#services) and [environments](/environments). Screenshot of the Railway dashboard #### Project / project canvas A project represents a capsule for composing infrastructure in Railway. You can think of a project as an application stack, a service group, or even a collection of service groups. Services within a project are automatically joined to a [private network](/networking/private-networking) scoped to that project. Screenshot of the project canvas ##### Project settings This page contains all the project level settings. Screenshot of the project settings page Some of the most commonly used project settings are - - [Transfer Project](/projects/workspaces#transferring-projects) - Transfer your project between workspaces. - [Environments](/environments) - Manage various settings regarding environments. - [Members](/projects/project-members) - Add or remove members to collaborate on your project. - Danger - Remove individual [services](/overview/the-basics#services) or delete the entire project. #### Services A Railway service is a deployment target for your deployment source. Deployment sources can be [code repositories](https://docs.github.com/en/repositories/creating-and-managing-repositories/about-repositories) or [Docker Images](https://docs.docker.com/guides/docker-concepts/the-basics/what-is-an-image/). Once you create a service and choose a source, Railway will analyze the source, build a Docker image (if the source is a code repository), and deploy it to the service. Screenshot of the project canvas with services highlighted Out of the box, your service is deployed with a set of default configurations which can be overridden as needed. ##### Service variables Service [Variables](/variables) provide a powerful way to manage configuration and secrets across services in Railway. You can configure variables scoped to services. These variables are specific to each service and are not shared across the project by default. If you want to access variables from this service in another service within the same project, you need to utilize a [Reference Variable](/variables/reference#reference-variables). Screenshot of the service variables tab ##### Backups If your service has a [volume](/overview/the-basics#volumes) attached, this is where you can manage backups. Backups are incremental and Copy-on-Write, we only charge for the data exclusive to them, that aren't from other snapshots or the volume itself. Screenshot of the service backups tab From here you can perform the following actions - - Create a backup - Manually create a backup of the volume with a press of a button. - Delete a backup - Remove a backup from the list via the backup's 3-dot menu. - Lock a backup - Prevent a backup from being deleted via the backup's 3-dot menu. - [Restore a backup](/volumes/backups#how-to-restore-a-backup) - Click the `Restore` button on the backup. - Modify the backup schedule - Click the `Edit schedule` button on the header to make changes to the schedule. ##### Service metrics Service [Metrics](/observability/metrics) provide an essential overview of CPU, memory, and network usage for a given service. Screenshot of the service metrics tab ##### Service settings This tab contains all the service level settings. Screenshot of the service settings tab Some of the most commonly used service settings are - - [Source](/services#service-source) - Here you can configure the deployment source, which can be either a GitHub repository with a specific branch or an image with optional credentials. - [Networking](/networking/public-networking#railway-provided-domain) - Generate a Railway-provided domain or add your own custom one. - Custom Build Command - Here you can configure a custom build command if you need to overwrite the default. - Custom Start Command - Here, you can configure a custom start command if you need to overwrite the default. #### Deployments [Deployments](/deployments) involve building and delivering your [Service](/overview/the-basics#services). Screenshot of a service open with a deployment highlighted #### Volumes [Volumes](/volumes) are a feature that allows services on Railway to [maintain persistent data](/volumes). Screenshot of the project canvas with a volume highlighted ##### Volume metrics Volume Metrics show the amount of data stored in the volume and its maximum capacity. Screenshot of the volume metrics tab ##### Volume settings This tab contains all the volume centric settings. Screenshot of the volume settings tab Some of the most commonly used volume settings are - - Mount path - The absolute path where the volume will be mounted within the deployed service. - Volume Size - Displays the current volume capacity and offers the option to expand it if your plan permits. - Wipe Volume - This action wipes all data in the volume and then redeploys the connected service. #### What next? If you've read enough for now and are ready to get started, check out either of these two resources next - - [Quick Start guide](/quick-start) to deploy a To Do app from a [template](/templates). - [Guides section](/overview/the-basics) to dive into how things work. If you want to go deeper, click the Next button below to head to the next section - [Advanced Concepts](/overview/advanced-concepts). ### Railway for Agents Source: https://docs.railway.com/agents.md Set up Railway for AI coding agents β€” install the CLI, configure MCP, and add agent skills in one step. Railway exposes a CLI, a local MCP server, a hosted remote MCP server, and an open agent skills format. AI coding agents can use any of them to deploy services, manage environments, and operate Railway on behalf of a user. #### Get set up Install the Railway CLI and configure agent support β€” skills, MCP, and authentication β€” in one command. Toggle the options to tailor the command to what you want set up: If you already have the Railway CLI installed: ```bash railway setup agent ``` #### Choose your integration #### When to use each - **Railway MCP (Local)** β€” preferred for agent-native operations on a logged-in machine: project and service discovery, deployment status, bounded logs, variables, domains, templates, metrics, and scoped mutations. - **Railway MCP (Remote)** β€” preferred when the user wants hosted OAuth MCP, or when local CLI configuration is unavailable. Also exposes the powerful `railway-agent` tool for multi-step operations. - **Railway CLI** β€” preferred when the task depends on local machine state: current-directory deploys, `railway up`, `railway run`, SSH, and local linking. - **Agent Skills** β€” install alongside any of the above so agents arrive with Railway-specific procedural knowledge instead of guessing. ### Mobile app Source: https://docs.railway.com/mobile-app.md Install the Railway mobile app on iOS and sign in to check on your projects from your phone. The Railway mobile app lets you monitor your projects, deployments, and logs from your phone. This guide covers the two things you need to get going: installing the app and signing in.
The Railway mobile app home screen showing a workspace dashboard with project cards
#### Install The app is available for iPhone on the App Store and requires iOS 16.4 or later. Download Railway from the App Store β†’ Android isn't available yet. [Join the waitlist on Railway Station](https://station.railway.com/feedback/railway-mobile-app-for-androi-aca54c32) to be notified when it ships. #### Sign in You'll need a Railway account to sign in. If you don't have one, sign up at railway.com first. When you open the app for the first time, you'll land on the sign-in screen with three ways to get in: - **Sign in with Apple** is the fastest option on iPhone. Authenticate with Face ID or Touch ID. You can link an existing Railway account or create a new one from your Apple ID. - **Scan QR Code** signs you in using a Railway session you already have open in a browser. See the steps below. - **Login with Browser** signs you in through an in-app browser window, the same way you sign in on the web.
The Railway mobile app sign-in screen with Sign in with Apple, Scan QR Code, and Login with Browser buttons
##### Sign in by scanning a QR code On a computer where you're already signed in to Railway, go to railway.com/mobile/login. A QR code will appear. On the sign-in screen, tap **Scan QR Code** and allow camera access when prompted. Point your phone at the QR code on screen. You'll be signed in automatically and dropped into your dashboard. If the code stops working, refresh the page on your computer to reveal a new one, then scan again. That's it. You're signed in. πŸš‚ ### Best practices Source: https://docs.railway.com/overview/best-practices.md Learn the best practices to maximize performance, efficiency, and scalability of your apps on Railway. {/* To keep consistency we want each topic to follow the same convention - - What? - When? - Do X. - Why? - Image. */} Railway is a highly versatile platform, offering various ways to use it, though some may be less optimal than others for most use cases. These topics aim to help you maximize both your potential and the platform's capabilities. #### Use private networking when possible [Private networking](/networking/private-networking) allows services within a [project](/overview/the-basics#project--project-canvas) to communicate internally without the need to expose them [publicly](/networking/public-networking), while also providing faster communication and increased throughput. When configuring environment variables in your service to reference domains or URLs of other services, ensure you use the private versions of these variables, such as `RAILWAY_PRIVATE_DOMAIN` or `DATABASE_URL`. Using the private network enables communication between services within the same project without incurring service-to-service egress costs, which is particularly beneficial when interacting with databases or other internal services. screenshot of a service showing the use of private networking via reference variables Screenshot showing the use of the `RAILWAY_PRIVATE_DOMAIN` [variable](/variables/reference#railway-provided-variables) being used via [referencing](/variables#reference-variables). #### Deploying related services into the same project In Railway, a [project](/overview/the-basics#project--project-canvas) serves as a container for organizing infrastructure. It can encompass an application stack, a group of [services](/overview/the-basics#services), or even multiple service groups. If you're about to head back to the [dashboard](/overview/the-basics#dashboard--projects) to deploy another service like a database, there's a quicker way - look for the `Create` button at the top right of the Project canvas. This shortcut allows you to add new services directly to your current project. There are a few key advantages of keeping related services within the same project - - **Private networking** - The private network is scoped to a single environment within a project, having all related services within a single project will allow you to use private networking for faster networking along with no egress fees for service-to-service communication. - **Project clutter** - Deploying a new service or database as an entire project will quickly become overwhelming and clutter your dashboard. - **Variable management** - Variables can be referenced between services within a project, reducing redundancy and making it easier to manage instead of having to manually copy variables between services. screenshot of the project canvas showing multiple linked services Screenshot showing related services within a project and their connection links. #### Use reference variables where applicable [Reference variables](/variables#reference-variables) allow you to dynamically reference another variable, either from a variable set on the current [service](/overview/the-basics#services) or from another service in the same [project](/overview/the-basics#project--project-canvas). Rather than manually copying, pasting, and hard-coding variables like a public domain or those from another service, you can use reference variables to build them dynamically. Example `VITE_BACKEND_HOST=${{Backend.RAILWAY_PUBLIC_DOMAIN}}` This approach is better than hard-coding variables, as it keeps your variable values in sync. Change your [public domain](/networking/domains)? The variable updates. Change your [TCP proxy](/networking/tcp-proxy)? The variable updates. screenshot of a service showing the use of reference variables Screenshot showing a reference variable used to reference the Backend's domain. ### Advanced concepts Source: https://docs.railway.com/overview/advanced-concepts.md A guide that outlines the advanced concepts of Railway. There are a lot of advanced concepts of Railway that can help you build your applications better. This document will cover some of these concepts like build and deploy options, networking, observability, and other integrations. #### Build and deploy options Railway applies many defaults to your build and deploy configurations that work fine for most scenarios. Changing these defaults could help tune Railway better to your use-case and make it easier on your team. ##### Build options Under the hood, Railway uses Railpack to package your code into a container image that we then deploy to Railway's infrastructure, with zero configuration for most workloads. For advanced projects, you might need to configure some of these defaults. You can do this by going to your Service > Settings > Build, and underneath that, Deploy. Here are three things you might want to configure: - **Custom Build Command**: This is the command that will be ran to build your final application. Railpack will find the best command for this, usually `npm run build` for JS-based projects, `cargo build --release` for Rust projects, and more. If your application needs to trigger something else to build your project, customize that command here. - [**Pre-Deploy Command**](/deployments/pre-deploy-command): These are one or more commands that will be ran before running the main start command. A common use for this is database migrations. If your application needs to run a command before starting your main application, put that in a Pre-Deploy Command. - **Custom Start Command**: This is the command that will actually run your application. Defaulted as `npm run start` for JS-based applications. If you need to start your application in a way that's different than expected, change that here. ##### Deploy options Some default options are applied when your application is deployed on Railway. They can change where your deployments are ran, how they are ran, and what happens to them while they're running. Here are some things you can change: - [**Replicas**](/deployments/scaling#horizontal-scaling-with-replicas): By default, your deployment will go out with a single instance in your [preferred region](/deployments/optimize-performance#set-a-preferred-region). With replicas, you can deploy multiple instances of your application in one or more regions. The Railway network will load balance incoming requests between the available replicas and serve the ones closest to your users. - **Deployment Region**: If you haven't configured any Replicas, your services will be deployed to the [preferred region](/deployments/optimize-performance#set-a-preferred-region) configured in your workspace. To change an individual service's region, go to Settings > Scale > Regions. - **Scheduled Executions**: If your deployment isn't a long-running service, like most web or backend services are, your deployment will be run once then exit. If the service is intended to be a repeated task, you can create a cron schedule under Settings > Deploy that will re-run your deployment according to the schedule. Each time it runs and exits successfully, it'll be marked as Completed. - [**Serverless Deployments**](/deployments/serverless): By default, services are long-running and will continue to run unless they error. You can configure your services to pause if no traffic is going to them, and start it back up once a request comes in. Sleeping services don't incur resource usage. While your service is starting back up, the requests will be queued and delivered to the service once its fully up and running. - [**Healthchecks**](/deployments/healthchecks): By default, as soon as your deployment is launched, it's considered "healthy". You can configure an endpoint path under Deploy > Healthcheck Path that Railway will fetch once it deploys your service to ensure that your service actually started up before it removes the previous deployment. This lets Railway know when your services are fully healthy and ready to receive traffic, so it doesn't start serving requests to a service that hasn't fully started yet. #### Networking Constructing efficient networking setups yourself can be tricky and time-consuming to get right. Included in the Railway experience is fast networking that just works and can help you build more modular services. ##### Private networking [Private Networking](/networking/private-networking) is a feature that lets your services communicate to other running services within your project simply by its service name. Under Settings > Networking, you can configure the specific domain that is given to your service. You can provide this private networking domain name to your services with [Reference Variables](/variables#reference-variables). Private Networking domains are available with [Railway-provided Variables](/variables#railway-provided-variables) that you can [provide to your other services](/variables#referencing-a-shared-variable), elimiating the need to hard-code their values. Under the hood, Railway connects your services together with a WireGuard mesh and a DNS resolver that is scoped to your project and environment. Services running inside of one project or environment aren't able to reach the services running in a different project. This also applies to environments within a project being unable to reach other environments. ##### Railway-provided domains Railway provides a [customizable, Railway-branded domain](/networking/public-networking#railway-provided-domain) for your service that you can connect to a port running on your service and instantly make it available to the public internet. These domains require no DNS configuration on your end, and are perfect if you don't have a custom domain of your own just yet but still want to access your application. ##### Custom domains If you have a [custom domain](/networking/public-networking#custom-domains) that you've bought from a domain registrar, you can connect this to your Railway service to serve your application under. Railway will walk you through the configuration of the required DNS records, alert you if the configuration is wrong, and automatically provision SSL certificates for you so you can serve your application with `https://`. #### Integrations Integrations let you interact with your Railway workspace outside of the Railway dashboard. ##### CLI The Railway CLI lets you interact with your Railway project from your local machine on the command line, allowing you to do things like: - Triggering deployments programmatically - Run your services locally using configured environment variables from your Railway project - Launch new Railway projects from the terminal - Deploy templates ##### Public API The Railway public API is built with GraphQL and is the same API that powers the Railway dashboard. Similar to the CLI, you can interact with your Railway project programmatically by communicating with the API. ##### Webhooks Projects can also configure [Webhook URLs](/observability/webhooks) that can receive a number of events that are triggered by your services and other things inside your project. Using these in tandem with the Railway API can make some powerful workflows that respond to the rest of your project. They can also be used to deliver critical alerts to your team's Slack workspaces. #### Environments Railway environments are isolated instances of the services running in your production environment that let you iterate on your workspace without affecting your production workloads. You can: - Have development environments for each team member that mirror your production environment - Have separate staging and production environments Within a service and environment, you can specify which branch of your GitHub repository to deploy to that environment when a commit is pushed. #### Observability Railway services and deployments will likely output logs to describe how they are being built, what they are doing while running, or errors during either of these. These logs, when sent to the standard output or standard error (like when using `console.log()`, `print()`, and `console.error()`) will be shown in the [Build and Deploy tabs](/observability/logs#build--deploy-panel) (depending on where they originated) of each service and can be viewed in the [Observability](/observability/logs#log-explorer) page of your project, from which you can view logs from all your services. ### Production readiness checklist Source: https://docs.railway.com/overview/production-readiness-checklist.md Ensure your app is production-ready with this comprehensive Railway checklist. _Is your application ready for production?_ In this page, this section explores key areas for production readiness, suggesting actions to take to address each one: - [Performance and Reliability](#performance-and-reliability) - [Observability and Monitoring](#observability-and-monitoring) - [Quality Assurance](#quality-assurance) - [Security](#security) - [Disaster Recovery](#disaster-recovery) --- #### Performance and reliability Ensuring your application is performant and reliable under changing conditions like load and external latency is critical for production-readiness. Consider taking the following actions to ensure your application is performant and reliable - **✓ Serve your application from the right region** - Deploying your application as close to your users as possible minimizes the number of network hops, reducing latency and improving performance. Railway offers multiple [deployment regions](/deployments/regions) around the globe. You may also enable Railway's [built-in CDN](/networking/cdn) to cache responses on its edge network. **✓ Use private networking between services** - When communicating between services over the public network, latency is introduced by the network hops that requests must make to reach their destination. To reduce latency, ensure communication between services in the same project and environment happens over the [private network](/networking/private-networking). **✓ Configure a restart policy** - Services can crash for different reasons, frequently due to unhandled exceptions in code, and it is important to implement a strategy to mitigate performance degradation and user impact. Ensure that you have properly configured your services [restart policy](/deployments/restart-policy). **✓ Configure at least 2 replicas** - If a service crashes or becomes unavailable due to a long-running request, your application could experience downtime or degraded performance. Increase the [number of replicas](/deployments/optimize-performance#configure-horizontal-scaling) to at least 2, so if one instance of your service crashes or becomes unavailable, there is another to continue handling requests. **✓ Confirm your compute capacity** - The vCPU and memory capacity of your services greatly impacts their ability to perform efficiently. The compute allocation for your services is handled automatically by Railway, and the limits are determined by your chosen subscription [plan](/pricing/plans#plans). You should review your plan limits and consider if upgrading is necessary to achieve the desired compute. **✓ Consider deploying a database cluster or replica set** - Data is critical to most applications, and you should ensure that the data layer in your stack is highly available and fault tolerant. Consider implementing a cluster or replica set, similar to the Redis HA with Sentinel template, to ensure that your data remains available even if one node becomes unstable. --- #### Observability and monitoring Observability and monitoring refers to tracking the health and performance of your application. Consider taking the following actions to ensure you are able to track your application health - **✓ Get familiar with the log explorer** - When researching an application issue across multiple services, it can be disruptive and time-consuming to move between log views for each service individually. Familiarize yourself with the [Log Explorer](/observability/logs#log-explorer) so you can query logs across all of your services in one place. **✓ Setup webhooks, email, and in-app notifications** - Ensure you are alerted if the [deployment status](/deployments/reference#deployment-states) of your services change. Enable email and in-app notifications in you Account Settings to receive these alerts via email. Setup [webhooks](/deployments/reference#deployment-states) to have the alerts sent to another system, like Slack or Discord. --- #### Quality assurance Quality assurance involves following practices to ensure changes to your application code meet quality standards before they are deployed to production. Consider the following actions to ensure you're set up for success - **✓ Implement check suites** - Common practice is to run a suite of tests, scans, or other automated jobs against your code before it is merged into production. You may want to configure your deployments to wait until those jobs have completed successfully before triggering a build. Enable [check suites](/deployments/github-autodeploys#check-suites) to have Railway wait for your GitHub workflows to complete successfully before triggering a deployment. **✓ Use environments** - Maintaining separate environments for production and development is good practice for controlling changes in a production environment. Consider setting up [environments](/environments) to properly test changes before merging to production. Additionally, [PR environments](/environments#enable-pr-environments) can be enabled to create environments when PRs are opened on your production branch. **✓ Use config as code** - Along with your source code, you can maintain your Railway configuration in a `json` or `toml` file, enabling you to keep track of changes, just as you do with your source code. Take advantage of [config as code](/config-as-code) to control and track changes to your Railway configuration. **✓ Understand the deployment rollback feature** - Introducing breaking changes to your application code is sometimes unavoidable, and it can be a headache reverting to previous commits. Be sure to check out the [deployment rollback feature](/deployments/deployment-actions#rollback), in case you need to rollback to a previous deployment. --- #### Security Protecting your application and user data from malicious threats and vulnerabilities is mission-critical in production applications. Consider the following for peace of mind - **✓ Use private networking** - The easiest way to protect your services from malicious threats, is to keep them unexposed to the public network. Secure communication between services in the same project and environment by using the [private network](/networking/private-networking). **✓ Implement a security layer** - While Railway does have protections in place at the platform level, we do not currently offer a configurable service for users' applications. Consider using a service like Cloudflare that offers both WAF and DDoS mitigation, to protect your services against web threats and ensure availability and performance. --- #### Disaster recovery Being prepared for major and unexpected issues helps minimize downtime and data loss. Consider taking the following actions to ensure you are prepared - **✓ Set up an instance of your application in two regions** - In the event of a major disaster, an entire region may become unavailable. Using [deployment regions](/deployments/regions), you can deploy an entire instance of your application in another region. To save on cost of running a separate instance of your application, use [App Sleep](/deployments/serverless) to turn down resource usage on the inactive services. **✓ Regularly back up your data** - Data is critical to preserve in many applications. You should ensure you have a backup strategy in place for your data. Enable and configure [backups](/volumes/backups) for your services with volumes to ensure you can restore your data in case of any data loss. --- #### Conclusion Using a mix of native features and external tools, we hope you can feel confident that your applications on Railway meet the highest standards of performance, reliability, and security. Remember, the Railway team is always here to assist you with solutions. Reach out on [Central Station](https://station.railway.com) or over email at [team@railway.com](mailto:team@railway.com) for assistance. ### Guides Source: https://docs.railway.com/guides.md ### Keyboard shortcuts Source: https://docs.railway.com/overview/keyboard-shortcuts.md A reference of keyboard shortcuts available in the Railway dashboard, canvas, and data views. The Railway dashboard supports keyboard shortcuts for common actions. This page lists the shortcuts you can use, grouped by context. Shortcuts that include `Cmd` work with `Ctrl` on Windows and Linux. For example, `Cmd+K` is `Ctrl+K` on Windows. #### Global These shortcuts work anywhere in the dashboard. | Shortcut | Action | |----------|--------| | `Cmd+K` | Open the command palette | | `Escape` | Go back, close a modal, or deselect | #### Command palette Once the command palette is open, you can navigate it without leaving the keyboard. | Shortcut | Action | |----------|--------| | `Arrow Up` / `Arrow Down` | Move through results | | `Enter` | Run the highlighted command | | `Arrow Right` | Open a subcommand | | `Backspace` | Go back to the previous menu | | `Shift+Enter` | Report a missing command | | `Escape` | Close the palette | #### Dashboard | Shortcut | Action | |----------|--------| | `Cmd+/` | Create a new project | #### Project canvas These shortcuts work while you have a project canvas open. | Shortcut | Action | |----------|--------| | `.` | Create a new function on the canvas | | `Cmd+Z` | Undo the last canvas change | | `Cmd+Shift+Z` | Redo | #### Service view Press these from anywhere inside a service to jump to one of its tabs. | Shortcut | Action | |----------|--------| | `G` then `D` | Go to Deployments | | `G` then `V` | Go to Variables | | `G` then `M` | Go to Metrics | | `G` then `S` | Go to service Settings | | `Escape` | Close the service view and return to the project canvas | #### Staged changes Staged changes group infrastructure edits into a single commit before they apply to your environment. | Shortcut | Action | |----------|--------| | `Shift+Enter` | Commit staged changes | | `Alt+Shift+Enter` | Commit staged changes without triggering deploys | | `Cmd+Enter` | Commit the current patch (inside the patch modal) | #### Logs | Shortcut | Action | |----------|--------| | `/` | Focus the filter input | | `Enter` | Apply the filter | | `Escape` | Close the date or filter popover | #### Service settings | Shortcut | Action | |----------|--------| | `/` | Focus the settings filter | ## Platform ### Philosophy Source: https://docs.railway.com/platform/philosophy.md Explore Railway’s core philosophy and the principles that drive the Railway platform. Railway is a deployment platform that helps developers deliver their software through the entire application life-cycle through git native tooling, composable infrastructure, and built-in instrumentation. We design and develop Railway's product features to serve what we consider to be the three primary stages of software development: - Development - Deployment - Diagnosis Most developer-oriented products attempt to target one or more stages within the software development cycle. Railway provides solutions for developers for all of these stages, whereas some vendors focus on specific stages. Railway is a company staffed with people who know developers would prefer to use tools they are familiar with. We believe software should be "take what you need, and leave what you don't." As a result, we are comfortable recommending additional vendors if they might acutely meet their needs. Railway's goal is for your unique need to be served so you can focus on delivering for your customers. Companies should be as upfront as possible about their product and offerings to help you decide what is best for your team and users. Let's talk about the number one use case: delivering apps to users in a Production environment. Railway, the company, is sustainable, building Railway's product, team, and company to last as long as your projects. #### Objective The goal of this section is to describe the processes, internal and external that companies have requested in Railway's years of operation to help them build confidence to determine if Railway is a good fit for their company. Railway maintains a policy to be forthcoming and frank at all times. We would rather have a developer make the correct choice for their company than to adopt Railway and then come to regret that decision. If you have any additional questions or if you require any additional disclosure you can contact us to set up a call at [team@railway.com](mailto:team@railway.com). #### Product philosophy Railway is focused on building an amazing developer experience. Railway's goal is to enable developers to deploy their code and see their work in action, without thinking about CI/CD, deployments, networking, and so forth, until they need to. ##### Take what you need To achieve this goal, we've designed Railway to "just work", with all the necessary magic built in to achieve that. Railway at a high level reads your code repo, makes a best guess effort to build it into an [OCI compliant image](https://opencontainers.org/), and runs the image with a start command. - Have a code repository but have yet to think about deployment? We got you. Connect your code repository and let Railway take care of the rest. - Already built the perfect Dockerfile? Bring it. If you have a Dockerfile in your repo, we'll find it and use that to build your image. If you've outgrown the "magic" built into deployment platforms, or are suspicious of things that are just too magical, we are happy to provide a high level overview of Railway's architecture. ##### Leave what you don't Streamlined deployment workflows and sane defaults are inherited by every project in Railway out of the box; but as a team of engineers, we at Railway are very aware that what works for one project does not always work for another. Or sometimes, you just need to be in control - maybe you already have a workflow you like, or maybe you need to layer Railway into existing infrastructure, and abstractions only get in your way. That's why we've designed the platform for flexibility, wherever you need it. On Railway, you can use the default pattern for deployment or opt to use vendor. In fact, we will even support you in your effort to integrate Railway in a unique way. Here are a couple of use cases we've helped customers take advantage of - - Deploying to Railway from GitLab CI/CD - Supporting the development of a Terraform provider - Region based routing to workloads via Cloudflare We love working with Railway's customers to solve interesting use cases. If you're not seeing a track for you, get in touch at [team@railway.com](mailto:team@railway.com) and we'll find it! #### High-level architecture As mentioned before, Railway at a high level takes your code, builds it, and throws it on running infrastructure on GCP. At a granular level Railway relies on a few systems to maintain workloads. - Build Layer - Where archived folders of code or a Dockerfile (via GitHub or `railway up`) is sent to be built into an image - [Railpack](https://railpack.com): Railway's build system that analyzes your code and generates optimized container images - Image Registry: either via Dockerhub/GitHub packages, or a previously built image from Railway's Build servers - Deployment Layer - Where images are ran in containers, images are pulled from the Build Layer - Databases on Railway are images + volumes mounted on a machine - Cron services are containers ran on a defined schedule - Routing Layer - This is the system that Railway maintains that routes requests into your running containers and provides private networks to suites of containers. - Logging Layer - A suite of machines networked running Clickhouse that store container logs. This is accessed when you open the service logs pane. - Dashboard Layer - Infrastructure and code that is used to manage the above layers. - This also includes any monitors that Railway uses to maintain the state of the Deployment Layer to maintain application state. (ex. Removing a deployment.) Your code will either be in some, or all steps depending on the amount of Railway that you choose to adopt. ##### Operational procedures Railway uses a suite of alerting vendors, additional internal tools, and PagerDuty to ensure uptime of Railway's services described above. You can see Railway's uptime on our in-house [status page](https://status.railway.com/). Operational incident management reports and RCAs are available by request for those on an Enterprise plan. ##### Do I have to change how I write Code? No, Railway is a deployment platform that works with your existing code. We don't require you to change how you write code or use any specific frameworks. We support all languages and frameworks that can be run in a Docker container or via Railpack. ##### Is Railway serverless? No, services on Railway are deployed in stateful Docker containers. The old deployments are removed on every new deploy. We do have a feature, [App Sleeping](/deployments/serverless), that allows you to configure your service to "sleep" when it is inactive, and therefore will stop it from incurring usage cost while not in use. #### Book a demo If you're looking to adopt Railway for your business, we'd love to chat and ensure your questions are answered. [Click here to book some time with us](https://cal.com/team/railway/work-with-railway?duration=30). ### Use cases Source: https://docs.railway.com/platform/use-cases.md Explore real-world use cases for deploying and managing applications on Railway. Railway is suited for a variety of use-cases. This page will walk-through what the platform is perfect for today and Railway's recommendations for apps of all sizes. As mentioned in the philosophy document. Railway will make a best effort to provide all the information a developer needs to make the best choice for their workload. #### Is Railway production ready? Many of Railway's customers use Railway to reliably deploy their applications to customers at scale. With that said, Production standards are going to be different depending on what your users expect. We have companies that use Railway in a variety of different verticals such as: - Enterprise SaaS - Consumer Social - Education - E-Commerce - Crypto - ML/AI - Agencies Companies on Railway range from hobby projects, to extremely fast growing startups, to publicly traded companies. Railway has been incrementally adopted from using the platform as a developer's scratchpad before writing Terraform to hand off to an Ops. team or being implemented end to end. Railway's been in operation for now for more than three years and we have served billions of requests, with 100s of millions of deploys serving millions of end-users simultaneously. #### Railway scale All of these verticals deploy workloads that may require high bandwidth operations or intensive compute. However, service scale on the platform is not unbounded. As a foundational infrastructure company, we understand that customers may outpace Railway's pace of improvement for the platform. Even though 24 vCPU and 24 GB of memory sounds like a lot (with up to 42 replicas) on the Pro plan, when faced with hyper-growth: throwing more resources at the issue might be your best bet until long term optimizations can be made by your team. Railway will gladly bump up your service limits within your tier of service to meet your needs. Even so, we will be frank and honest if you may need to seek elsewhere to augment your workloads with extra compute. If your compute needs outpace the Pro offering, consider the Enterprise plans where we offer even greater limits and capacity planning, [email us to learn more](mailto:team@railway.com), or [click here](https://cal.com/team/railway/work-with-railway?duration=30) to schedule some time to chat. ##### Databases We have customers using Railway's databases for their production environment with no issue. Railway's databases are optimized for a batteries included development experience. They are good for applications that are prioritizing velocity and iteration speed over scale. Railway's databases are provided with no SLAs, are not highly available, and scale only to the limits of your plan. We don't think they are suitable for anything mission-critical, like if you wanted to start a bank. We advise developers to: - [Configure backups](/volumes/backups) - Run-book and restore their backups - Configure secondaries to connect to in-case of a disaster situation As mentioned before: we don't believe in vendor lock-in here at Railway, if your needs outpace us, consider other vendors like PlanetScale (for MySQL) or Cockroach (for Postgres). ##### Metrics Railway provides up to 7 days worth of data on service information such as: - CPU - Memory - Disk Usage - Network We also overlay commit and deployment behavior to correlate issues with application health to deployments. This is on top of the service logs that are continually delivered to users viewing a particular deployment of a service. For service logs, we store logs for up to 90 days for Pro plan workspaces. It is common for teams who wish to have additional observability to use an additional monitoring tool that maintains a longer time horizon of data such as New Relic, Sentry, or Datadog. Within projects, deploying a Datadog Agent is as easy as deploying the template and providing your Datadog API Keys. ##### Networking Railway doesn't have a hard bandwidth limit to the broader internet. We may throttle your outbound bandwidth and reach out to you when it exceeds 100GB/month to ensure the legitimacy of your workloads. If you need to control where your traffic is allowed to come from such as setting up firewall rules, we recommend setting up Cloudflare or an external load balancer/L7 application firewall to handle it. Private networking bandwidth is un-metered. ##### Service level objectives Railway does meet SLOs for companies who have greater need for incident, support, and business planning responsiveness. We provide this via Business Class, offered as an add-on to Pro plans and included in all Enterprise plans. [More info.](/platform/support#business-class) ##### Will Railway exist in 10 years? A common question we get in conversations with (rightly) skeptical developers is the above question. Most documentation pages don't address the meta question of a company's existence but how we run _our_ business affects yours. The short and simple answer is: **Yes**. Railway aims to exist for a very long time. Railway has presence on existing public clouds, while also building out presence on co-location providers. As a company, we have been structured sustainably with a first principles approach to every expense while growing sustainably. ##### Unsupported use-cases Unfortunately, the Railway platform isn't yet well-equipped to handle the following verticals that require extensive Gov't certification or GPU compute: - Government - Traditional Banking - Machine Learning Compute #### General recommendations A document like this can only go so far. We have a standing invitation for any team who needs an extended scale use-case to reach out to us directly by e-mailing [team@railway.com](mailto:team@railway.com), or on [Central Station](https://station.railway.com). You can also schedule some time with us directly by clicking [here](https://cal.com/team/railway/work-with-railway?duration=30). We would be happy to answer any additional questions you may have. ### Support Source: https://docs.railway.com/platform/support.md Learn about Railway's support channels. Railway provides support tailored to customer needs across different subscription tiers. Support tier and prioritization is determined by your plan level. #### Support tiers ##### Trial, free, hobby Users on Trial, Free, and Hobby plans receive community support through [Central Station](#central-station). While Railway employees may participate in community discussions, responses are not guaranteed for these tiers. ##### Pro Pro plan users get direct help from Railway via [Central Station](#central-station), usually within 72 hours. This excludes SLOs and [application-level support](#application-level-support). ##### Enterprise & business class For organizations requiring SLOs and enhanced support, please refer to [Business Class](#business-class) support. #### How to ask for help When you reach out for help, it's important that you help us help you. Please include as much information as you can, including but not limited to: - Description of the issue you're facing - IDs (Project ID, Service Name/ID, Deployment ID, etc.) - Railway environment of your service/deployment - Error messages and descriptions - Logs (build and/or deploy) - Link to GitHub repo/code or template you're using, if applicable #### Application-level support Railway does not provide application-level support. We are unable to debug your code or fix bugs in your application. We may provide these services on a case-by-case basis for [Business Class](#business-class) or Enterprise customers. For application-level support, connect with the Railway community on [Central Station](https://station.railway.com). #### Email support Railway does not provide support via email. All support requests should be directed to [Central Station](#central-station). Email communication is reserved for the following specific purposes: - Sales inquiries: [team@railway.com](mailto:team@railway.com) - Security reports: [bugbounty@railway.com](mailto:bugbounty@railway.com) - Abuse reports: [abuse@railway.com](mailto:abuse@railway.com) - Privacy inquiries: [privacy@railway.com](mailto:privacy@railway.com) Emails outside these categories may not receive a response. #### Central station Railway conducts its support over the [Central Station](https://station.railway.com) platform. It hosts the Railway community of 1,800,000+ users and developers. It is where you can find answers to common questions, ask questions, and get in touch with the Railway team. Screenshot of Railway Central Station Please ensure that you've searched for your issue before creating a new thread, follow the guidelines in [How To Ask For Help](#how-to-ask-for-help), and abide by the [Code of Conduct](https://station.railway.com/community-code-of-conduct). ##### Private threads Pro users may create a **Private Thread** on [Central Station](https://station.railway.com/support). Private Threads are only visible to the creator and Railway employees. Screenshot of Railway Central Station - Private Threads Private Threads have a slower response time because only Railway employees can see them. Railway may make the thread public for community involvement if we determine that there is no sensitive information in your thread, or if you are asking for [application-level support](#application-level-support). #### Slack Railway offers Slack Connect channels to Enterprise plan customers with a minimum committed spend of $2,000/month. Customers can raise issues, coordinate their migration over to Railway, and provide feedback within a Slack Connect channel. Additionally, the solutions team at Railway may provide a shared Slack Connect channel to facilitate better communication and support. Screenshot of Slack Enterprise teams with $2,000/month committed spend can create a Slack Connect channel within the Workspace settings page: Screenshot of Slack Account Linking Users in a Slack Connect channel can invite their team members using the Slack interface or by pressing the `Join Slack` button again to initiate new invites. #### Business class For companies who need dedicated support, we offer Business Class. Business Class is support and success designed for those who need the full attention of Railway. Business Class support is a dedicated support channel with SLOs for your company. Workspaces become eligible for Business Class support after $5,000/mo in spend. Reach out to us at [team@railway.com](mailto:team@railway.com) to enable your SLO. ##### Business class SLOs We prioritize Business Class customers over all other support requests. | Severity | Acknowledgement Time | | ------------------------------------ | -------------------- | | P1 (Outages, Escalations) | One hour - 24/7 | | P2 (Bugs) | Same Business Day | | P3 (Integrations, General Questions) | Two Business Days | For Enterprise customers with $5,000/month committed spend who have a shared Slack Connect channel with us, you have access to "Critical" urgency level support requests: Screenshot of Critical urgency level in Slack This feature is also available on [Central Station](#central-station) for Business Class customers: Screenshot of Emergency Help option in Central Station Opening a Critical ticket allows you to page Railway's support on-call directly for an immediate response. Please only use this for production outages or critical platform issues preventing your team from using Railway. ##### Definition of priorities | Priority | Surface Areas | | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | **Outages that impact production**. This covers the following components: incidents declared on status.railway.com including and especially incidents with end-customer impact (e.g. inability to login to the Dashboard), customer workload-impacting issues due to high load requiring intervention from Railway (e.g. requiring additional resources beyond your current limits). | | 2 | **Issues related to Railway features**. This covers features offered by Railway, including but not limited to the Dashboard, CLI, and platform-level features such as Deployments, Environments, Private Networking, Volumes. | | 3 | **Integration work and general questions related to Railway**. This covers customer-related requests involving integrating Railway with other services (e.g. fronting your Railway workload with a DDoS protection service), leveraging tools to use Railway the way you like (e.g. IaC provisioning/Terraform), or questions about Railway features or its platform. | ##### Business class response hours We offer support during business hours, and prioritize requests from Business Class customers: - Business hours are Monday through Friday, 9am to 9pm Pacific Time - Exceptions apply to Railway's business hours during P1 outages where the team will be on-call 24/7 - The team may reply outside of business hours, but we do not guarantee a response outside of business hours ##### Business class resource limits For Business Class customers, Railway increases resource limits beyond the standard limits on a need-based basis. Contact the team through your dedicated communication channel to increase limits. ##### Uptime calculation As part of this offering, we agree to provide a monthly summary on the uptime of the components of Railway. Customers are provided an RCA to any outages on the Routing Layer. ##### Compliance & audits Security audits can be provided by request. For most customers, we can provide Railway's security and compliance documentation can be accessed via Railway's Trust Center at [trust.railway.com](https://trust.railway.com). Please sign in with your Railway account's email address to access Trust Center. #### Enterprise For enterprises, we offer everything in [Business Class](#business-class) along with custom support tailored to your needs. Railway can enter into a contractual SLA under Railway's negotiated pricing offering. Reach out to us at [team@railway.com](mailto:team@railway.com) for more information. ### Incident management Source: https://docs.railway.com/platform/incident-management.md Learn how Railway handles incident management. #### Introduction Railway understands the importance of effective incident management procedures. We do what we can to minimize downtime, mitigate the impact of incidents, and ensure the smooth operation of Railway's systems. In the interest of transparency, we publish as much of Railway's procedure to keep Railway's customers in the know on how we handle and learn from incidents. #### Monitoring + reporting Railway has a robust monitoring system in place to proactively detect and address any potential incidents. We continuously monitor Railway's infrastructure, including servers, networks, and applications, to ensure their smooth operation. By monitoring key metrics and performance indicators, we can identify any anomalies or potential issues before they escalate into full-blown incidents. However, it's important to note that while we strive to stay ahead of incidents, there may be situations where unforeseen issues arise. In such cases, we rely on qualitative customer feedback to help us identify and address any issues promptly. We encourage Railway's customers to report any problems they encounter through the [Railway Help Station](https://station.railway.com) or [Slack](/platform/support#slack). #### Status page + uptime Railway's uptime and incident retrospective can be accessed on the Railway status page at https://status.railway.com/. On this page, you can view the historical uptime of Railway's systems and services. Additionally, you can find detailed information about past incidents, including retrospectives that provide insights into how incidents were handled and what measures were taken to prevent similar issues in the future. The status page is built and hosted in-house. If you'd like to consume its data programmatically, it's backed by two simple JSON endpoints: - `https://api.railwaystatus.com/status` β€” current status of Railway's systems and services. Its response schema is published at `https://api.railwaystatus.com/status/schema.json`. - `https://railway.com/.railway/pops` β€” Railway's CDN points of presence (POPs) and their status. These are edge POPs, not [deployment regions](/deployments/regions). These endpoints are provided as-is, without any support, and their response format may change without notice. For Enterprise customers, we offer SLOs and guarantees of service that may not be represented on the uptime dashboard. #### Incident severity Railway catalogues incident's in the following buckets. - **High**: the incident is potentially catastrophic to Railway Corporation and/or disrupts Railway Corporation’s day-to-day operations; violation of contractual requirements is likely. Ex. Any business level impact to 25 percent of Railway's customers for one hour or more. All incidents within this severity get public communications. - **Medium**: the incident will cause harm to one or more business units within Railway Corporation and/or will cause delays to a customer business unit’s activities. - **Low**: the incident is a clear failure of a component, but will not substantively impact the business. Railway still performs retrospectives within this severity. ##### Responsible disclosure Enterprise customers get Root Cause Analysis, and we attempt to publish event retrospectives on [https://blog.railway.com/engineering](https://blog.railway.com/engineering) ### Railway Metal Source: https://docs.railway.com/platform/railway-metal.md Railway Metal is Railway’s own cloud infrastructure, built for high-performance, scalable, and cost-efficient app deployments. Learn how it works. Railway Metal is the next generation of Railway's underlying infrastructure. It is built on hardware that we own and operate in datacenters around the world. Railway Metal Region Learn more about how we built it in the blog post [So You Want to Build Your Own Data Center](https://blog.railway.com/p/data-center-build-part-one). #### Why? We are making this move as part of Railway's commitment to providing best-in-class infrastructure for Railway's users. This change enables us to improve the Railway platform's performance, unlock additional features, increase reliability, and make Railway more cost-effective for all users. With Railway Metal, you can expect the following benefits: - **Regions for Trial & Hobby plan users**: Railway Metal will be available to all users, including Trial & Hobby Plan users. Trial & Hobby plan users will be able to deploy services on all fRailway Metal regions in the US, Europe, and Southeast Asia. - **Cheaper Pricing**: Running Railway's own hardware lets us reduce prices. Once Railway Metal is Generally Available, all users can expect to pay up to 50% less for Network Egress, and up to 40% less for Disk Usage. - **Improved Performance**: Services on Railway will run faster. Railway's new CPUs are more powerful with higher core count and better performance per-core. Volume read/write performance will also be significantly faster as all of Railway's disks are NVMe SSDs, which are faster than the disks we could offer before. - **Enhanced Reliability**: With Railway Metal, we are able to manage the hardware, software, and networking stack end-to-end. This allows us to move faster and fix problems more quickly. (For instance, before Railway Metal, incidents such as [a single host failure](https://status.railway.com/cm44jp6qh00jydhwlyxsix3vl) would often take us ~60 minutes to bring the host back up. With Railway's own hardware, we can bring the host back up significantly faster.) - **Improved Networking**: We connect directly to major internet providers and other cloud platforms worldwide, giving you faster connections in and out of Railway. - **Higher Available Resources**: Railway Metal has greater capacity that we will be increasing over time, allowing us to offer you more computing resources on-demand. - **Unlocks More Features**: With Railway's own hardware and networking stack, we can power more advanced features that were not possible before, such as Static Inbound IPs, Anycast Edge Network, High-Availability Volumes, etc. #### Metal edge network Railway routes traffic through its own anycast Metal Edge network. You can check if its enabled for your service in the Public Network section in the service settings tab. screenshot of a service with the metal edge network enabled Screenshot showing a domain with the Metal Edge Network enabled Benefits include better routing, less latency, and underlying infrastructure improvements. #### Regions & availability Railway Metal is available to all users, including Trial & Hobby Plan users. Each Railway Metal region is located in a datacenter that was chosen strategically to provide the best possible performance and reliability. We are in the process of expanding Railway Metal regions, and we expect to have all regions available by the end of Q1'2025 (by 31 March 2025). | Railway Metal Region | Status | | -------------------------- | --------- | | US West (California) | 🟒 Active | | US East (Virginia) | 🟒 Active | | Europe West (Amsterdam) | 🟒 Active | | Southeast Asia (Singapore) | 🟒 Active | #### Gradual upgrade We will gradually move services without a [volume](/volumes) to Railway Metal as we increase the pool of Railway's hardware and its capabilities. When this happens, you may see a new deploy initiated by Railway in your service: Automatic upgrade banner Because this is a new deploy of your latest Active deployment, the behaviour will be the same as if you've manually issued a new deploy. As such, you may notice that: - There may be a brief downtime during the upgrade. To prevent this, ensure you have [Health Checks](/deployments/healthchecks) set up for your service - All ephemeral storage (such as `/tmp`, etc.) will be wiped. To prevent this, use [Volume](/volumes) to store data persistently. All storage is considered ephemeral unless they're on a Railway Volume Note that the above generally applies to deploying a new version of your service. The upgrade to Railway Metal is irrelevant to the behaviour you may run into above - they are the same as if you were to manually deploy a new version of your service. For services in `US West (Oregon)`, Railway will not move your service to Railway Metal if your service [references another service](/variables#referencing-another-services-variable-example) with a volume. This is to prevent any cross-regional networking latency spikes for your service. Refer to [this FAQ](#im-experiencing-slow-network-performance-after-switching-to-us-west-california-railway-metal-region-what-should-i-do) for more information. ##### Rollback If you encounter any issues with your service after the upgrade, you can rollback to the previous version by clicking `Rollback` button in the banner above. Automatic rollback ##### Manual rollback To rollback manually, modify your service's `Settings -> Scale -> Regions` and select regions without the `Metal (New)` tag. Manual rollback #### Timeline Railway's transition to Railway Metal will happen in phases. Here's what you can expect: | Date | What's Happening | Status | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | | Starting December 26th, 2024 | All new deploys on newly-created services without a [volume](/volumes) by Trial & Hobby users will use Railway Metal by default. | 🟒 | | Starting January 1st, 2025 | We will be gradually upgrading services _without a [volume](/volumes)_ to Railway Metal. You can learn more about the gradual upgrade [here](#gradual-upgrade). | 🟒 | | Starting January 31st, 2025 | All new deploys on all services _without a [volume](/volumes)_ by Trial & Hobby users will use Railway Metal by default. | 🟒 | | Starting February 14th, 2025 | All new deploys on all services _without a [volume](/volumes)_ by Pro & Enterprise users will use Railway Metal by default. | 🟒 | | Starting March 14th, 2025 | All new deploys on services _with a [volume](/volumes)_ by Trial & Hobby users will use Railway Metal by default. | 🟒 | | Starting March 21st, 2025 | We will begin migrating services to Railway metal for Hobby Users | 🟒 | | Starting March 28th, 2025 | All new deploys on services _with a [volume](/volumes)_ by Pro & Enterprise users will use Railway Metal by default. | 🟒 | | Starting May 2nd, 2025 | We will begin migrating services to Railway metal for Pro Users | 🟒 | | Starting June 6th, 2025 | We will begin migrating services to Railway metal for Enterprise Users | 🟠 | The migration is aimed to be completed by the 4th of July, 2025. #### Pricing updates If you migrate 80 percent of your workloads to Railway Metal, you'll benefit from significantly reduced costs: - **Egress Fees**: Reduced by 50%, from $0.10/GB to $0.05/GB. - **Disk Storage**: Reduced from $0.25/GB to $0.15/GB. These pricing updates are automatically applied once 80 percent of your workloads are running on Railway Metal. #### FAQ ##### Is this a free upgrade? Yes. ##### How do I receive the upgrade sooner? Go to your service's `Settings -> Scale -> Regions`, and select any region with the `Metal (New)` tag. Manual rollback Refer to [Regions & Availability](#regions--availability) to see the regions available for Railway Metal. ##### How do I know if i'm on Railway metal? To check if your service is running on Railway Metal, go to your service's `Settings -> Scale -> Regions`. If you are on Railway Metal, you will see a `Metal (New)` tag next to the region. Manual rollback ##### Is Railway metal stable? Yes. We have been running a growing amount of deployments on it for the past several months. As of the time of this writing, there are ~40,000 deployments on Railway Metal, and we have not seen any significant issues. ##### Is there downtime if I upgrade? Upgrading to Railway Metal re-deploys your service. This may cause a brief period of downtime as your new deploy is being set up. You can set up [Health Checks](/deployments/healthchecks) to prevent this. ##### What is the difference between Railway metal and regions? Railway Metal refers to Railway's own hardware and infrastructure. Regions refer to the physical location of the datacenter where the hardware is located. ##### I'm experiencing slow network performance after switching to us west (california) Railway metal region. What should I do? You may experience increased latency if your application is communicating with other services (such as databases) in `US West (Oregon)`. This is caused by the physical distance between Oregon (the current region) and California (Railway Metal region). We recommend switching back to the `US West (Oregon)` region if you are experiencing increased latency after upgrading to `US West (California)`. See [Manual rollback](#manual-rollback) for instructions. ##### Will Railway stay on gcp? No. We are migrating completely onto Railway managed hardware. ##### Help! After migrating, why do I have increased latency? It's likely that your database, or service with a volume, isn't migrated over to Metal. Stateful Metal is available starting March 2025. Users who migrate to a different region other than their stateful workload will see increased latency due to the additional physical distance from your service's region. Migrate when your desired region has stateful workloads available after March 2025. ##### Why did my costs increase when moving to metal? Although not intended, Railway Metal, has a different metrics sampler than the legacy hardware. This means that metrics will be quicker to come in, this also meant that legacy was undercounting the amount of resources on the previous hardware. As a result, some metrics like CPU will increase, others, like RAM will usually decrease. ##### How do I opt-out? There is no way to opt-out of Railway Metal. Please [reach out to us](#getting-help) if you have any concerns. #### Getting help Please reach out to us [on the Railway Help Station](https://station.railway.com/feedback/feedback-railway-metal-a41f03a1) if you run into any issues. You can also reach out to us over [Slack](/platform/support#slack) if you are a Pro or [Business Class / Enterprise](/platform/support#business-class) customer. ### Priority boarding Source: https://docs.railway.com/platform/priority-boarding.md Priority Boarding is Railway's beta program for getting access early to new features. Learn how to be a part of it. Priority Boarding is Railway's **beta program** and is available to all Railway users. The Railway team is always working on pushing new beta features out to priority boarding. To read more about Priority Boarding, check out Priority Boarding: The Journey to Get There. #### Enable priority boarding Visit the Feature Flags page in your account settings and flip the "Priority Boarding" switch to enable it. Once enabled, any new features we release to Priority Boarding will automatically be enabled for your account. **Use Priority Boarding with caution if you have production workloads running**, as beta features may have unexpected behavior. #### Keep us posted From this point forward, you'll have Priority Boarding features automatically enabled for your account. We'll notify you of any new features via the [Changelog](https://railway.com/changelog). We kindly request that you report any issues you encounter on Central Station. That's all there is to it! Thanks for helping improve Railway, and we'll see you in Priority Boarding. --- ### Compare to Heroku Source: https://docs.railway.com/platform/compare-to-heroku.md Compare Railway and Heroku on infrastructure, pricing model and deployment experience, with a step-by-step migration guide. _Last updated: June 2026_ > Looking for a pricing-focused comparison? See [railway.com/compare/heroku](https://railway.com/compare/heroku). At a high level, both Railway and Heroku can be used to deploy your app. Both platforms share many similarities: - You can deploy your app from a Docker image or by importing your app’s source code from GitHub. - Services are deployed to a long-running server. - Connect your GitHub repository for automatic builds and deployments on code pushes. - Create isolated preview environments for every pull request. - Support for instant rollbacks. - Integrated metrics and logs. - Define Infrastructure-as-Code (IaC). - Command-line-interface (CLI) to manage resources. - Integrated build pipeline with the ability to define pre-deploy command. - Custom domains with fully managed TLS, including wildcard domains. - Run arbitrary commands against deployed services (SSH). That said, there are some differences between the platforms that might make Railway a better fit for you. #### Scaling strategies ##### Heroku Heroku follows a traditional, instance-based model. Each instance has a set of allocated compute resources (memory and CPU). In the scenario where your deployed service needs more resources, you can either scale: - Vertically: you will need to manually upgrade to a large instance size to unlock more compute resources. - Horizontally: your workload will be distributed across multiple running instances. You can either: - Manually specify the machine count. - Autoscale by defining a minimum and maximum instance count. The number of running instances will increase/decrease based on a target CPU and/or memory utilization you specify. The main drawback of this setup is that it requires manual developer intervention. Either by: - Manually changing instance sizes/running instance count. - Manually adjusting thresholds because you can get into situations where your service scales up for spikes but doesn’t scale down quickly enough, leaving you paying for unused resources. Beyond scaling, there are other notable limitations. Heroku doesn’t natively support multi-region deployments. To achieve that, you must create separate instances in different regions and set up an external load balancer to route traffic appropriately. Furthermore, services deployed to the platform do not offer persistent data storage. Any data written to the local filesystem is ephemeral and will be lost upon redeployment, meaning you'll need to integrate with external storage solutions if your application requires data durability. ##### Railway Railway automatically manages compute resources for you. Your deployed services can scale up or down based on incoming workload without manual configuration of metrics/thresholds or picking instance sizes. Each plan includes defined CPU and memory limits that apply to your services. You can scale horizontally by deploying multiple replicas of your service. Railway automatically distributes public traffic randomly across replicas within each region. Each replica runs with the full resource limits of your plan. For example, if you're on the Pro plan, each replica gets 24 vCPU and 24 GB RAM. So, deploying 3 replicas gives your service a combined capacity of 72 vCPU and 72 GB RAM. ```bash Total resources = number of replicas Γ— maximum compute allocation per replica ``` Replicas can be placed in different geographical locations for multi-region deployments. The platform automatically routes public traffic to the nearest region, then randomly distributes requests among the available replicas within that region. No need to define compute usage thresholds. You can also set services to start on a schedule using a crontab expression. This lets you run scripts at specific times and only pay for the time they’re running. #### Pricing ##### Heroku Heroku follows a traditional, instance-based pricing. You select the amount of compute resources you need from a list of instance sizes where each one has a fixed monthly price. ![Heroku instances](https://res.cloudinary.com/railway/image/upload/v1753470544/docs/comparison-docs/heroku-instances_migpfb.png) While this model gives you predictable pricing, the main drawback is you end up in one of two situations: - Under-provisioning: your deployed service doesn’t have enough compute resources which will lead to failed requests. - Over-provisioning: your deployed service will have extra unused resources that you’re overpaying for every month. Enabling horizontal autoscaling can help with optimizing costs, but the trade-off will be needing to figure out the right amount of thresholds instead. Additionally, Heroku runs on AWS, so the unit economics of the business need to be high to offset the cost of the underlying infrastructure. Those extra costs are then passed down to you as the user, so you end up paying extra for: - Unlocking additional features (e.g. private networking is a paid enterprise add-on). - Pay extra for resources (e.g., bandwidth, memory, CPU and storage). ##### Railway Railway automatically scales your infrastructure up or down based on workload demands, adapting in real time without any manual intervention. This makes it possible to offer a usage-based pricing model that depends on active compute time and the amount of resources it consumes. You only pay for what your deployed services use. ``` Active compute time x compute size (memory and CPU) ``` You don’t need to think about instance sizes or manually configure them. All deployed services scale automatically. ![Railway usage-based pricing](https://res.cloudinary.com/railway/image/upload/v1753470546/docs/comparison-docs/railway-usage-based-pricing_efrrjn.png) If you spin up multiple replicas for a given service, you’ll only be charged for the active compute time for each replica. Railway also has a [serverless](/deployments/serverless) feature, which helps further reduce costs when enabled. When a service has no outbound requests for over 10 minutes, it is automatically put to sleep. While asleep, the service incurs no compute charges. It wakes up on the next incoming request, ensuring seamless reactivation without manual effort. This is ideal for workloads with sporadic or bursty traffic, so you only pay when your code is running. Finally, Railway’s infrastructure runs on hardware that’s owned and operated in data centers across the globe. This means you’re not going to be overcharged for resources. #### Dashboard experience ##### Heroku Heroku’s unit of deployment is the app, and each app is deployed independently. If you have a different infrastructure components (e.g. API, frontend, background workers, etc.) they will be treated as independent entities. There is no top‑level β€œproject” object that groups related apps. Additionally, Heroku does not support shared environment variables across apps. Each deployed app has its own isolated set of variables, making it harder to manage secrets or config values shared across multiple services. ![Heroku dashboard](https://res.cloudinary.com/railway/image/upload/v1753473858/docs/comparison-docs/heroku-dashboard_wxr3sw.png) ##### Railway Railway’s dashboard offers a real-time collaborative canvas where you can view all of your running services and databases at a glance. You can group the different infrastructure components and visualize how they’re related to one other. You can also share environment variables between services, streamlining config management across complex projects with multiple components. ![Railway canvas](https://res.cloudinary.com/railway/image/upload/v1737785173/docs/the-basics/project_canvas_dxpzxe.png) Additionally, Railway offers a template directory that makes it easy to self-host open-source projects with just a few clicks. If you publish a template and others deploy it in their projects, you’ll earn a 25% kickback of their usage costs. Check out all templates at [railway.com/deploy](http://railway.com/deploy) #### Summary | **Category** | **Heroku** | **Railway** | | --------------------------- | ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | | **Scaling Model** | Instance-based | Usage-based | | **Vertical Scaling** | Manual upgrade to larger instance sizes | Auto-scales to the plan's limits without manual intervention | | **Horizontal Scaling** | Manual or threshold-based autoscaling; requires setting CPU/memory limits | Add replicas manually; traffic routed automatically across replicas and regions | | **Autoscaling Flexibility** | Threshold-based, needs manual tuning | Fully automated; scales based on workload | | **Multi-region Support** | Not natively supported; must set up separate apps + external load balancer | Built-in; auto-routes traffic to nearest region and balances load across replicas | | **Persistent Storage** | Not supported; ephemeral file system only | Persistent volumes are supported | | **Private Networking** | Available with paid Enterprise add-on | Included at no extra cost | | **Pricing Model** | Dynos from $5/mo Eco (sleeps) to $1,500/mo; Standard-1X $25/mo for 0.5 GB. Manual tuning required to avoid under/over-provisioning | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage. Inherently optimized by dynamic scaling | | **Infrastructure Provider** | AWS-based; higher base costs | Railway-owned global infrastructure; lower costs and no feature gating | | **Dashboard UX** | Traditional app-based dashboard; each app is independent | Visual, collaborative canvas view for full projects with interlinked services | | **Project Structure** | No concept of grouped services/projects | Groups all infra components visually under a unified project view | | **Environment Variables** | Isolated per app | Isolated per app but can be shared across services within a project | | **Wildcard Domains** | Not supported; manual configuration needed per subdomain | Fully supported; configure at the project level | #### Frequently asked questions ##### Is Railway cheaper than Heroku? For most workloads, yes. Heroku charges a fixed monthly price per dyno per app (from $5/mo for Eco dynos that sleep, with Standard-1X at $25/mo for 0.5 GB), so you pay the same whether the dyno is busy or idle, and every app, worker, and staging environment adds its own dyno fees. Railway bills per second of aggregate actual usage at $20/vCPU-month and $10/GB-month RAM with no per-service charge, so multi-service projects don't multiply fixed costs as you scale; if you prefer a fixed, predictable monthly bill, Heroku's instance pricing is simpler to forecast. ##### What is the Railway equivalent of a Heroku dyno? A Railway service. The difference is that you don't pick an instance size: each service automatically scales up to your plan's CPU and memory limits, and you can add replicas for horizontal scaling. You're charged for the active compute time each service and replica actually uses. ##### Does Railway have an ephemeral filesystem like Heroku? No. Heroku's filesystem is ephemeral, so any data written locally is lost on redeploy and requires external storage solutions. Railway supports persistent volumes ($0.15/GB-month), so databases and apps that write to disk can keep their data across deployments. ##### How hard is it to migrate from Heroku to Railway? If your app deploys from a GitHub repo or Docker image, the migration is mostly connecting the repo, copying your environment variables, and configuring a domain; the steps below walk through it. You can sign up for free and receive $5 in credits to try the platform before committing. #### Migrate from Heroku to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. ##### Deploying your app 1. β€œChoose Deploy from GitHub repo”, connect your GitHub account, and select the repo you would like to deploy. ![Railway onboarding new project](https://res.cloudinary.com/railway/image/upload/v1753470545/docs/comparison-docs/railway-onboarding-new-project_qqftnj.png) 2. If your project is using any environment variables or secrets: 1. Click on the deployed service. 2. Navigate to the β€œVariables” tab. 3. Add a new variable by clicking the β€œNew Variable” button. Alternatively, you can import a `.env` file by clicking β€œRaw Editor” and adding all variables at once. ![Railway environment variables](https://res.cloudinary.com/railway/image/upload/v1753470542/docs/comparison-docs/railway-service-environment-variables_hbvrct.png) 3. To make your project accessible over the internet, you will need to configure a domain: 1. From the project’s canvas, click on the service you would like to configure. 2. Navigate to the β€œSettings” tab. 3. Go to the β€œNetworking” section. 4. You can either: 1. Generate a Railway service domain: this will make your app available under a `.up.railway.app` domain. 2. Add a custom domain: follow the DNS configuration steps. #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to Render Source: https://docs.railway.com/platform/compare-to-render.md Compare Railway and Render on infrastructure, pricing model and dashboard experience, with a step-by-step migration guide. _Last updated: June 2026_ > Looking for a pricing-focused comparison? See [railway.com/compare/render](https://railway.com/compare/render). At a high level, both Railway and Render can be used to deploy your app. Both platforms share many similarities: - You can deploy your app from a Docker image or by importing your app’s source code from GitHub. - Multi-service architecture where you can deploy different services under one project (e.g. a frontend, APIs, databases, etc.). - Services are deployed to a long-running server. - Services can have persistent storage via volumes. - Public and private networking are included out-of-the-box. - Healthchecks are available to guarantee zero-downtime deployments. - Connect your GitHub repository for automatic builds and deployments on code pushes. - Create isolated preview environments for every pull request. - Support for instant rollbacks. - Integrated metrics and logs. - Define Infrastructure-as-Code (IaC). - Command-line-interface (CLI) to manage resources. - Integrated build pipeline with the ability to define pre-deploy command. - Support for wildcard domains. - Custom domains with fully managed TLS. - Schedule tasks with cron jobs. - Run arbitrary commands against deployed services (SSH). - Shared environment variables across services. That said, there are some differences between the platforms that might make Railway a better fit for you. #### Scaling strategies ##### Render Render follows a traditional, instance-based model. Each instance has a set of allocated compute resources (memory and CPU). In the scenario where your deployed service needs more resources, you can either scale: - Vertically: you will need to manually upgrade to a large instance size to unlock more compute resources. - Horizontally: your workload will be distributed across multiple running instances. You can either: - Manually specify the machine count. - Autoscale by defining a minimum and maximum instance count. The number of running instances will increase/decrease based on a target CPU and/or memory utilization you specify. The main drawback of this setup is that it requires manual developer intervention. Either by: - Manually changing instance sizes/running instance count. - Manually adjusting thresholds because you can get into situations where your service scales up for spikes but doesn’t scale down quickly enough, leaving you paying for unused resources. ##### Railway Railway automatically manages compute resources for you. Your deployed services can scale up or down based on incoming workload without manual configuration of metrics/thresholds or picking instance sizes. Each plan includes defined CPU and memory limits that apply to your services. You can scale horizontally by deploying multiple replicas of your service. Railway automatically distributes public traffic randomly across replicas within each region. Each replica runs with the full resource limits of your plan. For example, if you're on the Pro plan, each replica gets 24 vCPU and 24 GB RAM. So, deploying 3 replicas gives your service a combined capacity of 72 vCPU and 72 GB RAM. ```bash Total resources = number of replicas Γ— maximum compute allocation per replica ``` Replicas can be placed in different geographical locations for multi-region deployments. The platform automatically routes public traffic to the nearest region, then randomly distributes requests among the available replicas within that region. No need to define compute usage thresholds. You can also set services to start on a schedule using a crontab expression. This lets you run scripts at specific times and only pay for the time they’re running. #### Pricing ##### Render Render follows a traditional, instance-based pricing. You select the amount of compute resources you need from a list of instance sizes where each one has a fixed monthly price. ![Render instances](https://res.cloudinary.com/railway/image/upload/v1753470541/docs/comparison-docs/render-instances_swcn49.png) While this model gives you predictable pricing, the main drawback is you end up in one of two situations: - Under-provisioning: your deployed service doesn’t have enough compute resources which will lead to failed requests. - Over-provisioning: your deployed service will have extra unused resources that you’re overpaying for every month. Enabling horizontal autoscaling can help with optimizing costs, but the trade-off will be needing to figure out the right amount of thresholds instead. Additionally, Render runs on AWS and GCP, so the unit economics of the business need to be high to offset the cost of the underlying infrastructure. Those extra costs are then passed down to you as the user, so you end up paying extra for: - Unlocking additional features (e.g. horizontal autoscaling and environments are only available on paid plans). - Pay extra for resources (e.g., bandwidth, memory, CPU and storage). - Pay for seats where each team member you invite adds a fixed monthly fee regardless of your usage. ##### Railway Railway automatically scales your infrastructure up or down based on workload demands, adapting in real time without any manual intervention. This makes it possible to offer a usage-based pricing model that depends on active compute time and the amount of resources it consumes. You only pay for what your deployed services use. ``` Active compute time x compute size (memory and CPU) ``` You don’t need to think about instance sizes or manually configure them. All deployed services scale automatically. ![Railway usage-based pricing](https://res.cloudinary.com/railway/image/upload/v1753470546/docs/comparison-docs/railway-usage-based-pricing_efrrjn.png) If you spin up multiple replicas for a given service, you’ll only be charged for the active compute time for each replica. Railway also has a [serverless](/deployments/serverless) feature, which helps further reduce costs when enabled. When a service has no outbound requests for over 10 minutes, it is automatically put to sleep. While asleep, the service incurs no compute charges. It wakes up on the next incoming request, ensuring seamless reactivation without manual effort. This is ideal for workloads with sporadic or bursty traffic, so you only pay when your code is running. Finally, Railway’s infrastructure runs on hardware that’s owned and operated in data centers across the globe. This means you’re not going to be overcharged for resources. #### Dashboard experience ##### Render Render’s dashboard offers a traditional dashboard where you can view all of your project’s resources. ![Render dashboard](https://res.cloudinary.com/railway/image/upload/v1753470544/docs/comparison-docs/render-dashboard_ysmx4p.png) ##### Railway Railway’s dashboard offers a real-time collaborative canvas where you can view all of your running services and databases at a glance. You can group the different infrastructure components and visualize how they’re related to one another. ![Railway canvas](https://res.cloudinary.com/railway/image/upload/v1737785173/docs/the-basics/project_canvas_dxpzxe.png) Additionally, Railway offers a template directory that makes it easy to self-host open-source projects with just a few clicks. If you publish a template and others deploy it in their projects, you’ll earn a 25% kickback of their usage costs. Check out all templates at [railway.com/deploy](http://railway.com/deploy) #### Summary | **Category** | **Render** | **Railway** | | ------------------------ | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | **Scaling Model** | Instance-based | Usage-based | | **Vertical Scaling** | Manual upgrade to larger instance sizes. | Scales to plan limits automatically | | **Horizontal Scaling** | Manually add/remove instances or autoscaling (based on CPU/memory thresholds); requires tuning | Manually add replicas, traffic is routed automatically across regions and replicas | | **Multi-region Support** | Not supported | Built-in support; traffic routed to nearest region | | **Pricing Model** | Instances from $7/mo (0.5 CPU, 512 MB) to $450/mo, plus workspace fee ($0-$499/mo). Seat-based pricing | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage; unlimited workspace seats included on Pro | | **Cost Optimization** | Requires tuning to avoid over/under-provisioning | Inherently optimized. Pay only for used compute | | **Infrastructure** | Runs on AWS and GCP; feature access and resources cost more | Railway-owned global infrastructure, lower unit costs and features aren't gated | | **Dashboard UX** | Traditional dashboard to view project resources | Real-time collaborative canvas with visual infra relationships. Template directory for 1-click deployments | #### Frequently asked questions ##### Is Railway cheaper than Render? For a single always-busy instance, Render's fixed pricing (from $7/mo for 0.5 CPU and 512 MB up to $450/mo, plus a $0-$499/mo workspace fee) can be easier to forecast. As you scale, Railway tends to be more cost-effective: Render charges per instance provisioned, so every service, worker, and environment adds a fixed line item whether it's busy or idle, while Railway bills $20/vCPU-month and $10/GB-month RAM per second of aggregate actual usage with no per-service charge. ##### Does Railway charge per seat like Render? No. Railway Pro is a $20/month usage minimum with unlimited workspace seats included, so adding team members costs nothing. Railway bills compute per second of actual usage at $20/vCPU-month and $10/GB-month RAM, so you only pay for what your services consume. ##### Does Railway support multi-region deployments? Yes, multi-region support is built in. You can place replicas of a service in different regions and Railway routes public traffic to the nearest region automatically. Render does not support multi-region deployments. ##### How do I migrate from Render to Railway? Since both platforms deploy from a GitHub repo or Docker image, migration is mostly connecting your repo, copying environment variables, and configuring a domain; the steps below walk through it. You can sign up for free and receive $5 in credits to try the platform first. #### Migrate from Render to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. ##### Deploying your app 1. β€œChoose Deploy from GitHub repo”, connect your GitHub account, and select the repo you would like to deploy. ![Railway onboarding new project](https://res.cloudinary.com/railway/image/upload/v1753470545/docs/comparison-docs/railway-onboarding-new-project_qqftnj.png) 2. If your project is using any environment variables or secrets: 1. Click on the deployed service. 2. Navigate to the β€œVariables” tab. 3. Add a new variable by clicking the β€œNew Variable” button. Alternatively, you can import a `.env` file by clicking β€œRaw Editor” and adding all variables at once. ![Railway environment variables](https://res.cloudinary.com/railway/image/upload/v1753470542/docs/comparison-docs/railway-service-environment-variables_hbvrct.png) 3. To make your project accessible over the internet, you will need to configure a domain: 1. From the project’s canvas, click on the service you would like to configure. 2. Navigate to the β€œSettings” tab. 3. Go to the β€œNetworking” section. 4. You can either: 1. Generate a Railway service domain: this will make your app available under a `.up.railway.app` domain. 2. Add a custom domain: follow the DNS configuration steps. #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to Fly Source: https://docs.railway.com/platform/compare-to-fly.md Compare Railway and Fly.io on deployment model, scaling, pricing and developer workflow, with a step-by-step migration guide. _Last updated: June 2026_ > Looking for a pricing-focused comparison? See [railway.com/compare/fly](https://railway.com/compare/fly). At a high level, both Railway and Fly.io can be used to deploy your app. Both platforms share several similarities: - You can deploy your app from a Docker image or by importing your app’s source code from GitHub. - Apps are deployed to a long-running server. - Apps can have persistent storage through volumes. - Public and private networking are included out-of-the-box. - Multi-region deployments. - Both platforms’ infrastructure runs on hardware that’s owned and operated in data centers across the globe. - Healthchecks to guarantee zero-downtime deployments. That said, there are differences between both platforms when it comes to the overall developer experience that can make Railway a better fit for you. #### Deployment model & scaling ##### Fly When you deploy your app to Fly, your code runs on lightweight Virtual Machines (VMs) called [Fly Machines](https://fly.io/docs/machines/). Each machine needs a defined amount of CPU and memory. You can either choose from [preset sizes](https://fly.io/docs/about/pricing/#started-fly-machines) or configure them separately, depending on your app’s needs. Machines come with two types of virtual CPUs: `shared` and `performance`. Shared CPUs are the more affordable option. They guarantee a small slice of CPU time (around 6%) but can burst to full power when there’s extra capacity. This makes them ideal for apps that are mostly idle but occasionally need to handle traffic, like APIs or web servers. Just keep in mind that heavy usage can lead to throttling. Performance CPUs, by contrast, give you dedicated access to the CPU at all times. There’s no bursting or throttling, making them a better choice for workloads that require consistent, high performance. **Scaling your app** When scaling your app, you have one of two options: - Scale a machine’s CPU and RAM: you will need to manually pick a larger instance. You can do this using the Fly CLI or API. - Increase the number of running machines. There are two options: - You can manually increase the number of running machines using the Fly CLI or API. - Fly can automatically adjust the number of running or created Fly Machines dynamically. Two forms of autoscaling are supported. - Autostop/autostart Machines: You create a β€œpool” of Machines in one or more regions and Fly’s Proxy start/suspend Machines based on incoming requests. With this option, Machines are never created or deleted, you need to specify how many machines your app will need. - Metrics-based autoscaling: this is not supported out-of-the-box. However, you can deploy [`fly-autoscaler`](https://github.com/superfly/fly-autoscaler) which polls metrics and automatically creates/deletes or starts/stops existing Machines based on the metrics you define. ![Scaling your app on Fly.io](https://res.cloudinary.com/railway/image/upload/v1753083711/docs/scaling-your-app-on-fly_pe6clo.png) ##### Railway Railway automatically manages compute resources for you. Your deployed services can scale up or down based on incoming workload without manual configuration of metrics/thresholds or picking instance sizes. Each plan includes defined CPU and memory limits that apply to your services. You can scale horizontally by deploying multiple replicas of your service. Railway automatically distributes public traffic randomly across replicas within each region. Each replica runs with the full resource limits of your plan. For example, if you're [on the Pro plan](/pricing/plans), each replica gets 24 vCPU and 24 GB RAM. So, deploying 3 replicas gives your service a combined capacity of 72 vCPU and 72 GB RAM. ```text Total resources = number of replicas Γ— maximum compute allocation per replica ``` Replicas can be placed in different geographical locations. The platform automatically routes public traffic to the nearest region, then randomly distributes requests among the available replicas within that region. You can also set services to start on a schedule using a crontab expression. This lets you run scripts at specific times and only pay for the time they’re running. #### Pricing ##### Fly Fly charges for compute based on two primary factors: machine state and CPU type (`shared` vs. `performance`). Machine state determines the base charge structure. Started machines incur full compute charges, while stopped machines are only charged for root file system (rootfs) storage. The rootfs size depends on your OCI image plus [containerd](https://containerd.io/) optimizations applied to the underlying file system. [Pricing for different preset sizes is available in Fly's documentation](https://fly.io/docs/about/pricing/#started-fly-machines). You can get a discount by reserving compute time blocks. This requires paying the annual amount upfront, then receiving monthly credits equal to the "per month" rate. Credits expire at month-end and do not roll over to subsequent months. The trade-off is you might end up paying for unused resources. ![Fly compute presets pricing](https://res.cloudinary.com/railway/image/upload/v1753083710/docs/fly-pricing_fpda5v.png) One important consideration is that Fly Machines incur cost based _on running time_. Even with zero traffic or resource utilization, you pay for the entire duration a machine remains in a running state. While machines can be stopped to reduce costs, any time spent running generates full compute charges regardless of actual usage. ##### Railway Railway follows a usage-based pricing model that depends on how long your service runs and the amount of resources it consumes. ```text Active compute time x compute size (memory and CPU) ``` If you spin up multiple replicas for a given service, you’ll only be charged for the active compute time for each replica. ![Railway autoscaling](https://res.cloudinary.com/railway/image/upload/v1753083711/docs/railway-autoscaling_nf5hrc.png) Railway also has a [serverless](/deployments/serverless) feature, which helps further reduce costs when enabled. When a service has no outbound requests for over 10 minutes, it is automatically put to sleep. While asleep, the service incurs no compute charges. It wakes up on the next incoming request, ensuring seamless reactivation without manual effort. This is ideal for workloads with sporadic or bursty traffic, so you only pay when your code is running. #### Developer workflow & CI/CD ##### Fly Fly provides a CLI-first experience through `flyctl`, allowing you to create and deploy apps, manage Machines and volumes, configure networking, and perform other infrastructure tasks directly from the command line. However, Fly lacks built-in CI/CD capabilities. This means you can't: - Create isolated preview environments for every pull request. - Perform instant rollbacks. To access these features, you'll need to integrate third-party CI/CD tools like [GitHub Actions.](https://github.com/features/actions) Similarly, Fly doesn't include native environment support for development, staging, and production workflows. To achieve proper environment isolation, you must create separate organizations for each environment and link them to a parent organization for centralized billing management. For monitoring, Fly automatically collects metrics from every application using a fully-managed Prometheus service based on VictoriaMetrics. The system scrapes metrics from all application instances and provides data on HTTP responses, TCP connections, memory usage, CPU performance, disk I/O, network traffic, and filesystem utilization. The Fly dashboard includes a basic Metrics tab displaying this automatically collected data. Beyond the basic dashboard, Fly offers a managed Grafana instance at [fly-metrics.net](http://fly-metrics.net) with detailed dashboards and query capabilities using MetricsQL as the querying language. You can also connect external tools through the Prometheus API. ![fly-metrics.net](https://res.cloudinary.com/railway/image/upload/v1753083710/docs/fly-metrics.net_d6r3cs.png) Advanced features like alerting and custom dashboards require working with multiple tools and query languages, creating a learning curve for teams wanting sophisticated monitoring capabilities. Additionally, Fly doesn't support webhooks, making it more difficult to build integrations with external services. ##### Railway Railway follows a dashboard-first experience, while [also providing a CLI](/cli). In Railway, you create a project for each app you’re building. A project is a collection of services and databases. This can include frontend, API, background workers, API, analytics database, queues and so much more. All in a unified deployment experience that supports real-time collaboration. ![Railway architecture](https://res.cloudinary.com/railway/image/upload/v1737785173/docs/the-basics/project_canvas_dxpzxe.png) Additionally, Railway offers a template directory that makes it easy to self-host open-source projects with just a few clicks. If you publish a template and others deploy it in their projects, you’ll earn a 25% kickback of their usage costs. Check out all templates at [railway.com/deploy](http://railway.com/deploy) You also get: - First-class support for environments so you can isolate production, staging, development, testing, etc. - GitHub integration with support for provisioning isolated preview environments for every pull request. - Ability to do instant rollbacks for your deployments. Each Railway project includes a built-in observability dashboard that provides a customizable view into chosen metrics, logs, and data all in one place ![Screenshot of the Observability Dashboard](https://res.cloudinary.com/railway/image/upload/v1717179720/Wholescreenshot_vc5l5e.png) Finally, Railway supports creating webhooks which allow external services to listen to events from Railway ![Webhooks](https://res.cloudinary.com/railway/image/upload/v1753083711/docs/railway-webhooks_r4ervy.png) #### Summary | Category | Railway | Fly.io | | ------------------------ | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | Scaling | Auto-scaling included (no manual config); supports horizontal scaling via replicas | Manual vertical/horizontal scaling or horizontal autoscaling (via `fly-autoscaler`); two autoscaling options (autostop/start, metrics-based) | | Compute Pricing | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage | Machines billed per second while started; performance-1x 2 GB β‰ˆ $32/mo provisioned. Unused uptime still billed unless stopped | | CI/CD Integration | Built-in GitHub integration with preview environments and instant rollbacks | No built-in CI/CD; requires third-party tools like GitHub Actions | | Environments Support | First-class support for multiple environments (dev, staging, prod, etc.) | Requires creating separate orgs per environment | | Monitoring & Metrics | Built-in observability dashboard (metrics, logs, data all in one place) | Prometheus-based metrics + optional Grafana (`fly-metrics.net`) for deep dives | | Webhooks & Extensibility | Webhook support for integrations | No support for outbound webhooks | | Developer Experience | Dashboard-first, supports real-time team collaboration, CLI available | CLI-first (`flyctl`) for all management tasks | #### Frequently asked questions ##### Is Railway cheaper than Fly.io? For workloads that aren't busy around the clock, usually yes. Fly Machines are billed per second for the entire time they're started, even at zero traffic (a performance-1x Machine with 2 GB runs about $32/mo provisioned), while Railway bills $20/vCPU-month and $10/GB-month RAM per second of actual usage, and the serverless feature sleeps idle services so they incur no compute charges. If you keep Machines stopped aggressively or reserve compute blocks upfront, Fly's pricing can also be economical. ##### Does Railway have built-in CI/CD like Fly.io? Railway includes CI/CD out of the box: GitHub integration, isolated preview environments for every pull request, and instant rollbacks. Fly doesn't ship built-in CI/CD, so you'd wire up third-party tools like GitHub Actions to get the same workflow. ##### When is Fly.io a better fit than Railway? If you want a CLI-first workflow with fine-grained control over individual VMs, `flyctl` gives you direct management of Machines, volumes, and networking. Fly's Prometheus-based metrics with managed Grafana also suit teams that want to deep-dive with MetricsQL. Both platforms support multi-region deployments on their own hardware. ##### Do both Railway and Fly.io bill per second? Yes, but they meter different things. Fly charges for the full duration a Machine is in a started state regardless of utilization, while Railway charges for active compute time and resource size, and sleeping services cost nothing. That difference matters most for services that sit idle between bursts of traffic. #### Migrate from Fly.io to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. 1. β€œChoose Deploy from GitHub repo”, connect your GitHub account, and select the repo you would like to deploy. ![Railway Deploy New Project](https://res.cloudinary.com/railway/image/upload/v1753083710/docs/railway-new-project_tte4eb.png) 2. If your project is using any environment variables or secrets: 1. Click on the deployed service. 2. Navigate to the β€œVariables” tab. 3. Add a new variable by clicking the β€œNew Variable” button. Alternatively, you can import a `.env` file by clicking β€œRaw Editor” and adding all variables at once. ![Railway Variables](https://res.cloudinary.com/railway/image/upload/v1753083710/docs/railway-variables_iq3rgd.png) 3. To make your project accessible over the internet, you will need to configure a domain: 1. From the project’s canvas, click on the service you would like to configure. 2. Navigate to the β€œSettings” tab. 3. Go to the β€œNetworking” section. 4. You can either: 1. Generate a Railway service domain: this will make your app available under a `.up.railway.app` domain. 2. Add a custom domain: follow the DNS configuration steps. #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. For larger workloads or specific requirements, you can [book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to Northflank Source: https://docs.railway.com/platform/compare-to-northflank.md Compare Railway and Northflank on infrastructure, scaling, pricing, deployment experience, and AI capabilities, with a step-by-step migration guide. _Last updated: July 2026_ At a high level, both Railway and Northflank can be used to package, deploy, host, and monitor software on the web. Both support multiple service types, including web applications, APIs, storage buckets, databases, and more, and both are easier to work with than most cloud service providers. That said, there are notable differences worth considering when choosing where to host your software, including the infrastructure model, pricing mechanics, and AI capabilities. - Deployments from a Docker image or by importing source code from GitHub. - Multi-service architecture: web applications, APIs, workers, and databases under one project. - Services deployed to long-running servers. - Persistent storage via volumes. - Public and private networking out of the box. - Healthchecks and zero-downtime deployments. - Isolated preview environments for every pull request. - Instant rollbacks. - Integrated metrics and logs. - Infrastructure-as-Code. - CLI management of resources. - Cron jobs. - Custom domains with fully managed TLS. - Remote SSH into deployed services. - Usage-based billing. - Sandboxes. This guide covers both platforms in detail to help you understand when to choose each. #### Infrastructure model ##### Northflank Northflank makes running applications on Kubernetes (k8s) easier. Kubernetes is an extremely powerful container orchestration framework, but it comes with a steep learning curve. Northflank abstracts away many of the gnarliest parts of k8s operation, but core Kubernetes concepts are still intentionally part of the product surface: services map to cluster resources, and compute plans map to Kubernetes resource requests. This is a good fit if you have a team that's confident with container orchestration and looking for a platform to help operate or scale their clusters. Northflank also lets you bring your own cloud and use Northflank as the control plane, leveraging it to package and deploy applications into your own cloud account. This can be valuable in two cases: 1. Users with strict data residency requirements. 2. Users who want to administer their own cluster directly. The trade-off is that you'll have two bills to pay: one for Northflank and one for your cloud provider. ![Northflank's provider link setup for bringing your own cloud](https://res.cloudinary.com/railway/image/upload/v1784555768/docs/external-images/northflank_byoc_t4raop.png) ##### Railway Railway abstracts away underlying infrastructure like Kubernetes, managing its own custom orchestration of servers on your behalf. You don't need to know about servers, containers, clusters, or networking. This is ideal for teams that are broadly uninterested in underlying infrastructure mechanics and want to focus on shipping code. Railway operates its own infrastructure in data centers globally through [Railway Metal](/platform/railway-metal). Because of this, it can provide a significantly less expensive product, avoiding the margin typically associated with hyperscalers like GCP, AWS, and Azure. And because Railway provides and manages the infrastructure, there's only one vendor for procurement to vet and one bill to pay. ![Railway's infrastructure spans regions across the globe](https://res.cloudinary.com/railway/image/upload/v1784555881/docs/external-images/railway_regions_l2xpuj.png) #### Scaling strategies ##### Northflank Northflank follows a traditional, resource-based model. Each resource has a set of allocated compute resources for memory and CPU. ![Northflank's compute plan picker](https://res.cloudinary.com/railway/image/upload/v1784555341/docs/external-images/northflank-compute-picker_o9lrtn.png) When your deployed service needs more resources, you can either scale vertically by manually upgrading to a larger instance size, or horizontally by specifying a machine count or configuring autoscaling rules. ##### Railway Railway automatically manages compute resources for you. Your deployed services can scale up or down based on incoming workload without manual configuration of thresholds or picking instance sizes. Each plan includes defined CPU and memory limits that apply to your services. You can also scale horizontally by deploying multiple replicas of your service. Railway automatically distributes public traffic randomly across replicas within each region. Each replica runs with the full resource limits of your plan. Replicas can be placed in different geographical locations for multi-region deployments. The platform automatically routes public traffic to the nearest region, then randomly distributes requests among the available replicas within that region. Scaling down is just as important as scaling up, and Railway automatically releases memory allocations as demand falls. By default, Railway always allocates a minimum amount of memory for your service, even when it's not in use. To scale even lower than that minimum, you can scale to zero by toggling [serverless](/deployments/serverless) in your service settings. After ten minutes, a serverless container that hasn't done any work is fully put to sleep, then wakes up on the next request. ![Enabling Serverless on a Railway service](https://res.cloudinary.com/railway/image/upload/v1784555882/docs/external-images/railway_serverless_hh11jr.png) For services with known usage patterns, such as data workloads that run once a day, you can scale them efficiently by putting them on a cron schedule. This lets you run scripts at specific times and only pay for the time they're running. #### Pricing ##### Northflank Northflank bills per second of resource allocation. When you pick a plan for a service, you're billed at that plan's rate for the number of seconds the service exists. A running service bills its full plan size regardless of how much of its resources it uses. The rates themselves are straightforward, $0.01667 per vCPU-hour and $0.00833 per GB of memory per hour, and plans bundle those into fixed tiers like nf-compute-100-2 (1 vCPU, 2 GB) at $24 per month. Since billing is tied to the plan rather than the workload, the plan has to be sized for your service's peak, and every hour it spends below that peak is capacity you're paying for but not using. A payment method is required before creating any resources, on every plan, including the free tier. As noted above, bringing your own cluster adds Northflank platform fees on top of your cloud provider bill. ##### Railway Railway bills per minute of resource consumption. When you pick a plan, you're picking a resource ceiling that a service cannot exceed. If a service uses less than its ceiling, you're only charged for what it uses, including nothing at all for idle serverless services. Rates are $20 per vCPU-month and $10 per GB of memory per month, metered continuously, so a service that idles at 200 MB most of the day and briefly spikes to 2 GB bills mostly at 200 MB. There are no per-service instance sizes to select and no plan tiers to outgrow; services scale within the ceiling on their own. This difference surfaces in workloads that aren't busy around the clock, which is most of them. On Northflank, you pay for the gap between peak sizing and actual usage. On Railway, that gap is closed automatically so you don't pay for it. ##### Pricing worked example To illustrate the difference between Northflank's static pricing and Railway's more dynamic model, consider a background worker processing image uploads at unpredictable times around the clock. ![Cost comparison for a bursty background worker: Northflank's flat plan versus Railway's metered compute](https://res.cloudinary.com/railway/image/upload/v1784555341/docs/external-images/northflank-scaling-chart_lq8udg.png) The example workload processes: - ~50 uploads/day, at - ~2 min processing each - β‰ˆ 100 active minutes/day, - **~50 active hours/month** Memory peaks around 2 GB while a large image is being processed, and idles at a couple hundred MB the rest of the time. Sized at 1 vCPU / 2 GB. With Serverless enabled, Railway bills close to the ~50 hours it's actually processing something: - Combined rate for 1 vCPU + 2 GB is $40/month (720 hrs) β‰ˆ $0.0556/hour - 50 hours Γ— $0.0556 β‰ˆ **$2.78/month** That's the highest possible estimate, as Railway meters actual usage, so the minutes spent below 2 GB bill below 2 GB. Northflank bills the selected plan for the full month deployed, since there's no traffic-triggered sleep to fall back on. The plan also has to be sized for the peak, because that occasional large image needs the full 2 GB whether it arrives once an hour or once a week. The matching plan is nf-compute-100-2 (1 dedicated vCPU, 2,048 MB) at **$24.00/month flat**. In this case, Railway is roughly 8.6x less expensive, or about $21 per month saved per worker. Multiply that across eight or ten workers and multiple environments, and the savings can reach thousands per year. This example favors Railway's model of billing on consumption. For workloads that stay saturated 24/7, some Northflank plans can be more cost-effective than their Railway equivalent. The reality is that most software is only utilized to its full resource extent very rarely, so paying for that capacity is unnecessary overhead. #### UI experience ##### Northflank Northflank's UI is centered around a traditional infrastructure monitoring dashboard. Projects contain services, jobs, and addons in a familiar hierarchy, and each comes with logs and metrics to help understand failures. Jobs also record per-run history, so individual executions can be reviewed after the fact. ![Northflank's service dashboard](https://res.cloudinary.com/railway/image/upload/v1784555341/docs/external-images/northflank-dashboard_xclkfj.png) Northflank logs are available for 60 days, and log sinks pipe logs out to other observability systems. Northflank also provides a custom alerting suite that delivers infrastructure alerts through notification integrations and webhooks. Kubernetes concepts appear in the dashboard as they do elsewhere in the product. You'll see compute plans when creating services, and cluster state when debugging. ##### Railway Railway's default project UI is a real-time collaborative canvas showing all services and how they relate to one another. Changes from teammates appear live, and environment variables can be shared across services within a project instead of being duplicated per service. ![Railway's real-time project canvas](https://res.cloudinary.com/railway/image/upload/v1784555882/docs/external-images/project_canvas_umami_lb759i_oy5g6w.avif) Every service comes with CPU, memory, disk, and network metrics, with up to 30 days of history. Deployments are marked on the metrics graphs to make it easier to connect a resource spike to the code change that caused it. Metrics for services with replicas can be viewed summed or per replica. The Observability Dashboard provides a configurable view of metrics, logs, and spend for each environment. Log widgets accept the same filter syntax as the Log Explorer, monitors can be attached to any widget for alerting, and webhooks send deployment events to an external URL. Railway also maintains a template directory where anyone can package and publish a deployable stack. Template creators earn a 25% kickback on the usage their templates generate. #### AI capabilities ##### Northflank Northflank primarily provides AI infrastructure _for_ AI workloads, including microVM-backed sandboxes for running untrusted LLM-generated code and GPUs for intensive machine learning workloads. These features are geared toward people building AI- and machine learning-powered products. ##### Railway Railway also includes sandboxes for running untrusted code at scale, and it uses AI to make the process of shipping software effortless. The Railway agent is a chat-based assistant that lives inside your project, with all the context and tools it needs to diagnose errors, fix bugs, build new features, and ship them to users. The same underlying agent powers Railway's Slack and Discord notifications, where you can tag `@railway` and have it get to work without switching contexts. Railway's local and remote MCP servers also bring Railway context and tools into the agent harnesses you already use. #### When to pick each ##### Northflank Northflank is a great pick if your workloads require GPUs. Inference, model serving, and training are all supported, with fractional GPUs on the low end and H100 and B200 access on the high end. Northflank is also the right choice when compliance requirements demand BYOC or in-your-VPC deployment. Data residency rules or a mandate to keep workloads inside your own cloud account can rule out a fully managed platform entirely, and Northflank makes bringing your own cloud a self-serve action rather than gating it behind an enterprise sales process. Some teams simply want managed Kubernetes as their abstraction, and here Northflank shines. If your team is well staffed, already fluent in container orchestration, and looking for a control plane over their clusters instead of a replacement for them, Northflank fits how you already work. ##### Railway Pick Railway if you don't want to think about infrastructure. The platform can be operated by a software engineer with basic infrastructure knowledge and doesn't require specialized platform or DevOps expertise. Deploying from a repo requires zero configuration, there are no Kubernetes concepts or compute plans to learn, and monitoring and alerting work right out of the box. Because everything runs on Railway-owned hardware, there's only one vendor to vet and one bill to pay. Railway also shines if you don't want to think about scaling. Railway services bill on actual consumption rather than allocated capacity, and scale up and down automatically based on traffic. Idle services sleep to zero with serverless, so multi-service projects with variable load stay affordable without manual sizing of instances or tuning of autoscaling thresholds. Railway is further along on AI-assisted operation. Railway Agent diagnoses failed deploys and can open a PR with a fix, while the MCP server and agent skills mean something you vibe-coded with Claude Code, Cursor, or Codex can be deployed by the same agent that wrote it, database and all, with no Dockerfile step first. Railway Sandboxes go a step further and ship with Claude Code, Codex, and OpenCode preinstalled, so an agent can build and deploy without ever leaving Railway's infrastructure. #### Summary | Category | Northflank | Railway | | --- | --- | --- | | Infrastructure | Multi-tenant Kubernetes or BYOC into your cloud account | Railway-owned global hardware (Railway Metal) | | Kubernetes exposure | Intentional: plans map to cluster resources | None; custom orchestrator | | Billing basis | Per-second, on a selected compute plan | Per-minute, on resources actually consumed within your plan's ceiling | | Compute plan tiers | Fixed vCPU/GB tiers (for example, nf-compute-100-2) | No preset tiers; scales continuously up to plan limits | | Serverless sleep | Not offered | Idle services sleep with no compute charges | | Vertical scaling | Select a larger compute plan | Automatic to plan limits | | Horizontal scaling | Threshold-based autoscaling; requires tuning | Replicas with automatic traffic distribution | | Multi-region | Region configuration per service or cluster | Built-in; traffic routed to nearest region | | GPU support | Yes (fractional up to H100/B200) | No | | BYOC | Yes, self-serve | No | | Databases | Managed addons: PostgreSQL, MySQL, MongoDB, Redis, MinIO, RabbitMQ, Memcached | One-click: PostgreSQL, MySQL, Redis, MongoDB; more engines via the template directory | | Background workers | Dedicated worker service type | Any service without a public domain | | Sandboxes | MicroVM-backed (Kata, Firecracker, gVisor), built for untrusted/multi-tenant code execution | Isolated VMs with exec, fork, checkpoints, and network isolation modes; built for agent and dev workflows | | Observability | Logs and metrics retained 60 days; native log sinks to Datadog, Better Stack, Honeycomb, S3, and custom HTTP; audit logs | Metrics retained 30 days; configurable Observability Dashboard with log/metric widgets and monitors; forward logs via Vector, Fluent Bit, or OpenTelemetry | | Templates | Stack templates | Template directory with 25% creator kickbacks | | Free tier | Free Developer/Sandbox tier (2 services, 1 database, 2 cron jobs); payment method required to create resources | One-time $5 trial credit for 30 days, no card required; then Free plan with $1/month credit | | UI | Traditional dashboard | Real-time collaborative canvas | | AI capabilities | GPU hosting, microVM sandboxes for untrusted AI code execution | Railway Agent, MCP servers, agent skills, sandboxes for agent and dev workflows | #### Frequently asked questions ##### Is Railway cheaper than Northflank? It depends on the workload. Railway meters resource consumption per minute, so services that idle for part of the day, or sleep entirely with serverless, cost less than Northflank's fixed per-plan billing. For a service that's saturated 24/7 with nothing to scale down, Northflank's flat rate can come out ahead. See the pricing section above for a worked example. ##### Does Railway run on Kubernetes? No. Railway runs on Railway Metal, its own custom orchestration layer, so there are no Kubernetes concepts anywhere in the product. ##### Does Railway support background workers? Yes. Any service without a public domain works as a background worker, and services can be put on a cron schedule if they only need to run at specific times. ##### Does Railway support BYOC? No. Railway doesn't offer a bring-your-own-cloud option; all services run on Railway-owned infrastructure. ##### Does Railway support GPU workloads? No. Railway doesn't currently offer GPU instances. ##### Does Railway support AI workloads like inference or training? Not directly. Railway doesn't offer GPU compute, so inference and training workloads that need it are better suited to Northflank. ##### Does Railway have an AI assistant? Yes. Railway Agent is built into the dashboard and can create and configure services, set variables, connect databases, and diagnose failed deployments, including opening a pull request with a proposed fix. ##### Can I deploy an app built with Claude Code to Railway? Yes. Railway's MCP server and agent skills let Claude Code, Cursor, Codex, and Copilot deploy and operate Railway directly, so an agent that wrote the app can also deploy it and fix issues without leaving the conversation. #### Migrate from Northflank to Railway To get started, [create an account on Railway](https://railway.com/new). It's free, comes with $5 in trial credits, and doesn't require a payment method to get started. 1. Choose "Deploy from GitHub repo", connect your GitHub account, and select the repo you want to migrate. ![Railway onboarding, deploy from a GitHub repo](https://res.cloudinary.com/railway/image/upload/v1753470545/docs/comparison-docs/railway-onboarding-new-project_qqftnj.png) 2. If your project uses any environment variables or secrets: 1. Click the deployed service. 2. Navigate to the "Variables" tab. 3. Add a new variable by clicking "New Variable". Alternatively, import a `.env` file by clicking "Raw Editor" and adding all variables at once. ![Railway service environment variables](https://res.cloudinary.com/railway/image/upload/v1753470542/docs/comparison-docs/railway-service-environment-variables_hbvrct.png) 3. To make your project accessible over the internet, configure a domain: 1. From the project's canvas, click the service you want to configure. 2. Navigate to the "Settings" tab. 3. Go to the "Networking" section. 4. You can either: 1. Generate a Railway service domain: this makes your app available under a `.up.railway.app` domain. 2. Add a custom domain: follow the DNS configuration steps. If you're starting from scratch, check out the [Railway Quickstart](/quick-start). #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to Vercel Source: https://docs.railway.com/platform/compare-to-vercel.md Compare Railway and Vercel on infrastructure, pricing model and deployment experience, with a step-by-step migration guide. _Last updated: June 2026_ > Looking for a pricing-focused comparison? See [railway.com/compare/vercel](https://railway.com/compare/vercel). At a high level, both Railway and Vercel enable you to deploy your app without the hassle of managing infrastructure. Both platforms share several similarities: - Git-based automated deployments with support for instant rollbacks. - Automatic preview environments. - Built-in observability. - Autoscaling resources with usage-based pricing. That said, there are fundamental differences between both platforms, and certain use cases where Railway is a better fit. #### Understanding the underlying infrastructure and ideal use cases ##### Vercel’s infrastructure Vercel has developed a proprietary deployment model where infrastructure components are derived from the application code (see [Framework-defined infrastructure](https://vercel.com/blog/framework-defined-infrastructure)). At build time, application code is parsed and translated into the necessary infrastructure components. Server-side code is then deployed as serverless functions, powered by [AWS](https://aws.com) under the hood. To handle scaling, Vercel creates a new function instance for each incoming request with support for concurrent execution within the same instance (see [Fluid compute](https://vercel.com/docs/fluid-compute)). Over time, functions scale down to zero to save on compute resources. ![https://vercel.com/blog/introducing-fluid-compute](https://res.cloudinary.com/railway/image/upload/v1753470541/docs/comparison-docs/vercel-fluid-compute_kiitdu.png) This deployment model abstracts away infrastructure, but introduces limitations: - Memory limits: the maximum amount of memory per function is 4GB. - Execution time limit: the maximum amount of time a function can run is 800 seconds (~13.3 minutes). - SizeΒ (after gzip compression): the maximum is 250 MB. - Cold starts: when a function instance is created for the first time, there’s an amount of added latency. Vercel includes [several optimizations](https://vercel.com/docs/fluid-compute#bytecode-caching), which reduces cold start frequency but won’t completely eliminate them. If you plan on running long-running workloads such as: - Data Processing: ETL jobs, large file imports/exports, analytics aggregation. - Media Processing: Video/audio transcoding, image resizing, thumbnail generation. - Report Generation: Creating large PDFs, financial reports, user summaries. - DevOps/Infrastructure: Backups, CI/CD tasks, server provisioning. - Billing & Finance: Usage calculation, invoice generation, payment retries. - User Operations: Account deletion, data merging, stat recalculations. Or if you plan on running workloads that require a persistent connection such as: - Chat messaging: Live chats, typing indicators. - Live dashboards: Metrics, analytics, stock tickers. - Collaboration: Document editing, presence. - Live tracking: Delivery location updates. - Push notifications: Instant alerts. - Voice/video calls: Signaling, status updates. Then deploying your backend services to Vercel functions will not be the right fit. ##### Railway’s infrastructure Railway's underlying infrastructure runs on hardware that’s owned and operated in data centers across the globe. By controlling the hardware, software, and networking stack end to end, the platform delivers best-in-class performance, reliability, and powerful features, all while keeping costs in check. ![Railway regions](https://res.cloudinary.com/railway/image/upload/v1753470545/docs/comparison-docs/railway-regions_syr9jf.png) Railway uses a [custom builder](/builds) that takes your source code or Dockerfile and automatically builds and deploys it, without needing configuration. Your code runs on a long-running server, making it ideal for apps that need to stay running or maintain a persistent connection. All deployments come with smart defaults out of the box, but you can tweak things as needed. This makes Railway flexible across [different runtimes and programming languages](http://railway.com/deploy). Each service you deploy can automatically scale up vertically to handle incoming workload. You also get the option to horizontally scale a service by spinning up replicas. Replicas can be deployed in multiple regions simultaneously. You can also set services to start on a schedule using a crontab expression. This lets you run scripts at specific times and only pay for the time they’re running. #### Pricing model differences Both platforms follow a usage-based pricing model, but are different due to the underlying infrastructure. ##### Vercel Vercel functions are billed based on: - Active CPU: Time your code actively runs in milliseconds - Provisioned memory: Memory held by the function instance, for the full lifetime of the instance - Invocations: number of function requests, where you’re billed per request Each pricing plan includes a certain allocation of these metrics. This makes it possible for you to pay for what you use. However, since Vercel runs on AWS, the unit economics of the business need to be high to offset the cost of the underlying infrastructure. Those extra costs are then passed down to you as the user, so you end up paying extra for resources such as bandwidth, memory, CPU and storage. ##### Railway Railway follows a usage-based pricing model that depends on how long your service runs and the amount of resources it consumes. ``` Active compute time x compute size (memory and CPU) ``` ![railway usage-based pricing](https://res.cloudinary.com/railway/image/upload/v1753470546/docs/comparison-docs/railway-usage-based-pricing_efrrjn.png) If you spin up multiple replicas for a given service, you’ll only be charged for the active compute time for each replica. Railway also has a [serverless](/deployments/serverless) feature, which helps further reduce costs when enabled. When a service has no outbound requests for over 10 minutes, it is automatically put to sleep. While asleep, the service incurs no compute charges. It wakes up on the next incoming request, ensuring seamless reactivation without manual effort. This makes it ideal for sporadic or bursty workloads, giving you the flexibility of a full server with the cost efficiency of serverless, with the benefit of only paying when your code is running. #### Deployment experience ##### Vercel **Managing multiple services** In Vercel, a project maps to a deployed application. If you would like to deploy multiple apps, you’ll do it by creating multiple projects. ![Vercel dashboard](https://res.cloudinary.com/railway/image/upload/v1753470540/docs/comparison-docs/vercel-dashboard_rmb3st.png) **Integrating your application with external services** If you would like to integrate your app with other infrastructure primitives (e.g storage solutions for your application’s database, caching, analytical storage, etc.), you can do it through the Vercel marketplace. ![Vercel marketplace](https://res.cloudinary.com/railway/image/upload/v1753470543/docs/comparison-docs/vercel-marketplace_cwrir6.png) This gives you an integrated billing experience, however managing services is still done by accessing the original service provider. Making it necessary to switch back and forth between different dashboards when you’re building your app. ##### Railway **Managing projects** In Railway, a project is a collection of services and databases. This can include frontend, API, background workers, analytics database, queues and so much more. All in a unified deployment experience that supports real-time collaboration. ![Railway canvas](https://res.cloudinary.com/railway/image/upload/v1737785173/docs/the-basics/project_canvas_dxpzxe.png) **Databases** Additionally, Railway has first-class support for Databases. You can one-click deploy any open-source database: - Relational: Postgres, MySQL - Analytical: ClickHouse, ParadeDB, Timescale - Key-value: Redis, Dragonfly - Vector: Chroma, Weaviate - Document: MongoDB Check out all of the [different storage solutions](https://railway.com/deploy?category=Storage) you can deploy. Template directory Finally, Railway offers a template directory that makes it easy to self-host open-source projects with just a few clicks. If you publish a template and others deploy it in their projects, you’ll earn a 25% kickback of their usage costs. Check out all templates at [railway.com/deploy](http://railway.com/deploy) #### Summary | Feature | Railway | Vercel | | ---------------------- | ------------------------------------------------------------------- | ------------------------------------------------------ | | Infrastructure Model | Long-running servers on dedicated hardware | Serverless functions on AWS | | Scaling | Vertical + horizontal scaling with replicas | Scales via stateless function instances | | Persistent Connections | βœ… Yes (sockets, live updates, real-time apps) | ❌ Unsupported | | Cold Starts | ❌ No cold starts | ⚠️ Possible cold starts (with optimizations) | | Max Memory Limit | Up to full machine capacity | 4GB per function | | Execution Time Limit | Unlimited (as long as the process runs) | 800 seconds (13.3 minutes) | | Databases | Built-in one-click deployments for major databases | Integrated via marketplace (external providers) | | Project Structure | Unified project: multiple services + databases in one | One service per project | | Usage-Based Billing | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage | $20 per user/month plus usage; active CPU $0.128/hour, plus provisioned memory and invocations | | Ideal For | Fullstack apps, real-time apps, backend servers, long-running tasks | Frontend-first apps, short-lived APIs | | Support for Docker | βœ… Yes | ❌ No (function-based only) | #### Frequently asked questions ##### Should I deploy my backend on Railway or Vercel? If your backend needs persistent connections (websockets, live dashboards, chat) or long-running work (ETL, media processing, report generation), Railway is the better fit: services run on long-running servers with no 800-second execution limit, no 4 GB memory cap, and no cold starts. Your frontend, static or server-rendered, can deploy on Railway alongside that backend, so most teams don't need a second platform. For frontend-first apps with short-lived APIs, Vercel's serverless functions also work well. ##### Does Railway have cold starts like Vercel? No. Railway services run on long-running servers, so there's no function instance to spin up per request. Vercel includes optimizations like bytecode caching that reduce cold start frequency, but they can't be completely eliminated. ##### Is Railway cheaper than Vercel? Generally, yes. Vercel's Pro plan is $20 per user/month plus usage charges (active CPU at $0.128/hour, plus provisioned memory and invocations), while Railway Pro is a $20/month usage minimum with unlimited workspace seats included, not a per-user fee. Railway bills $20/vCPU-month, $10/GB-month RAM, and $0.05/GB egress, charged per second of actual usage. And because your static site or frontend can host on Railway next to your backend and database, you only need one platform instead of two. ##### Can I run Docker containers on Vercel? No, Vercel is function-based only; your code is parsed at build time and deployed as serverless functions. Railway can deploy directly from a Docker image or Dockerfile, in addition to building from source. #### Migrate from Vercel to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. ##### Deploying your app 1. β€œChoose Deploy from GitHub repo”, connect your GitHub account, and select the repo you would like to deploy. ![Railway onboarding new project](https://res.cloudinary.com/railway/image/upload/v1753470545/docs/comparison-docs/railway-onboarding-new-project_qqftnj.png) 2. If your project is using any environment variables or secrets: 1. Click on the deployed service. 2. Navigate to the β€œVariables” tab. 3. Add a new variable by clicking the β€œNew Variable” button. Alternatively, you can import a `.env` file by clicking β€œRaw Editor” and adding all variables at once. ![Railway environment variables](https://res.cloudinary.com/railway/image/upload/v1753470542/docs/comparison-docs/railway-service-environment-variables_hbvrct.png) 3. To make your project accessible over the internet, you will need to configure a domain: 1. From the project’s canvas, click on the service you would like to configure. 2. Navigate to the β€œSettings” tab. 3. Go to the β€œNetworking” section. 4. You can either: 1. Generate a Railway service domain: this will make your app available under a `.up.railway.app` domain. 2. Add a custom domain: follow the DNS configuration steps. #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to DigitalOcean Source: https://docs.railway.com/platform/compare-to-digitalocean.md Compare Railway and DigitalOcean App Platform on infrastructure, pricing model and deployment experience, with a step-by-step migration guide. _Last updated: June 2026_ > See how Railway compares to other platforms at [railway.com/compare](https://railway.com/compare). At a high level, both Railway and DigitalOcean App Platform can be used to deploy your app. Both platforms share many similarities: - You can deploy your app from a Docker image or by importing your app’s source code from GitHub. - Multi-service architecture where you can deploy different services under one project (e.g. a frontend, APIs, databases, etc.). - Services are deployed to a long-running server. - Public and private networking are included out-of-the-box. - Healthchecks are available to guarantee zero-downtime deployments. - Connect your GitHub repository for automatic builds and deployments on code pushes. - Support for instant rollbacks. - Integrated metrics and logs. - Define Infrastructure-as-Code (IaC). - Command-line-interface (CLI) to manage resources. - Integrated build pipeline with the ability to define pre-deploy command. - Support for wildcard domains. - Custom domains with fully managed TLS. - Run arbitrary commands against deployed services (SSH). - Shared environment variables across services. - Both platforms’ infrastructure runs on hardware that’s owned and operated in data centers across the globe. That said, there are some differences between the platforms that might make Railway a better fit for you. #### Scaling strategies ##### DigitalOcean app platform DigitalOcean App Platform follows a traditional, instance-based model. Each instance has a set of allocated compute resources (memory and CPU). In the scenario where your deployed service needs more resources, you can either scale: - Vertically: you will need to manually upgrade to a large instance size to unlock more compute resources. - Horizontally: your workload will be distributed across multiple running instances. You can either: - Manually specify the machine count. - Autoscale by defining a minimum and maximum instance count. The number of running instances will increase/decrease based on a target CPU and/or memory utilization you specify. The main drawback of this setup is that it requires manual developer intervention. Either by: - Manually changing instance sizes/running instance count. - Manually adjusting thresholds because you can get into situations where your service scales up for spikes but doesn’t scale down quickly enough, leaving you paying for unused resources. Beyond scaling, there are other notable limitations. DigitalOcean App Platform doesn’t natively support multi-region deployments. To achieve that, you must create separate instances in different regions and set up an external load balancer to route traffic appropriately. Furthermore, services deployed to the platform do not offer persistent data storage. Any data written to the local filesystem is ephemeral and will be lost upon redeployment, meaning you'll need to integrate with external storage solutions if your application requires data durability. ##### Railway Railway automatically manages compute resources for you. Your deployed services can scale up or down based on incoming workload without manual configuration of metrics/thresholds or picking instance sizes. Each plan includes defined CPU and memory limits that apply to your services. You can scale horizontally by deploying multiple replicas of your service. Railway automatically distributes public traffic randomly across replicas within each region. Each replica runs with the full resource limits of your plan. For example, if you're on the Pro plan, each replica gets 24 vCPU and 24 GB RAM. So, deploying 3 replicas gives your service a combined capacity of 72 vCPU and 72 GB RAM. ```bash Total resources = number of replicas Γ— maximum compute allocation per replica ``` Replicas can be placed in different geographical locations for multi-region deployments. The platform automatically routes public traffic to the nearest region, then randomly distributes requests among the available replicas within that region. No need to define compute usage thresholds. You can also set services to start on a schedule using a crontab expression. This lets you run scripts at specific times and only pay for the time they’re running. #### Pricing ##### DigitalOcean app platform DigitalOcean App Platform follows a traditional, instance-based pricing. You select the amount of compute resources you need from a list of instance sizes where each one has a fixed monthly price. ![DigitalOcean App Platform instances](https://res.cloudinary.com/railway/image/upload/v1753470539/docs/comparison-docs/digital-ocean-instances_rdnbq1.png) While this model gives you predictable pricing, the main drawback is you end up in one of two situations: - Under-provisioning: your deployed service doesn’t have enough compute resources which will lead to failed requests. - Over-provisioning: your deployed service will have extra unused resources that you’re overpaying for every month. Enabling horizontal autoscaling can help with optimizing costs, but the trade-off will be needing to figure out the right amount of thresholds instead. ##### Railway Railway automatically scales your infrastructure up or down based on workload demands, adapting in real time without any manual intervention. This makes it possible to offer a usage-based pricing model that depends on active compute time and the amount of resources it consumes. You only pay for what your deployed services use. ``` Active compute time x compute size (memory and CPU) ``` You don’t need to think about instance sizes or manually configure them. All deployed services scale automatically. ![Railway usage-based pricing](https://res.cloudinary.com/railway/image/upload/v1753470546/docs/comparison-docs/railway-usage-based-pricing_efrrjn.png) If you spin up multiple replicas for a given service, you’ll only be charged for the active compute time for each replica. Railway also has a [serverless](/deployments/serverless) feature, which helps further reduce costs when enabled. When a service has no outbound requests for over 10 minutes, it is automatically put to sleep. While asleep, the service incurs no compute charges. It wakes up on the next incoming request, ensuring seamless reactivation without manual effort. This is ideal for workloads with sporadic or bursty traffic, so you only pay when your code is running. #### Developer workflow & CI/CD ##### DigitalOcean app platform DigitalOcean App Platform’s dashboard offers a traditional dashboard where you can view all of your project’s resources. ![DigitalOcean App Platform dashboard](https://res.cloudinary.com/railway/image/upload/v1753470539/docs/comparison-docs/digitalocean-dashboard_juxsoh.png) However, DigitalOcean App Platform lacks built-in CI/CD capabilities around environments: - No concept of β€œenvironments” (e.g., development, staging, and production). To achieve proper environment isolation, you must create separate projects for each environment. - No native support for automatically creating isolated preview environments for every pull request. To achieve this, you'll need to integrate third-party CI/CD tools like [GitHub Actions](https://github.com/features/actions). Finally, DigitalOcean App Platform doesn't support webhooks, making it more difficult to build integrations with external services. ##### Railway Railway’s dashboard offers a real-time collaborative canvas where you can view all of your running services and databases at a glance. You can group the different infrastructure components and visualize how they’re related to one another. ![Railway canvas](https://res.cloudinary.com/railway/image/upload/v1737785173/docs/the-basics/project_canvas_dxpzxe.png) Additionally, Railway offers a template directory that makes it easy to self-host open-source projects with just a few clicks. If you publish a template and others deploy it in their projects, you’ll earn a 25% kickback of their usage costs. Check out all templates at [railway.com/deploy](http://railway.com/deploy) #### Summary | **Category** | **DigitalOcean App Platform** | **Railway** | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | | **Scaling Model** | Manual instance-based scaling | Fully automated scaling | | **Vertical Scaling** | Manual upgrade to larger instance | N/A – no instance sizes to manage | | **Horizontal Scaling** | Manually add/remove instances or autoscaling (based on CPU/memory thresholds); requires tuning | Deploy multiple replicas; traffic auto-distributed; no thresholds required | | **Multi-region Support** | Manual via separate instances and load balancers | Built-in support; traffic routed to nearest region | | **Persistent volumes** | Not supported | Supported | | **Pricing Model** | Fixed monthly pricing per instance size; Droplets from $4/mo, App Platform from $5/mo per component | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage | | **Cost Optimization** | Requires tuning to avoid over/under-provisioning | Inherently optimized. Pay only for used compute | | **Developer Dashboard** | Traditional project dashboard | Real-time collaborative canvas with visual service layout | | **Environments & CI/CD** | No native concept of environments, requires manual project setup. Automated preview deployments not supported. Webhooks not supported | Native support for preview environments, CI/CD integrations, and webhooks | | **Templates & Ecosystem** | Limited | Extensive template directory; creators can earn from deployed usage | #### Frequently asked questions ##### Is Railway cheaper than DigitalOcean App Platform? For a single small, fully-utilized instance, DigitalOcean's fixed pricing (App Platform components from $5/mo, Droplets from $4/mo) can be cheaper and easier to forecast. As you scale, Railway tends to be more cost-effective: DigitalOcean charges per component provisioned, so every service, worker, and environment adds a fixed line item whether it's busy or idle, while Railway bills $20/vCPU-month and $10/GB-month RAM per second of aggregate actual usage with no per-service charge. A ten-service project on Railway costs what those services actually consume, not ten instance fees. ##### Does DigitalOcean App Platform support persistent storage? No. Services on App Platform have an ephemeral filesystem, so data written locally is lost on redeploy and you need external storage solutions for durability. Railway supports persistent volumes ($0.15/GB-month) for services that need to keep data on disk. ##### Can I get preview environments on DigitalOcean App Platform? Not natively. App Platform has no concept of environments and no automatic preview environments per pull request, so you'd set up separate projects and third-party CI/CD tools like GitHub Actions. Railway includes environments and isolated preview environments for every pull request out of the box. ##### How do I migrate from DigitalOcean App Platform to Railway? Both platforms deploy from a GitHub repo or Docker image, so migration is mostly connecting your repo, copying environment variables, and configuring a domain; the steps below walk through it. You can sign up for free and receive $5 in credits to try the platform first. #### Migrate from DigitalOcean app platform to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. ##### Deploying your app 1. β€œChoose Deploy from GitHub repo”, connect your GitHub account, and select the repo you would like to deploy. ![Railway onboarding new project](https://res.cloudinary.com/railway/image/upload/v1753470545/docs/comparison-docs/railway-onboarding-new-project_qqftnj.png) 2. If your project is using any environment variables or secrets: 1. Click on the deployed service. 2. Navigate to the β€œVariables” tab. 3. Add a new variable by clicking the β€œNew Variable” button. Alternatively, you can import a `.env` file by clicking β€œRaw Editor” and adding all variables at once. ![Railway environment variables](https://res.cloudinary.com/railway/image/upload/v1753470542/docs/comparison-docs/railway-service-environment-variables_hbvrct.png) 3. To make your project accessible over the internet, you will need to configure a domain: 1. From the project’s canvas, click on the service you would like to configure. 2. Navigate to the β€œSettings” tab. 3. Go to the β€œNetworking” section. 4. You can either: 1. Generate a Railway service domain: this will make your app available under a `.up.railway.app` domain. 2. Add a custom domain: follow the DNS configuration steps. #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to Replit Source: https://docs.railway.com/platform/compare-to-replit.md Compare Railway and Replit on development workflow, infrastructure control, scaling, and production readiness, with a step-by-step migration guide. _Last updated: June 2026_ > See how Railway compares to other platforms at [railway.com/compare](https://railway.com/compare). At a high level, both Railway and Replit can be used to deploy web applications. Both platforms share some similarities: - Deploy web applications from code with public URLs. - Provide database access (Replit Database and Replit PostgreSQL vs. Railway managed databases). - Browser-based interfaces for managing your projects. - Support for environment variables and secrets. That said, there are some fundamental differences between the platforms that might make Railway a better fit for you. #### Development environment ##### Replit Replit is an AI-powered IDE combined with hosting. You write code in Replit's browser-based editor, use AI code generation to build features, and deploy from the same interface. Everything lives in one place. This makes Replit a strong choice for prototyping, learning to code, and building small projects quickly. The tight integration between editor and hosting removes friction when you're getting started. ##### Railway Railway is a cloud provider for deploying and running applications. You bring your own code, your own IDE, and your own development workflow. Railway connects to your GitHub repository and handles the build, deploy, and hosting steps. This separation means you can use any editor (VS Code, JetBrains, Vim, etc.), any language, and any framework. Your development environment is not tied to your hosting provider. #### Infrastructure control ##### Replit Replit gives you a single container per project. You deploy one application, and Replit manages the underlying resources. There is no concept of multi-service architecture within a single project. If your application needs a background worker, a database, and an API, you would need to manage those as separate Replit projects or use external services. ##### Railway Railway gives you full control over your infrastructure within a project. A single project can contain multiple services, managed databases, cron jobs, and volumes, all connected through private networking. For example, you can deploy a frontend, an API, a background worker, a PostgreSQL database, and a Redis instance in one project. Services communicate over a private network, and you manage everything from a single canvas view. You also have the option to use custom Dockerfiles, define pre-deploy commands, and configure health checks for each service independently. #### Scaling ##### Replit Replit offers limited scaling options. Paid plans unlock more compute (CPU and RAM), but there is no horizontal scaling. If your application needs to handle more traffic, you can upgrade to a higher plan for more resources, but you cannot run multiple instances of your application behind a load balancer. ##### Railway Railway uses usage-based scaling. Your services automatically scale vertically based on the resources they consume, up to the limits of your plan. You can also scale horizontally by deploying multiple replicas of a service. Railway distributes traffic across replicas automatically. Replicas can be placed in different regions for multi-region deployments, with traffic routed to the nearest region. For low-traffic services, Railway offers a [serverless](/deployments/serverless) mode that puts services to sleep when idle and wakes them on the next incoming request. You only pay for compute time when the service is actively running. #### Pricing ##### Replit Replit uses subscription-based pricing. You choose a plan (Core for individuals, Teams for collaboration) and pay a fixed monthly fee. Each plan includes a set amount of compute resources. If you need more, you upgrade to a higher tier. ##### Railway Railway uses usage-based pricing. You pay for the compute time and resources your services actually consume. ``` Active compute time x compute size (memory and CPU) ``` There are no fixed instance sizes to choose from. All services scale automatically within your plan's limits, and you are billed based on what they use. This avoids both over-provisioning (paying for idle resources) and under-provisioning (running out of resources during traffic spikes). #### Production readiness ##### Replit Replit is designed primarily for development and prototyping. It provides basic hosting and deployment, but lacks several features that production applications typically require: - No private networking between services. - No pre-deploy commands or migration support. - No zero-downtime deployments or rollback support. - Limited observability (basic logs, no integrated metrics). - No health check configuration. ##### Railway Railway is designed for running production workloads. It includes: - **Observability**: integrated logs and metrics for all services. - **Private networking**: services within a project communicate over a private network, not the public internet. - **Pre-deploy commands**: run database migrations or other setup steps before traffic is routed to a new deployment. - **Health checks**: configure HTTP health checks to verify a service is ready before it receives traffic. - **Zero-downtime deployments**: new deployments are brought up alongside the existing one, and traffic switches only after the new deployment passes health checks. - **Rollbacks**: instantly roll back to a previous deployment if something goes wrong. #### Database support ##### Replit Replit offers Replit Database (a simple key-value store) and Replit PostgreSQL. These are useful for prototyping and small projects, but come with limited management tools and no advanced features like backups or monitoring tools. ##### Railway Railway provides managed PostgreSQL, MySQL, Redis, and MongoDB. Each database includes: - Point-in-time backups. - Connection pooling (for PostgreSQL). - Database metrics and monitoring. - Private networking to your application services. - Persistent volumes for data durability. #### Summary | **Category** | **Replit** | **Railway** | | -------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | **Primary focus** | AI-powered IDE + hosting | Cloud provider for deploying and running applications | | **Development environment**| Integrated browser IDE with AI code generation | Bring your own IDE and workflow; Railway handles deployment and hosting | | **Infrastructure control** | Single container per project; no multi-service architecture | Multiple services, databases, cron jobs, and volumes per project with private networking | | **Vertical scaling** | Upgrade to a higher plan for more resources | Auto-scales based on usage within plan limits | | **Horizontal scaling** | Not supported | Multiple replicas with automatic load balancing across regions | | **Pricing model** | Subscription plans with fixed tiers, plus usage-based Agent/compute charges | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage | | **Database options** | Replit Database (key-value) and Replit PostgreSQL | Managed PostgreSQL, MySQL, Redis, MongoDB with backups and database views | | **Private networking** | Not available | Included for all projects | | **Zero-downtime deploys** | Not supported | Supported with health checks and automatic traffic switching | | **Rollbacks** | Not supported | Instant rollback to any previous deployment | | **Observability** | Basic logs | Integrated logs and metrics | | **Pre-deploy commands** | Not supported | Supported for migrations and setup tasks | | **Best suited for** | Prototyping, learning, AI-assisted development | Production applications, multi-service architectures, teams with existing development workflows | #### Frequently asked questions ##### Can Replit apps run in production? They can, but Replit is designed primarily for development and prototyping. It lacks several features production applications typically rely on: private networking between services, zero-downtime deployments, rollbacks, health checks, and integrated metrics. Railway includes all of these, which is why many teams prototype on Replit and move to Railway when the app needs to serve real traffic. ##### Is Railway a replacement for Replit? Not exactly; they solve different problems. Replit is an AI-powered IDE with hosting bundled in, while Railway is a cloud provider that deploys code you bring from your own editor and GitHub workflow. If you want to keep coding in Replit but need production-grade hosting, you can do both. ##### How do I move my Replit app to Railway? Push your code to a GitHub repository, then connect that repo to a new Railway project and copy over your environment variables. You can sign up for free and receive $5 in credits, and the [step-by-step migration guide](/platform/migrate-from-replit) walks through the details. ##### When should I use Replit instead of Railway? For prototyping, learning to code, and building small projects quickly, Replit's integrated browser IDE with AI code generation removes a lot of friction. If you don't need multi-service architecture, horizontal scaling, or production deployment features yet, Replit's all-in-one environment is a strong choice. #### Migrate from Replit to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. For a step-by-step walkthrough, see [Migrate from Replit to Railway](/platform/migrate-from-replit). #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to Lovable Source: https://docs.railway.com/platform/compare-to-lovable.md Compare Railway and Lovable on what they do, infrastructure control, and production readiness, with a step-by-step migration guide. _Last updated: June 2026_ > See how Railway compares to other platforms at [railway.com/compare](https://railway.com/compare). Lovable and Railway are both fantastic products, and they share some similarities: both can deploy a web application to the internet, connect to a database to store your data, handle environment variables and configuration, and set up a custom domain. But they're ultimately different tools for solving different problems. Lovable is built to take you from zero to one. You describe what you want, and it writes the code and hosts the result. The value is in the high-quality code that Lovable generates from human language. Railway takes over from there: you bring the code, and Railway handles everything you need to run and scale that application reliably as it grows, including packaging, infrastructure, deployment, and observability. In this piece, we'll go a bit deeper on what each platform does best. #### Application code generation ##### Lovable Lovable generates application code from natural language prompts. You describe a feature, a screen, or even a whole product, and Lovable builds it. This makes it an excellent choice to go from an idea to something working. ![Building an app with Lovable from a natural language prompt](https://res.cloudinary.com/railway/image/upload/v1781276987/docs/external-images/lovable-trains_ohrpjm.png) ##### Railway Railway comes with a coding agent that can help with project and service configurations, debugging, and some lighter-weight coding tasks. #### Deployment and hosting Once your app is written, the code needs to be packaged, deployed to the cloud, and made available to users at a URL. ##### Lovable Hosting is included in Lovable as part of the core product experience. For getting something live quickly, it works great, but there is limited control over performance issues, and rollbacks are code-only. You can't control the underlying deployment environment. This is generally fine for prototypes, but when you have real users who expect things to work across updates, it can become a significant drawback. ##### Railway Railway gives you full control over how your application is deployed and served, which is important as you scale. As new code goes out, health checks verify that deployments are actually working before they receive traffic. Your app stays up during updates thanks to Railway's rolling updates, and if something does go wrong, rollbacks let you get back to a known good state in seconds with no data loss. ![Rolling back a deployment on Railway](https://res.cloudinary.com/railway/image/upload/v1645149734/docs/rollback_mhww2u.png) #### Databases A database is where your application stores and retrieves data: user accounts, posts, orders, anything that needs to persist between sessions. ##### Lovable Lovable includes a built-in backend option called Lovable Cloud, which handles your database, authentication, and file storage without leaving the platform. You can also connect an external Supabase account if you want more control, but that means another login, another vendor to pay as you scale, and another place to look when something breaks. ##### Railway Railway includes multiple native database options depending on the needs of your application, including PostgreSQL, MySQL, Redis, and MongoDB. You can add one to your project in a few clicks, and it will live on the same private network as your application, with automatic backups and a query view in the dashboard so you can browse your data without leaving Railway. ![Database query view in the Railway dashboard](https://res.cloudinary.com/railway/image/upload/v1701904581/docs/databases/dataTab_vtj7me.png) #### Scaling As demand on your application grows, either because of more users, sales, or anything else your app does, the infrastructure behind it needs to grow in size to accommodate the higher traffic. ##### Lovable Lovable deploys a single application. There's no visibility into how it is performing under load, and no way to scale it as your user base grows and demands higher throughput or more compute power. ##### Railway Railway lets you scale vertically by giving a service more CPU or memory, and horizontally by running multiple copies of it simultaneously. When traffic spikes, Railway distributes requests across those copies automatically. A project can contain multiple services, each independently scalable: a frontend, an API, a background worker, a database. They communicate over private networking, so they stay fast and isolated from the public internet. ![Multiple services on the Railway project canvas](https://res.cloudinary.com/railway/image/upload/v1737785173/docs/the-basics/project_canvas_dxpzxe.png) #### Observability and debugging Observability means being able to see what is happening inside your running application. Without it, you only find out something is broken when a user tells you. ##### Lovable Lovable offers limited visibility into running applications, with no full logs or metrics. If something breaks or slows down in production, there's little to help you see what happened or when. ##### Railway Railway includes logs, metrics, and a full deployment history. You can see every request, every error, and CPU and memory usage over time. When something goes wrong, you can trace it back to a specific deploy and roll it back. ![Railway log explorer](https://res.cloudinary.com/railway/image/upload/v1694194133/docs/log-explorer_nrlong.png) #### Pricing ##### Lovable Lovable uses subscription tiers based on the number of prompts and the features included in your plan. This works well if you're building at a steady pace, but unused prompts don't roll over, so a slow month means you're just paying for nothing. ##### Railway Railway uses usage-based pricing, which means you only pay for active compute time and the resources your services consume. This works well for real apps with real usage patterns, as costs scale with your app's traffic. #### Using Lovable and Railway together Lovable and Railway work well as a team. You can build and iterate in Lovable, push the code to GitHub, and deploy on Railway for production hosting. Once that connection is in place, every push Lovable makes to your GitHub repo triggers a new deploy on Railway automatically. You get the speed of AI-assisted development with the reliability of production-grade infrastructure underneath it. See [Deploy a Lovable App on Railway](/guides/lovable) to get started. #### Summary | **Category** | **Lovable** | **Railway** | | --------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | | **Primary purpose** | AI code generation from natural language prompts | Cloud hosting and infrastructure for your code | | **Code source** | Generated by the platform | Bring your own (GitHub, CLI, Docker) | | **Infrastructure control** | Minimal; managed by the platform | Full control over runtime, networking, scaling, and deployment | | **Multi-service support** | Single application only | Multiple services, workers, cron jobs in one project | | **Database support** | Built-in (Lovable Cloud) or external Supabase | Managed PostgreSQL, MySQL, Redis, MongoDB with backups and database views | | **Observability** | Limited | Logs, metrics, and deployment history | | **Zero-downtime deploys** | No | Yes | | **Rollbacks** | No | Yes | | **Health checks** | No | Yes | | **Custom domains with TLS** | Limited | Fully managed, including wildcard domains | | **Pricing model** | Subscription-based (per plan) | Usage-based (pay for compute time and resources consumed) | | **Best for** | Generating and prototyping apps with AI | Production hosting with full infrastructure control | #### Migration path If you're ready to move your Lovable app to Railway, just connect your GitHub repo, import your environment variables, and configure your domain. See [Migrate from Lovable to Railway](/platform/migrate-from-lovable) for a step-by-step guide. #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to Bolt Source: https://docs.railway.com/platform/compare-to-bolt.md Compare Railway and Bolt on what they do, infrastructure control, and production readiness, with a step-by-step migration guide. _Last updated: June 2026_ > See how Railway compares to other platforms at [railway.com/compare](https://railway.com/compare). Bolt (bolt.new) is an AI-powered development tool that generates full-stack web applications from prompts. Railway is an intelligent cloud provider that deploys and hosts your code. While they serve different purposes, there is some overlap: - Deploy web applications - Provide hosting with public URLs - Environment variable support These tools can complement each other: use Bolt for code generation, then deploy on Railway for production hosting. #### What they do ##### Bolt Bolt generates code from prompts directly in the browser. You describe what you want, and it builds a full-stack application for you. Once generated, you can deploy through Bolt's built-in hosting, export the code to GitHub, or download it as a zip file. Bolt is a code generation tool first and a hosting platform second. It is well suited for rapid prototyping and getting an application started quickly. ##### Railway Railway deploys and hosts code from any source, including GitHub, the CLI, or Docker images. You bring the code, and Railway handles the infrastructure. Railway does not generate code for you. Instead, it focuses on giving you full control over how your application runs in production. #### Infrastructure control ##### Bolt Bolt provides basic hosting for the applications it generates. There is no support for multi-service architecture, managed databases, private networking, persistent volumes, or cron jobs. If your application needs a database, you typically rely on an external service. ##### Railway Railway gives you full control over your infrastructure. A single project can contain multiple services (API, frontend, workers, cron jobs) plus managed databases, all communicating over private networking. Key infrastructure capabilities include: - Managed databases: PostgreSQL, MySQL, Redis, and MongoDB with backups and database views. - Persistent volumes for data storage. - Private networking between services. - Custom Dockerfiles for full build control. - Cron jobs for scheduled tasks. - Horizontal scaling with multiple replicas. #### Production readiness ##### Bolt Bolt's hosting is designed for getting your generated application online quickly. It offers limited observability and does not include health checks, zero-downtime deployments, or rollbacks. ##### Railway Railway is built for production workloads. Deployed services include: - Observability with integrated metrics and logs. - Health checks to verify service availability. - Zero-downtime deployments so updates don't interrupt traffic. - Instant rollbacks to revert to a previous deployment. - Pre-deploy commands for running migrations or setup steps. - Custom domains with fully managed TLS. #### Pricing ##### Bolt Bolt uses subscription-based pricing with plans that include a set number of prompts. You pay for access to the AI code generation features. ##### Railway Railway uses usage-based pricing. You pay for compute time and the resources your services consume. ``` Active compute time x compute size (memory and CPU) ``` There are no prompt limits or generation caps. You pay only for the infrastructure your applications use. #### Summary | **Category** | **Bolt** | **Railway** | | -------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | | **Primary function** | AI code generation with basic hosting | Cloud hosting with full infrastructure control | | **Code source** | Generated from prompts in the browser | Bring your own code from GitHub, CLI, or Docker | | **Multi-service projects** | Single application deployment | Multiple services, workers, and cron jobs in one project | | **Database support** | Relies on external database services | Managed PostgreSQL, MySQL, Redis, and MongoDB | | **Private networking** | Not available | Included at no extra cost | | **Persistent storage** | Not available | Persistent volumes supported | | **Health checks** | Not available | Supported with configurable endpoints | | **Zero-downtime deploys** | Not available | Supported when health checks are configured | | **Rollbacks** | Not available | Instant rollback to any previous deployment | | **Observability** | Limited | Integrated metrics and logs | | **Pricing model** | Token-based subscription plans with prompt limits | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage | | **Best for** | Rapid prototyping and generating application code quickly | Production hosting with full infrastructure control | #### When to use each - **Use Bolt** when you want AI to generate code quickly for prototyping or getting a project started. - **Use Railway** when you need production hosting with full infrastructure control, managed databases, and multi-service architecture. - **Use both together**: generate your application with Bolt, export the code to GitHub, and deploy it on Railway for production. #### Frequently asked questions ##### Can Bolt.new apps run in production? Bolt's built-in hosting is designed for getting a generated app online quickly, not for production traffic. It offers limited observability and no health checks, zero-downtime deployments, or rollbacks. For apps that need those guarantees, the usual path is to export the code to GitHub and host it on a platform like Railway. ##### How do I deploy a Bolt.new app to Railway? Export your generated code from Bolt to GitHub (or download it as a zip and push it yourself), then connect that repo to a new Railway project. You can sign up for free and receive $5 in credits, and the [step-by-step migration guide](/platform/migrate-from-bolt) covers the details. ##### Does Bolt.new include a database? No, Bolt has no managed databases, so applications that need one typically rely on an external service. Railway includes managed PostgreSQL, MySQL, Redis, and MongoDB with backups, connected to your services over private networking. ##### When is Bolt.new the better choice? When you want AI to generate a full-stack application from a prompt and get a prototype running quickly, Bolt is built exactly for that. The two tools work well together: generate with Bolt, then deploy on Railway when the project needs production infrastructure. #### Migrate from Bolt to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. For a step-by-step walkthrough, see [Migrate from Bolt to Railway](/platform/migrate-from-bolt). #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. ### Compare to VPS Source: https://docs.railway.com/platform/compare-to-vps.md Compare Railway and VPS hosting on infrastructure management, security, monitoring, pricing, and operational overhead, with a step-by-step migration guide. _Last updated: June 2026_ > See how Railway compares to other platforms at [railway.com/compare](https://railway.com/compare). At a high level, both Railway and a VPS (Virtual Private Server) can be used to deploy applications. The fundamental difference lies in the level of abstraction and operational overhead you're willing to manage. VPS hosting providers like [AWS EC2](https://aws.amazon.com/ec2/), [DigitalOcean Droplets](https://www.digitalocean.com/products/droplets), [Hetzner Cloud](https://www.hetzner.com/cloud), [Linode](https://www.linode.com/), or [Vultr](https://www.vultr.com/) give you a virtual machine where you have full control over the operating system, software stack, and configuration. This offers maximum flexibility but requires significant DevOps expertise and ongoing maintenance. Railway provides a fully managed platform that abstracts away infrastructure complexity while giving you the flexibility of a dedicated environment. You get VPS-level control without the operational burden. #### Quick comparison: VPS VS. Railway | Dimension | VPS Hosting | Railway | | -------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------- | | **Infrastructure** | Full responsibility: OS setup, patches, SSL, firewalls, scaling | Zero-config deploy, managed OS/security, built-in scaling | | **Security & Compliance** | Manual hardening, audits, SOC 2/ISO require major effort | SOC 2 Type II, GDPR, MFA, automatic patches, DDoS protection | | **Monitoring & Logging** | Must integrate Prometheus/Grafana/ELK manually | Built-in observability, logs, metrics, dashboards, alerting | | **Scaling & Distribution** | Manual vertical/horizontal scaling, DNS/load balancer setup, complex multi-region | Auto vertical/horizontal scaling, multi-region deploy with one click | | **Pricing Model** | Fixed monthly price per server (e.g. $5-$50/mo) plus your operations time | $20/vCPU-month, $10/GB-month RAM, billed per second of actual usage; serverless sleeping | | **Workflow & Deployment** | Manual CI/CD setup, manual rollbacks, secrets management | GitHub integration, preview envs, instant rollback, managed secrets | #### Infrastructure & operational overhead ##### VPS hosting When you choose VPS hosting, you're essentially becoming your own infrastructure team. This means taking full responsibility for: **Server Setup & Configuration** * Installing and configuring the operating system (Ubuntu, CentOS, Debian, etc.) * Applying security patches and system updates * Configuring firewalls, SSH access, and user management * Installing and configuring web servers (Nginx, Apache) * Setting up reverse proxies and load balancers * Managing SSL certificates and renewals **Application Environment Management** * Installing/managing programming runtimes (Node.js, Python, Go, etc.) * Setting up process managers (PM2, systemd, supervisor) * Configuring environment variables and secrets management * Managing database installs/configs (MySQL, Postgres, MongoDB, etc.) * Setting up caching layers (Redis, Memcached) **System Administration** * Monitoring disk space, memory usage, CPU performance * Managing log rotation and aggregation * Automated backups and disaster recovery planning * Applying vulnerability patches * DNS configuration and domain setup You’ll need to continuously maintain and update this stack, troubleshoot outages, and scale resources as needed. ##### Railway Railway eliminates this operational burden: **Zero-Configuration Deployment** * Deploy directly from GitHub with automatic builds ![Railway deployment from GitHub](https://res.cloudinary.com/railway/image/upload/v1758247839/docs/new-project_gruqxh.png) * Auto-detects dependencies and installs them * Built-in support for major programming languages and frameworks * Automatic SSL provisioning and renewal * Health checks and automatic restarts ![Healthchecks](https://res.cloudinary.com/railway/image/upload/v1758247840/docs/healthchecks_dx1ipr.png) **Managed Infrastructure** * Railway owns/operates underlying hardware * Automatic OS/security patches * Built-in load balancing and traffic distribution via [service replicas](/deployments/scaling#horizontal-scaling-with-replicas) * Automatic scaling based on workload demand * Managed networking with private service communication #### Security & compliance ##### VPS hosting Security is entirely your responsibility, including: **Basic Security Hardening** * Disable root login, enforce SSH key auth * Configure firewalls (UFW/iptables) * Install intrusion detection (fail2ban, IDS) * Regular audits and patching **Application Security** * File permissions and ownership * Secure headers (HSTS, CSP, X-Frame-Options) * Rate limiting and DDoS protection * Secure secret management * Secure database connections **Compliance Requirements** Achieving certifications on VPS requires significant additional work: * Access controls and audit logging * Data classification/handling procedures * Incident response/business continuity plans * Security assessments & penetration testing * Evidence collection and documentation * Encryption/key management systems This typically requires dedicated expertise and can be costly. ##### Railway Railway provides enterprise-grade security out of the box: **Built-in Security Features** * Encrypted secret/environment management ![Variables and secrets](https://res.cloudinary.com/railway/image/upload/v1758247839/docs/variables_sfcgve.png) * SSL/TLS encryption for all services * Private networking within projects * Automatic patches and updates * DDoS protection **Compliance & Certifications** * SOC 2 Type II * GDPR compliance * HIPAA compliance * Regular third-party audits **Security Best Practices** * Role-based access control ![Roles & permissions](https://res.cloudinary.com/railway/image/upload/v1758247840/docs/roles_rhtj7v.png) * MFA and passkey support * Regular assessments and penetration testing * Incident response and continuity planning #### Monitoring & observability ##### VPS hosting Requires integrating multiple tools: **System & Application Monitoring** * Install agents (Prometheus, Grafana, commercial tools) * Custom dashboards for CPU, memory, disk, network * Configure alerting rules and notification channels * Implement log aggregation/analysis (ELK, Loki) * Uptime monitoring and health checks ##### Railway Monitoring is built-in: **Observability Dashboard** * CPU, memory, network metrics ![Observability dashboard](https://res.cloudinary.com/railway/image/upload/v1758247839/docs/dashboards_trvxkf.png) * Integrated log aggregation and search ![Logs](https://res.cloudinary.com/railway/image/upload/v1758247840/docs/logs_dbux8e.png) * Auto alerting and notifications ![Notifications](https://res.cloudinary.com/railway/image/upload/v1758248262/docs/notifications_jc1yzb.png) #### Scalability & global distribution ##### VPS hosting Scaling requires manual setup: **Vertical Scaling (Up)** * Manually upgrade to larger instances * Typically downtime during resizing * Application restarts required * Persistent storage resizing often requires downtime **Horizontal Scaling (Out)** * Provision additional VPS instances * Configure load balancers (HAProxy, Nginx, cloud LB) * Manage session persistence/sticky sessions * Database connection pooling/discovery **Multi-Region Deployment Challenges** * Manual VPS setup in each region * Complex DNS/georouting configs * Data replication/sync complexity * Cross-region latency * Higher operational overhead and cost ##### Railway Scaling and distribution are automatic: **Automatic Vertical Scaling** * Scale up to plan limits automatically * No downtime or manual intervention * Live volume resizing without service interruption **Effortless Horizontal Scaling** * Deploy replicas with one click ![Horizontal scaling](https://res.cloudinary.com/railway/image/upload/v1758247839/docs/horizontal_scaling_xil1q0.png) * Automatic load balancing & health checks * Automatic traffic routing to nearest region **Multi-Region Deployment** * Deploy globally with one command ![Multi-region deployment](https://res.cloudinary.com/railway/image/upload/v1758247839/docs/multi-region_deployment_h5fxqz.png) * Auto traffic routing, failover, replication * CDN integration for static assets * Simplified data management * Reduced latency for global users #### Pricing & cost optimization ##### VPS hosting * Fixed monthly pricing by instance size. * Extra tools (monitoring, backups, scaling) often add hidden costs. ##### Railway Railway follows a usage-based pricing model that depends on how long your service runs and the amount of resources it consumes. You only pay for activce CPU and memory, not for idle time. ``` Active compute time x compute size (memory and CPU) ``` ![railway usage-based pricing](https://res.cloudinary.com/railway/image/upload/v1753470546/docs/comparison-docs/railway-usage-based-pricing_efrrjn.png) Pricing plans start at $5/month. You can check out the [pricing page](https://railway.com/pricing) for more details. **Cost Optimization** If you would like to further reduce costs, you can enable the [serverless](/deployments/serverless) feature. When a service has no outbound requests for over 10 minutes, it is automatically put to sleep. While asleep, the service incurs no compute charges. It wakes up on the next incoming request, ensuring seamless reactivation without manual effort. This makes it ideal for sporadic or bursty workloads, giving you the flexibility of a full server with the cost efficiency of serverless, with the benefit of only paying when your code is running. ![serverless](https://res.cloudinary.com/railway/image/upload/v1758247841/docs/enable-serverless_sv32cr.png) #### Developer workflow & deployment ##### VPS hosting Deploying requires building your own CI/CD: **CI/CD** * Configure GitHub Actions/Jenkins/etc. * Write deployment scripts * Separate staging/production setup * Automated testing/quality gates * Rollback procedures **Environment Management** * Manual env var config * Separate servers for staging/prod * Manual DB migrations/schema updates * Complex secret management ##### Railway CI/CD and environments are built-in: **Automatic CI/CD** * GitHub repo integration * Preview environments per pull request * One-click rollbacks * Automatic env var management **Environment Management** * Built-in support for dev/staging/prod ![Environment management](https://res.cloudinary.com/railway/image/upload/v1758248515/docs/environments_e5f7xq.png) * Shared env vars across services * Encrypted secret management * Auto DB migrations/schema updates by customizing the pre-deploy command #### Railway as a VPS alternative: migrate from VPS to Railway To get started, [create an account on Railway](https://railway.com/new). You can sign up for free and receive $5 in credits to try out the platform. ##### Deploying your app 1. Choose "Deploy from GitHub repo", connect your GitHub account, and select the repo you would like to deploy. ![Railway onboarding new project](https://res.cloudinary.com/railway/image/upload/v1758247839/docs/new-project_gruqxh.png) 2. If your project is using any environment variables or secrets: 1. Click on the deployed service. 2. Navigate to the β€œVariables” tab. 3. Add a new variable by clicking the β€œNew Variable” button. Alternatively, you can import a `.env` file by clicking β€œRaw Editor” and adding all variables at once. ![Railway environment variables](https://res.cloudinary.com/railway/image/upload/v1758247839/docs/variables_sfcgve.png) 3. To make your project accessible over the internet, you will need to configure a domain: 1. From the project’s canvas, click on the service you would like to configure. 2. Navigate to the β€œSettings” tab. 3. Go to the β€œNetworking” section. 4. You can either: 1. Generate a Railway service domain: this will make your app available under a `.up.railway.app` domain. 2. Add a custom domain: follow the DNS configuration steps. #### Frequently asked questions ##### Do I still need a VPS if I use Railway? For most applications, no. Railway gives you a dedicated environment with deploys, scaling, SSL, monitoring, and backups managed for you, so the work you'd do by hand on a VPS is built in. A VPS still makes sense when you need full control over the operating system and software stack, and you have the DevOps expertise to maintain it. ##### Is Railway more expensive than a VPS? The raw server is often cheaper on a VPS (fixed prices in the $5-$50/mo range), but that price doesn't include the monitoring, backup, and scaling tooling you have to add, or the hours spent on patches, hardening, and outages. Railway bills $20/vCPU-month and $10/GB-month RAM per second of actual usage, plans start at $5/month, and the serverless feature sleeps idle services so they cost nothing while inactive. For workloads that don't run hot 24/7, the usage-based model frequently comes out ahead once operations time is counted. ##### Can I get SOC 2 compliance on a VPS? You can, but it requires significant additional work: access controls, audit logging, incident response plans, penetration testing, and evidence collection are all your responsibility, which typically demands dedicated expertise. Railway is SOC 2 Type II certified and GDPR compliant out of the box, with automatic patching and DDoS protection included. ##### When does a VPS make more sense than Railway? When you need full control over the OS, kernel, and software stack, or your team already has the infrastructure expertise and wants to manage everything directly. The trade-off is that server setup, security hardening, scaling, and monitoring all become your ongoing responsibility. #### Need help or have questions? If you need help along the way, the [Help Station](https://station.railway.com/) is a great resource to get support from the team and community. Working with a larger workload or have specific requirements? [Book a call with the Railway team](https://cal.com/team/railway/work-with-railway) to explore how we can best support your project. --- ### Migrate from Heroku Source: https://docs.railway.com/platform/migrate-from-heroku.md Learn how to migrate your apps from Heroku to Railway with this step-by-step guide. Fast, seamless, and hassle-free. Migrating your app from Heroku to Railway is very simple. We even support Procfiles out of the box. (Only a single process is supported for now). All you need to do is create a project in Railway, push your code, and migrate your environment variables. This guide will step you through the process of migrating a simple web service, using the [Railway CLI](/cli). Screenshot of Railway Up #### Working directory In your terminal, ensure your current working directory is the same directory where your service code is located. This is important so that as you complete the following steps, the [Railway CLI](/cli) is properly linked. #### 1. Login to Railway from the CLI Ensure your CLI is authenticated to your Railway account: ```bash railway login ``` This command will prompt to open a browser to complete authentication. Once authenticated, commands executed by the Railway CLI, will be performed in the context of your Railway account. #### 2. Create a new project Now, let's create a new [project](/projects): ```bash railway init ``` This command will prompt you to define a name for your service. #### 3. Deploy the service Once your project is created, you can push your code into the project and assign a domain. ##### Push the Code Push the code into a [service](/services) in Railway: ```bash railway up -d ``` At this point, the service is being deployed, but let's give it a domain. ##### Assign a domain The service being migrated is a web service that should be available over the Internet, so let's assign a domain: ```bash railway domain ``` Now the service will be available over the Internet via the provided domain. #### 4. Migrate the environment variables Finally, import the environment variables from Heroku into Railway. Video of importing variables from Heroku ##### Open the project in Railway Let's pop over to your new project in the [Railway canvas](/projects#project-canvas).: ```bash railway open ``` This will open the project in your browser. ##### Add Heroku variables to the service From the project canvas, import the Heroku variables into the service: - click on the service - click `Variables` tab - open the command palette using `CMD + K` or `Ctrl + K`. - search for `Import variables from Heroku` - confirm the Heroku service and hit `Enter` Your Heroku variables will be imported into the service, and it will automatically redeploy. _Note: The first time you import variables from Heroku, you will be prompted to Allow Railway to connect to your Heroku account._ #### Conclusion Following this guide, you have successfully migrated a simple web service from Heroku to Railway, including importing variables from Heroku into Railway. The migration is complete by pushing your code directly from your local machine into a service in Railway. Once you are comfortable with Railway, you may want to integrate [deployments](/deployments) into your development workflow. For more advanced operations, like migrating your databases from Heroku to Railway, the process will be a bit more involved, but we are happy to help work out a solution! #### Need help? If you run into any issues, or would like help with your migrations, we would be more than happy to answer your questions on [Central Station](https://station.railway.com) or over email at [team@railway.com](mailto:team@railway.com). ### Migrate from Render Source: https://docs.railway.com/platform/migrate-from-render.md Learn how to migrate your apps from Render to Railway with this step-by-step guide. Fast, seamless, and hassle-free. This guide walks you through the steps needed to seamlessly migrate your app and data from Render to Railway. With features like instant deployments, CI/CD integrations, private networking, observability, and effortless scaling, Railway helps developers focus on building rather than managing infrastructure. Railway boasts of a superior and intuitive user experience that makes deploying complex workloads easy to configure and manage. Railway offers: - **Broad Language and Framework Support**: Deploy apps in [any language or framework](/languages-frameworks). - **Flexible Deployment Options**: Use GitHub, Dockerfiles, Docker images from supported registries (Docker Hub, GitHub, RedHat, GitLab, Microsoft), or local deployments via the Railway CLI. - **Integrated Tools**: Simplify environment variable management, CI/CD, observability, and service scaling. - **Networking Features:** Public and private networking. - **Best in Class Support:** Very active community on the [Railway Help Station](https://station.railway.com/). ..and so much more. Want to see for yourself? [Try Railway for a spin today!](https://railway.com/new) #### Migration steps In this guide, we will migrate a Go (Beego) app with a Postgres database from Render to Railway. Here’s the link to the app. A simple chat app that have the options of Long polling and Web socket: https://github.com/unicodeveloper/beego-WebIM ##### 1. Set up a Railway project Navigate to [Railway's Project Creation Page](https://railway.com/new). Select the **Deploy from GitHub Repo** option and connect your repository. If your Railway account isn’t linked to GitHub yet, you’ll be prompted to do so. ![Set up a Railway Project](https://res.cloudinary.com/railway/image/upload/v1736366540/newproject_ljvsqp.png) ##### 2. Deploy the app Railway automatically detects a `render.yaml` file in your repository and provisions the corresponding services, including databases, web (both public and private), crons, and workers. If environment variables are defined in your `render.yaml`, Railway will import them automatically to the appropriate services. If they are not defined, you can manually migrate them by following these steps: **On Render**: 1. Go to the **Environment Variables** page of your service. 2. Copy all the variables and their values. **On Railway**: 1. Open the **Variables** section for the relevant service. 2. Switch to the **Raw Editor** and paste the copied environment variables. 3. Deploy the changes to apply the configuration. ![Deploy on Railway](https://res.cloudinary.com/railway/image/upload/v1736366539/deployapp_rlhvzx.png) Railway will deploy both the Go app as a service and the database, as shown in the image above. You can monitor the service building and deploying in the [Project Canvas](/projects#project-canvas). ##### 3. Database migration Railway supports a variety of databases, including **PostgreSQL**, **MongoDB**, **MySQL**, and **Redis**, allowing you to deploy the one that best fits your application needs. When a `render.yaml` file includes a `databases` section, Railway will automatically provision a **PostgreSQL database** for your app. If you're migrating data to Railway, you can follow these steps: 1. Export your database from Render using tools like `pg_dump`. 2. Import the data into Railway using `psql`. For detailed instructions, check out [this comprehensive tutorial on migrating PostgreSQL data between services.](https://blog.railway.com/p/postgre-backup) Once the migration is complete, update the `DATABASE_URL` environment variable in your Railway app to point to the new PostgreSQL database. ##### 4. Multi-region deployments If your app needs to use multi-region deployments, you can leverage Railway’s [multi-region replicas](/deployments/scaling#multi-region-replicas). Enable this in the **Settings** section of your Railway service to keep your app close to users worldwide. **Note:** Multi-region replicas is currently available to Pro users. ![Multi-region deployments](https://res.cloudinary.com/railway/image/upload/v1736366540/multiregiondeployments_pojcyf.png) And that’s it. That’s all you need to migrate your app from Render to Railway. ### Migrate from Fly Source: https://docs.railway.com/platform/migrate-from-fly.md Learn how to migrate your apps from Fly.io to Railway with this step-by-step guide. Fast, seamless, and hassle-free. This guide walks you through the steps needed to seamlessly migrate your app and data from Fly.io to Railway. This process is straightforward and typically takes an average of **5 - 20 minutes**, depending on the size of your database and app complexity. **TL;DR: Quick Migration Steps** - Set up new app on Railway - Export data from Fly.io and Import into Railway DB - Deploy app (including auto-migration of app config & variables) We provide everything Fly.io offers and more! Check out the [comparison guide](/platform/compare-to-fly) to see the differences and make an informed choice. Why take Railway's word for it? Experience the [Railway advantage yourself, give it a spin today!](https://railway.com/new) #### Migration steps In this guide, we will migrate a Go (Gin) app with a Postgres database from Fly.io to Railway. While we are using this app as an example, the process applies to any app, making it easy to transition your projects smoothly. Here’s the link to the [app](https://github.com/unicodeveloper/gin). ##### 1. Set up a Railway project Navigate to [Railway's Project Creation Page](https://railway.com/new). Select the **Deploy from GitHub Repo** option and connect your repository. If your Railway account isn’t linked to GitHub yet, you’ll be prompted to do so. ![Railway new project](https://res.cloudinary.com/railway/image/upload/v1737143344/railwaynewproject_d4jv8c.png) ##### 2. Deploy the app Railway auto-imports all the build configurations, deploy commands, environment variables from your Fly.io app repo. No manual setup needed. If the environment variables are missing, you can easily add them manually by following these steps: ##### Adding environment variables on Railway: 1. Navigate to the **Variables** section of your service. 2. Switch to the **Raw Editor** and paste the copied environment variables. 3. Deploy the changes to apply the configuration. ![Variables imported automatically from fly.toml into Railway service](https://res.cloudinary.com/railway/image/upload/v1737143351/environmentvariables_q0xmyh.png) Railway will deploy the Gin app as a service, as shown in the image above. You can monitor the service building and deploying in the [Project Canvas](/projects#project-canvas). [**Serverless (App Sleep) activated**](/deployments/serverless): In this [**Fly.io** app](https://github.com/unicodeveloper/gin/blob/main/fly.toml), the HTTP service is configured with **`auto_stop_machines='stop'`** and **`auto_start_machines=true`**, enabling automatic stopping and restarting of machines. On Railway import, we automatically enable this setting to effortlessly optimize resource usage. ![App sleep activated to optimize resource usage and spend](https://res.cloudinary.com/railway/image/upload/v1737143360/appsleep_cszmgf.png) ##### 3. Database migration Railway supports a variety of databases, including **PostgreSQL**, **MongoDB**, **MySQL**, and **Redis**, allowing you to deploy the one that best fits your application needs. We also support many more via the [templates marketplace](https://railway.com/templates). If you're migrating data to Railway from Fly, you can follow these steps: 1. Provision a new database by right clicking on the dashboard canvas and selecting Postgres. 2. Export your data from Flyio - Use `flyctl` to connect to your Flyio Postgres instance - `fly postgres connect -a ` - Use `pg_dump` to export your database - `pg_dump -Fc --no-acl --no-owner -h localhost -p 5432 -U -d -f flyio_db_backup.dump` - Use `pg_restore` to connect to your Railway database and restore the data from the dump. - `pg_restore -U -h -p -W -F t -d ` For detailed instructions, check out [this comprehensive tutorial on migrating PostgreSQL data between services.](https://blog.railway.com/p/postgre-backup) Once the migration is complete, update the `DATABASE_URL` environment variable in your Railway app to point to the new PostgreSQL database and redeploy. ##### 4. Replicas & multi-region deployments In this [Fly.io app](https://github.com/unicodeveloper/gin/blob/main/fly.toml), the setting **`min_machines_running=2`** ensures that at least **two instances** of the service remain active. On Railway import, we automatically translate this configuration to ensure that two **service instances** are running without any extra setup. ![Replicas](https://res.cloudinary.com/railway/image/upload/v1737143335/replicas_zwtuwr.png) If your app needs to use multi-region deployments, you can leverage Railway’s [multi-region replicas](/deployments/scaling#multi-region-replicas). Enable this in the **Settings** section of your Railway service to keep your app close to users worldwide. **Note:** Multi-region replicas is currently available to Pro users. And that’s it. That’s all you need to migrate your app from Flyio to Railway. ### Migrate from Vercel Source: https://docs.railway.com/platform/migrate-from-vercel.md Learn how to migrate your Next.js app from Vercel to Railway with this step-by-step guide. Fast, seamless, and hassle-free. This guide demonstrates how to transition your application from Vercel to Railway's developer-centric platform. Whether you're running a simple static site or a complex full-stack application, Railway streamlines your deployment workflow. With features like instant rollbacks, integrated observability, and seamless environment management, Railway empowers developers to focus on building great applications rather than managing infrastructure. Railway offers - - **Next.js Optimization**: Built-in support for all Next.js features including ISR, SSR, and API routes - **Zero Config Deployments**: Automatic framework detection and build optimization - **Enhanced Development Flow**: Local development with production parity - **Collaborative Features**: Team management, deployment protection, and role-based access - **Priority Support**: Dedicated support for Railway users #### Migration steps Let's walk through migrating a Next.js application to Railway. For this guide, you'll use a sample e-commerce app that showcases common Next.js features and configurations. ##### Deploying your application To get started deploying your NextJS app, first create a new project. - Open up the dashboard β†’ Click **New Project**. - Choose the **GitHub repo** option. screenshot of new project menu with deploy from github selected _Railway requires a valid GitHub account to be linked. If your Railway account isn't associated with one, you will be prompted to link it._ - Search for your GitHub project and click on it. screenshot of new project menu with nextjs repo selected - Choose either **Deploy Now** or **Add variables**. **Deploy Now** will immediately start to build and deploy your selected repo. **Add Variables** will bring you to your service and ask you to add variables, when done you will need to click the **Deploy** button at the top of your canvas to initiate the first deployment. _For brevity, choose **Deploy Now**._ screenshot of new project menu with deploy now option selected When you click **Deploy Now**, Railway will create a new project for you and kick off an initial deploy after the project is created. **Once the project is created you will land on your Project Canvas**. screenshot of the project canvas showing environment variables configuration From here Railway will automatically - - Detect your Next.js configuration - Configure the appropriate Node.js version - Build your application - Run your application ##### Environment configuration Next.js applications often rely on environment variables for API keys, database connections, and feature flags. Here's how to transfer them - **From Vercel -** 1. Visit your Vercel project settings 2. Navigate to the Environment Variables tab 3. Export your variables (you can copy them directly) **To Railway -** 1. Select your service in the Project Canvas 2. Open the Variables tab 3. Use the Raw Editor for bulk variable import 4. Click Deploy to apply changes ##### Domain configuration Railway makes it simple to set up custom domains or use Railway-provided domains - 1. Open your service's Settings 2. Navigate to the Public Networking section 3. Choose between: - Generating a Railway service domain - Adding your custom domain 4. Follow the DNS configuration steps if using a custom domain ##### Deployment verification Before finalizing your migration: 1. Check your application's core functionality 2. Verify environment variables are properly set 3. Test dynamic routes and API endpoints 4. Confirm image optimization is working 5. Monitor build and runtime logs Railway's integrated observability helps you catch any issues early in the migration process. ##### Local development Railway makes local development seamless with your production environment: 1. Install the Railway CLI: `npm i -g @railway/cli` 2. Run `railway link` to connect to your project 3. Use `railway run` to start your app locally with production variables This ensures development/production parity and helps catch issues before they reach production. That's all it takes to move your Next.js application to Railway! Need help? The [team and community](https://station.railway.com/) are always ready to assist. Need more information on how we compare to Vercel? Check out the [comparison page](/platform/compare-to-vercel). ### Migrate from DigitalOcean Source: https://docs.railway.com/platform/migrate-from-digitalocean.md Learn how to migrate your WordPress site from DigitalOcean to Railway with this step-by-step guide. Fast, seamless, and hassle-free. This guide demonstrates how to migrate your WordPress site from DigitalOcean to Railway's modern cloud platform. Railway provides a streamlined deployment experience with powerful infrastructure features. Railway offers: - **Modern Infrastructure**: High-performance cloud platform - **Quick Setup**: WordPress-ready deployment template - **Database Support**: MariaDB database capabilities - **Integrated SSL**: Automatic SSL certificate management - **Scalable Infrastructure**: Easily handle traffic spikes and growth - **Collaborative Features**: Team management, deployment protection, and role-based access - **Priority Support**: Dedicated support for Railway users #### Migration steps Let's walk through migrating a WordPress site from DigitalOcean to Railway. This process involves backing up your existing installation, deploying WordPress on Railway and then restoring from your backup. ##### 1. Backup your WordPress site - Ensure you have a backup of your existing site. Use a WordPress backup plugin of your choice to export your site data. Make sure this backup includes, All WordPress files, All WordPress database tables, All WordPress uploads. - Document your current configuration - Note any custom domain settings - Keep track of your username and password for wp-admin. ##### 2. Deploy WordPress - Open the [WordPress Template](https://railway.com/deploy/EP4wIt) page Screenshot of the WordPress template - Click "Deploy Now" to Deploy the WordPress template. - Since this template doesn’t require any configuration, Click "Deploy" and wait for the deployment to complete. The template will automatically configure - - A MariaDB database - Initial WordPress setup - Required environment variables - A temporary service domain Screenshot of wordpress after deployment ##### 3. Restore your site content After the template deployment completes - 1. Access your WordPress installation via the temporary service domain. 2. Configure your WordPress settings 3. Install your preferred backup plugin 4. Restore your site content from your backup ##### 4. Configure domain settings To set up your custom domain: 1. Open your service's Settings in Railway 2. Navigate to the "Networking" section 3. Add your custom domain 4. Update your DNS records according to the instructions given. **Note:** You will need to redeploy your service for WordPress to pick up the new domain. Screenshot of Railway domain configuration page ##### 5. Verify migration Before finalizing your migration - 1. Test all WordPress functionality 2. Verify all pages and posts are displaying correctly 3. Check media files are properly loaded 4. Test user authentication 5. Verify contact forms and other interactive elements ##### 6. Performance optimization Consider these optimization options for your WordPress deployment: - Configure caching by placing Cloudflare or a similar CDN in front of your site. - Optimize database performance by setting up a caching plugin. - Set up appropriate scaling configurations. - Implement CDN if needed That's all you need to migrate your WordPress site from DigitalOcean to Railway! Need assistance? The [Central Station](https://station.railway.com/) is there to help you with any questions during your migration process. ### Migrate from Replit Source: https://docs.railway.com/platform/migrate-from-replit.md Step-by-step guide to migrate a Replit project to Railway. Covers code export, environment variables, database migration, and deployment configuration. This guide covers how to move a project from Replit to Railway, including code export, environment variables, database migration, and deployment configuration. #### Prerequisites - A Railway account - A GitHub account - Access to your Replit project - The [Railway CLI](/cli) installed (optional, but useful for database migration) #### 1. Export your code from Replit Your code needs to be in a GitHub repository before you can deploy it on Railway. **If your Replit project is already connected to GitHub:** No export is needed. You will connect the same repository to Railway in the next step. **If your Replit project is not connected to GitHub:** 1. In Replit, open your project and click the three-dot menu in the file tree. 2. Select **Download as zip**. 3. Create a new repository on GitHub. 4. Unzip the downloaded project and push the code to your new repository: ```bash cd your-project git init git add . git commit -m "Initial commit" git remote add origin https://github.com/your-username/your-repo.git git branch -M main git push -u origin main ``` Remove the `.replit` and `replit.nix` files from your repository before pushing: Railway does not use them. #### 2. Create a Railway project 1. Go to railway.com/new. 2. Select **Deploy from GitHub Repo**. 3. Connect your GitHub account if you have not already, then select the repository containing your code. Railway creates a new project with a service linked to your repository. Pushes to your default branch will trigger deployments automatically. #### 3. Configure environment variables Replit stores environment variables in the **Secrets** tab. You need to copy these into Railway. 1. In Replit, open the **Secrets** tab and note each key-value pair. 2. In Railway, click on your service and go to the **Variables** tab. 3. Add each variable individually, or click **Raw Editor** to paste multiple variables at once in `KEY=VALUE` format. After saving, Railway redeploys the service with the updated variables. If your Replit project references a `DATABASE_URL` or similar connection string, update it after completing the database migration in the next step. #### 4. Migrate your database Skip this step if your Replit project does not use a database. ##### Replit PostgreSQL to Railway Postgres 1. Right-click on the Railway project canvas and select **Database > Add PostgreSQL** to provision a new Postgres instance. 2. Export your data from Replit's PostgreSQL using `pg_dump`: ```bash pg_dump -Fc --no-acl --no-owner -h -p -U -d -f backup.dump ``` 3. Restore the dump into your Railway Postgres instance: ```bash pg_restore --no-acl --no-owner -h -p -U -d backup.dump ``` You can find your Railway Postgres connection details in the **Variables** tab of the database service. 4. Update the `DATABASE_URL` variable in your app service to reference the Railway Postgres instance. You can use the [reference variable](/variables#reference-variables) `${{Postgres.DATABASE_URL}}` to keep the value in sync automatically. For more detail, see [PostgreSQL on Railway](/databases/postgresql). ##### Replit Database (key-value) to Railway Redis Replit Database is a key-value store. If your project uses it, you can migrate to a Redis instance on Railway. 1. Write a script in your Replit project to export all keys and values from Replit Database to a JSON file: ```python from replit import db import json data = dict(db) with open("replit_db_export.json", "w") as f: json.dump(data, f) ``` 2. Provision a Redis instance in Railway by right-clicking on the project canvas and selecting **Database > Add Redis**. 3. Write a script to import the JSON data into Redis: ```python import json import redis r = redis.Redis.from_url("your-railway-redis-url") with open("replit_db_export.json", "r") as f: data = json.load(f) for key, value in data.items(): r.set(key, json.dumps(value) if not isinstance(value, str) else value) ``` 4. Update your application code to use Redis instead of `replit.db`. #### 5. Configure builds and deployments Replit uses the `.replit` file to define run commands and language settings. Railway uses Railpack for build detection and does not read `.replit` files. **Automatic detection:** Railpack detects your project type from standard files: - **Node.js:** `package.json` (reads `scripts.start` for the start command) - **Python:** `requirements.txt` or `pyproject.toml` - **Go:** `go.mod` If Railpack detects your project correctly, no configuration is needed. **Custom build or start commands:** If you need to override the defaults, go to your service's **Settings** tab and set the **Build Command** and **Start Command** fields. **Dockerfile:** If your project requires a custom build environment, you can add a `Dockerfile` to your repository. Railway detects and uses it automatically. #### 6. Set up a public domain Replit provides `.replit.app` domains. On Railway, you can generate a `.up.railway.app` domain or configure a custom domain. 1. Click on your service in the project canvas. 2. Go to the **Settings** tab. 3. Under **Networking > Public Networking**, click **Generate Domain** to get a `.up.railway.app` domain. To use a custom domain, see [Custom Domains](/networking/domains). #### Migration checklist - [ ] Code exported to GitHub - [ ] `.replit` and `replit.nix` files removed from the repository - [ ] Environment variables migrated - [ ] Database migrated (if applicable) - [ ] Build and start commands verified - [ ] Public domain configured - [ ] Application tested #### Next steps - [Add a Database Service](/databases) - [Monitor your app](/observability) - [Set up a custom domain](/networking/domains) ### Migrate from Lovable Source: https://docs.railway.com/platform/migrate-from-lovable.md Step-by-step guide to migrate a Lovable-generated app to Railway. Covers GitHub export, environment variables, database setup, and production configuration. This guide is for users who want to stop using Lovable entirely and run their application on Railway. You take full ownership of the codebase, infrastructure, and deployment pipeline. If you want to keep using Lovable for AI code generation while hosting on Railway, see [Deploy a Lovable App on Railway](/guides/lovable) instead. #### When to migrate vs. when to deploy **Keep using Lovable + deploy to Railway** if you still want Lovable's AI code generation and prompt-driven development. Changes you make in Lovable auto-deploy to Railway. See the [Lovable deployment guide](/guides/lovable). **Migrate fully to Railway** if you've outgrown Lovable's environment, want full control over your codebase, or need infrastructure Lovable doesn't support (background workers, cron jobs, multiple services, managed databases). #### Prerequisites - A Lovable project with a working application - A GitHub account - A Railway account #### 1. Connect your Lovable project to GitHub If your Lovable project is already connected to GitHub, skip to [step 2](#2-create-a-railway-project-from-the-github-repo). 1. In Lovable, go to **Settings > Integrations > GitHub**. 2. Click **Connect GitHub** and authorize Lovable to access your GitHub account. 3. Install the Lovable GitHub App on your account or organization. 4. Click **Connect project** and select where the repository should be created. Lovable creates a repository containing your application code. Changes made through Lovable's interface push to this repository automatically. This repository is what you deploy on Railway. #### 2. Create a Railway project from the GitHub repo 1. Go to railway.com/new. 2. Select **Deploy from GitHub repo** and choose the repository Lovable created. 3. Click **Deploy**. Railway detects the project configuration from `package.json` and starts the build. Once the deployment finishes, check **View logs** to confirm the application started. #### 3. Configure environment variables Lovable may store API keys and configuration values in its own environment. These do not transfer automatically. 1. In Lovable, open your project settings and note any environment variables (Supabase keys, OpenAI keys, Stripe keys, etc.). 2. In Railway, open your service and go to the **Variables** tab. 3. Add each variable as a key-value pair. Railway redeploys automatically when variables change. See the [Variables guide](/variables) for more detail. #### 4. Add a database Many Lovable projects use Supabase as their database. You have two options: **Keep Supabase.** Add your Supabase connection string as an environment variable in Railway. No other changes are needed. Your application connects to the hosted Supabase instance the same way it did on Lovable. **Migrate to Railway Postgres.** If you want to run the database on Railway: 1. Click **+ New** in your Railway project and select **Database > PostgreSQL**. 2. Export your Supabase data with `pg_dump`: ```bash pg_dump -h -U postgres -d postgres -F c -f backup.dump ``` 3. Import into Railway Postgres with `pg_restore`: ```bash pg_restore -h -U postgres -d railway -F c backup.dump ``` 4. Update the database connection string in your Railway service variables to point to the new instance. See [PostgreSQL on Railway](/databases/postgresql) for connection details and configuration. #### 5. Configure production builds Lovable typically generates React applications using Vite. Railway's build system auto-detects Node.js projects and runs `npm run build` from `package.json`. Where things may differ from Lovable's hosted environment: - **Static frontend apps.** If your Lovable project is a single-page application with no backend server, it produces a `dist/` folder during the build. You need a way to serve those static files. See the [serving a static site guide](/guides/static-hosting) for options, including adding a lightweight server like `serve` to your project. - **Apps with a backend.** If your project includes a backend (Express, Fastify, or similar), check that the start command in `package.json` runs the server. Railway uses the `start` script by default. - **Supabase Edge Functions.** If your Lovable project relies on Supabase Edge Functions, those continue to run on Supabase. They do not need to be deployed on Railway unless you are replacing them with your own backend service. #### 6. Set up a public domain Railway services are not publicly accessible by default. 1. Open your service and go to **Settings > Networking**. 2. Click **Generate Domain** to get a `.up.railway.app` URL. To use a custom domain, add it in the networking settings and update your DNS records. See [Custom Domains](/networking/domains) for instructions. #### 7. Disconnect Lovable GitHub sync Once you've verified that Railway is serving your application correctly, you can disconnect the Lovable GitHub integration to stop auto-syncing changes from Lovable to your repository. 1. In Lovable, go to **Settings > Integrations > GitHub**. 2. Disconnect the project from the repository. This is optional but recommended if you are fully migrating. Disconnecting prevents accidental changes in Lovable from pushing to the repository and triggering Railway deployments. #### Migration checklist - [ ] Lovable project connected to GitHub - [ ] Railway project created from the GitHub repository - [ ] Environment variables copied from Lovable to Railway - [ ] Database connected (Supabase or Railway Postgres) - [ ] Build and start commands verified in deployment logs - [ ] Public domain configured - [ ] Lovable hosting can be retired once Railway deployment is confirmed working - [ ] Lovable GitHub sync disconnected (optional) #### Next steps - [Add a Database Service](/databases) - [Monitor your app](/observability) - [Set up a custom domain](/networking/domains) ### Migrate from Bolt Source: https://docs.railway.com/platform/migrate-from-bolt.md Step-by-step guide to migrate a Bolt-generated app to Railway. Covers code export, environment variables, and production deployment. This guide covers how to move a Bolt-generated app to Railway for production hosting. #### Prerequisites - A Railway account - A GitHub account - A Bolt project ready to export #### 1. Export your code from Bolt Bolt provides two ways to get your code out: - **GitHub integration**: If your Bolt project is already connected to GitHub, note the repository name. You will connect this same repo to Railway. - **Download as zip**: In your Bolt project, download the project as a zip file. Extract it to a local directory. #### 2. Push to GitHub If you downloaded the zip, create a new GitHub repository and push the code: ```bash cd your-project git init git add . git commit -m "Initial commit from Bolt" git remote add origin https://github.com/your-username/your-repo.git git push -u origin main ``` If you used Bolt's GitHub integration, your repo is already set. Skip to the next step. #### 3. Create a Railway project 1. Go to railway.com/new. 2. Select **Deploy from GitHub Repo**. 3. Connect your GitHub account if you have not already. 4. Select the repository containing your Bolt project. 5. Click **Deploy Now**. Railway will begin building and deploying your app. You can monitor progress in the [Project Canvas](/projects#project-canvas). #### 4. Configure environment variables Bolt projects often rely on environment variables for API keys, database connections, and third-party service credentials. 1. In Bolt, open your project settings and note all configured environment variables. 2. In Railway, select your service in the Project Canvas. 3. Open the **Variables** tab. 4. Use the **Raw Editor** to paste your variables in `KEY=VALUE` format. 5. Click **Deploy** to apply. #### 5. Add a database (if needed) If your Bolt project uses a database: - **External database (e.g., Supabase, PlanetScale)**: Add the connection string as an environment variable in Railway. No other changes are needed. - **Railway-managed database**: Right-click the Project Canvas and add a Postgres, MySQL, or Redis service. Railway provides connection variables automatically when you link the database to your service. See [Databases on Railway](/databases) for setup details. #### 6. Configure builds Bolt typically generates React, Next.js, or Vite projects. Railway's build system (Railpack) auto-detects Node.js projects and installs dependencies automatically. Some framework-specific notes: - **Next.js**: Set `output: "standalone"` in your `next.config.js`. See the [Next.js guide](/guides/nextjs) for details. - **Vite SPA**: If your app is a single-page application with client-side routing, you may need to configure static file serving or add a small server. - **Full-stack projects**: If your Bolt project has both a frontend and a backend, deploy them as separate services within the same Railway project. Each service gets its own build and deploy configuration. #### 7. Set up a public domain 1. Select your service in the Project Canvas. 2. Go to **Settings**. 3. Under **Public Networking**, click **Generate Domain** to get a `.up.railway.app` URL. To use a custom domain, see [Custom Domains](/networking/domains). #### Migration checklist - [ ] Code exported from Bolt and pushed to GitHub - [ ] Railway project created and linked to the repo - [ ] Environment variables transferred to Railway - [ ] Database provisioned or external connection string set (if applicable) - [ ] Build completes without errors - [ ] App is accessible via the public domain - [ ] Custom domain configured (if applicable) #### Next steps - [Add a Database Service](/databases) - [Monitor your app](/observability) - [Set up a custom domain](/networking/domains) ## Pricing ### Plans Source: https://docs.railway.com/pricing/plans.md Learn about Railway's plans and pricing. Railway plans and pricing are designed to give you maximum resources while only charging you for your usage. We charge a base subscription price, which goes towards your resources and usage. #### Plans Railway offers four plans in addition to a [Trial](/pricing/free-trial): | | | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | **Free** | For running small apps with $1 of free credit per month | | **Hobby** | For indie hackers and developers to build and deploy personal projects | | **Pro** | For professional developers and their teams shipping to production | | **Enterprise** | For teams building and deploying production applications with the need for enterprise features related to compliance, SLAs, and account management | ##### Subscription pricing Each Railway account needs an active subscription. The base subscription fee allows you to use the Railway platform and features included in the tier of your subscription. The subscription fee goes towards your usage-costs on the platform. | Plan | Price | | -------------- | ----------- | | **Free** | $0 / month | | **Hobby** | $5 / month | | **Pro** | $20 / month | | **Enterprise** | Custom | Read more about Railway's plans at railway.com/pricing. Curious about potential savings? [Upload your current invoice](https://railway.com/pricing#pricing-invoice) and see how much you can save by running your workloads on Railway. ##### Default plan resources Depending on the plan you are on, you are allowed to use up these resources per service. | Plan | **Replicas** | **RAM** | **CPU** | **Ephemeral Storage** | **Volume Storage** | **Image Size** | | -------------- | ------------ | ------------ | -------------- | --------------------- | ------------------ | -------------- | | **Trial** | **2** | **1 GB** | **2 vCPU** | **1 GB** | **0.5 GB** | **4 GB** | | **Free** | **1** | **0.5 GB** | **1 vCPU** | **1 GB** | **0.5 GB** | **4 GB** | | **Hobby** | **6** | **48 GB** | **48 vCPU** | **100 GB** | **5 GB** | **100 GB** | | **Pro** | **42** | **1 TB** | **1,000 vCPU** | **100 GB** | **1 TB \*** | **Unlimited** | | **Enterprise** | **50** | **2.4 TB** | **2,400 vCPU** | **100 GB** | **5 TB \*** | **Unlimited** | Note that these are maximum values and include replica multiplication. \* For Volumes, Pro users and above can self-serve to increase their volume up to 1 TB. Check out [this guide](/volumes#live-resizing-the-volume) for information. ##### Resource usage pricing On top of the base subscription fee above, Railway charges for the resources that you consume. You are only charged for the resources you actually use, which helps prevent runaway cloud costs and provides assurances that you're always getting the best deal possible on your cloud spend. | Resource | Resource Price | | ---------------------------------------- | ----------------------------------------------------- | | **RAM** | $10 / GB / month ($0.000231 / GB / minute) | | **CPU** | $20 / vCPU / month ($0.000463 / vCPU / minute) | | **Network Egress** | $0.05 / GB ($0.000000047683716 / KB) | | [**Volume Storage**](/volumes) | $0.15 / GB / month ($0.000003472222222 / GB / minute) | To learn more about controlling your resource usage costs, read the FAQ on [How do I prevent spending more than I want to?](/pricing/faqs#how-do-i-prevent-spending-more-than-i-want-to) #### Included usage The Hobby plan includes $5 of resource usage per month. If your total resource usage at the end of your billing period is $5 or less, you will not be charged for resource usage. If your total resource usage exceeds $5 in any given billing period, you will be charged the delta. Included resource usage is reset at the end of every billing cycle and does not accumulate over time. **Examples**: - If your resource usage is $3, your total bill for the cycle will be $5. You are only charged the subscription fee because your resource usage is below $5 and therefore included in your subscription - If your resource usage is $7, your total bill for the cycle will be $7 ($5 subscription fee + $2 of usage), because your resource usage exceeds the included resource usage Similarly, the Pro plan includes $20 of resource usage per month and the same examples and billing logic apply. If your usage stays within $20, you'll only pay the subscription fee. If it exceeds $20, you'll be charged the difference on top of the subscription. ##### Additional services Railway offers [Business Class Support](/platform/support#business-class) as an add-on service to the Pro plan. Business Class Support is included with Enterprise. [Contact us](mailto:team@railway.com?subject=Business%20Class%20Support) to get started. #### Image retention policy Railway retains images for a period of time after a deployment is removed. This is to allow for rollback to a previous deployment. | Plan | **Policy** | | ---------------- | ------------- | | **Free / Trial** | **24 hours** | | **Hobby** | **72 hours** | | **Pro** | **120 hours** | | **Enterprise** | **360 hours** | When a deployment is removed, the image will be retained for the duration of the policy. Rolling back a removed deployment within the retention policy will restore the previous image, settings, and all variables with a new deployment; no redeployment is required. A removed deployment that is outside of the retention policy will not have the option to rollback; instead, you will need to use the redeploy feature. This will rebuild the image from the original source code with the deployment's original variables. #### One-time Grant of Credits on the Free Trial Users who create a new Trial account receive a free one-time grant of $5. Railway will expend any free credit before consuming any purchased credits. Trial plan users are unable to purchase credits without upgrading to the Hobby plan. Learn more about Railway's Free Trial [here](/pricing/free-trial). #### Partial month charges In some cases, your billing method may be charged for the partial amount of your bill earlier in the billing cycle. This ensures that your account remains in good standing, and helps us mitigate risk and fraud. #### FAQs ##### Which plan is right for me? - **Hobby** is for indie hackers and developers to build and deploy personal projects - **Pro** is for professional developers and their teams shipping to production - **Enterprise** is for dev teams building and deploying production applications with the need for enterprise features related to compliance, SLAs, and account management ##### Can I upgrade or downgrade at any time? You can upgrade any time, and when you do, you will get to the features of your new plan, as well as access to more powerful resources, immediately. When you downgrade, the changes will take effect at the beginning of your next billing cycle. ##### What is the difference between subscription and resource usage? There are two main components to your bill: | Component | Description | | ------------------ | ----------------------------------------------------------------------- | | **Subscription** | Cost of the plan you're on | | **Resource Usage** | Cost of the resources you've consumed: `[cost per unit] x [used units]` | Subscription is a flat fee you pay monthly for the tier you're subscribed to, and Resource Usage varies according to your resource consumption for the month. ##### Can I add collaborators to my project? Railway's Pro and Enterprise plans are designed for collaboration. These plans allow you to add members to your workspace and manage their permissions. Read more about adding members to your Pro or Enterprise workspace [here](/projects/workspaces#inviting-members). ##### How long does Railway keep my volume data if I am no longer on a paid plan? Railway will delete your data from the platform as per the timeline below after sufficient warning. | Plan | Days | | ---------------------- | -------------------------- | | **Free or Trial plan** | 30 days after expiry | | **Hobby plan** | 60 days after cancellation | | **Pro plan** | 90 days after cancellation | ##### Is the hobby plan free? No. The Hobby Plan is $5 a month, and it includes a resource usage credit of $5. Even if you do not use the $5 in usage (CPU, Memory, egress), you always pay the $5 subscription fee. ##### Can I get the hobby plan subscription fee waived? Railway waives the monthly Hobby plan subscription fee for a small set of active builders on the platform. Eligibility is automatically assessed based on several factors, including your usage on the platform, your GitHub account, and more. If you qualify, you will be notified in the Dashboard or when you upgrade to the Hobby plan. If you do not qualify, you will not be eligible for the waiver. This is a fully automated process, and Railway does not respond to requests for waiver. ##### I prefer to prepay. Is that possible? Not anymore as of March 30th, Railway requires the use of a post-paid card. ##### What happens if I use credits as a payment method and my account runs out of credits? If you are using credits as a payment method and your credit balance reaches zero, your subscription will be cancelled. You will no longer be able to deploy to Railway and we will stop all of your workloads. To resolve this, you will need to sign up for a new subscription after topping up sufficient credits. ##### Why was I charged for a partial month of usage? Railway has an automated system in place which can result in a partial amount of your bill being charged to your payment method, earlier in the billing cycle. This is intended to ensure that your account remains in good standing, and helps us to mitigate risk and fraud. ### Free trial Source: https://docs.railway.com/pricing/free-trial.md Learn about Railway's free trial plan. New users can take the platform for a spin by starting a free trial. The trial gives access to basic features for up to 30 days and includes a one-time grant of $5. After 30 days passes or $5 is spent, the free trial reverts to the [Free](/pricing/plans#plans) plan, which provides $1 of free credit per month. The credit does not roll over month to month. #### Full VS limited trial Your trial experience depends on whether Railway can verify your account. | Trial Type | Deploy Code | Deploy Databases | Deploy Buckets | Network Access | | ----------------- | ----------- | ---------------- | -------------- | -------------- | | **Full Trial** | βœ… | βœ… | βœ… | Full | | **Limited Trial** | βœ… | βœ… | βœ… | Restricted | When you sign up for a free Trial, you can connect your GitHub account to initiate verification. Your verification status depends on a number of factors, including the age and activity of your GitHub account. If your account is not verified (either because you have not initiated the verification process or your account does not meet Railway's criteria for verification), your trial will have some network restrictions. Specifically, services on the Limited Trial have restricted outbound network access and only a limited set of ports are available. Verification is a necessary measure to prevent abuse of the free Trial, limiting users from creating multiple accounts and reducing the risk of trial users deploying or hosting content that violates Railway's [Terms of Service](https://railway.com/legal/fair-use). This is a fully automated process, and Railway does not respond to requests for verification. If your account is not verified, you can upgrade to the Hobby plan to unlock the full Railway experience. #### FAQs ##### How do I get started with the free trial? If you do not already have a Railway account, you can sign up for a free Trial by clicking "Login" at [railway.com](https://railway.com/). ##### How does the trial work? When you sign up for the free Trial, you will receive a one-time grant of $5 in credits that you can use to try out Railway. The credits will be applied towards any usage on the platform and expire in 30 days. If you upgrade to a plan while you still have a credit balance from the Trial, the remaining balance will carry over to your new plan. To prevent fraud and ensure your payment method is valid and in good standing, the carried-over Trial credits may not be applied to your first billing cycle, and will instead be applied as a discount to subsequent charges once a successful payment has been processed. ##### What resources can I access during the trial? During the trial, you can access the same features as on the Hobby plan, however you will be limited to 1 GB of RAM and shared (rather than dedicated) vCPU cores. Additionally, your projects will be limited to 5 services per project. As a trial user, you can spin up databases and deploy code. However, if you are on the [Limited Trial](#full-vs-limited-trial), your services will have some network restrictions. ##### What's the difference between the limited trial and the full trial? If you connect your GitHub account, and we are able to verify it against a set of parameters, you will be on the Full Trial with full network access. If you do not connect a GitHub account, or we are not able to verify your account, you will be on the Limited Trial. You can still deploy code, databases, and buckets, but your services will have restricted outbound network access and only a limited set of ports will be available. While you're on the Limited Trial, you can initiate verification at any time by visiting [railway.com/verify](https://railway.com/verify) in order to access the Full Trial experience. ##### How far will the $5 one-time trial grant last? The longevity of your one-time trial grant depends on how many resources you consume within the 30 day period you sign-up for the platform. The more resources you deploy, the greater the consumption. ##### Data retention Railway deletes stateful volumes created by Trial accounts 30 days after the expiration of your credits. To retain your data, upgrade your account after the Trial period. ### Understanding your bill Source: https://docs.railway.com/pricing/understanding-your-bill.md Learn how Railway billing works, why you're charged when idle, and how to read your invoice. This guide explains how Railway billing works in practice, helping you understand your charges and avoid unexpected costs. #### How Railway billing works Your subscription fee ($5 Hobby, $20 Pro) is a minimum usage commitment. It covers your first $5 or $20 of resource usage each month. At the end of each billing cycle: - **Usage ≀ plan amount**: You owe nothing extra, just your subscription for the next month - **Usage > plan amount**: You pay the difference between your actual usage and what your plan already covered Your invoice combines two periods: - **Subscription** (billed in advance): Your minimum commitment for the upcoming month - **Usage overage** (billed in arrears): Any resource usage from the previous month that exceeded your plan's included amount **Example (Pro plan):** Your December 21 invoice includes: - $20 Pro subscription for Dec 21 – Jan 21 (next month) - $0 overage if Nov 21 – Dec 21 usage was under $20, OR the amount over $20 if you exceeded it In some cases, Railway may charge a partial amount earlier in the billing cycle to ensure your account remains in good standing and to help mitigate fraud. #### Why you're charged when your app has no traffic A common question: "Why am I being charged when my app has no traffic?" The key concept is that **you pay for allocated resources, not traffic**. When your service is running, it consumes CPU and RAM regardless of whether it's actively handling requests. Think of it like electricity: you pay for appliances that are plugged in and running, not just when you're actively using them. A server running idle still uses memory to stay loaded and CPU cycles to stay responsive. ##### Solutions to reduce idle costs | Solution | Description | | --------------------------------------------------- | -------------------------------------------------------- | | [Serverless](/deployments/serverless) | Automatically stops services when inactive | | [Usage Limits](/pricing/cost-control) | Set spending caps to prevent unexpected charges | | Delete unused services | Remove services you no longer need | | [Private Networking](/networking/private-networking) | Reduce egress costs by keeping traffic internal | #### Understanding included usage Both paid plans include a usage credit that offsets your resource consumption: | Plan | Subscription | Included Usage | | ---------- | ------------ | -------------- | | **Hobby** | $5/month | $5 | | **Pro** | $20/month | $20 | **How it works:** 1. Your subscription fee goes toward your resource usage 2. If usage stays within the included amount, you only pay the subscription fee 3. If usage exceeds the included amount, you pay the difference **Examples (Hobby plan):** | Resource Usage | Subscription | Included Usage Applied | Total Bill | | -------------- | ------------ | ---------------------- | ---------- | | $3 | $5 | $3 | $5 | | $5 | $5 | $5 | $5 | | $8 | $5 | $5 | $8 | | $15 | $5 | $5 | $15 | **Important:** Included usage credits reset each billing cycle. They do not accumulate or roll over to the next month. If you use $2 this month, you don't get $8 next month. #### Reading your invoice Your Railway invoice contains several line items. Here's what each means: Example Railway invoice showing resource usage, subscription, included usage discount, and applied balance ##### Subscription charges The flat fee for your plan appears as a line item: - "Hobby plan" - $5.00 - "Pro plan" - $20.00 Pro and Enterprise workspaces also show a per-seat line item: - "Pro (per seat)" - $0.00 (seats are free, this line just shows the member count) ##### Resource usage charges Resources are listed by type with the unit and billing period: | Line Item | Meaning | | ------------------------------------- | -------------------------------------------- | | "Disk (per GB / min)" | Volume storage charges | | "Network (per MB)" | Outbound data transfer (egress) charges | | "vCPU (per vCPU / min)" | CPU usage charges | | "Memory (per MB / min)" | RAM usage charges | Each line item shows the quantity used, unit price, and total amount for the billing period. ##### Included usage Your plan's included usage appears as a discount in the invoice summary: - "Hobby plan included usage ($5.00 off)" - "Pro plan included usage ($20.00 off)" The amount in parentheses shows the maximum credit available. The actual discount applied equals your resource usage up to that maximum. For example, if your resource usage is $15.39 on the Pro plan, you'll see "-$15.39" applied even though the max is $20.00. ##### Applied balance "Applied balance" appears in the invoice summary when you have account credits or small amounts carried forward: - **Credit applied**: If you have credits on your account (from refunds, promotions, or previous overpayments), they appear as a negative "Applied balance" reducing your amount due - **Small amounts deferred**: If your total invoice is less than $0.50, Railway marks it as paid and carries the amount forward to your next invoice ##### Tax and VAT If applicable based on your billing location, you may see: - "Sales Tax" or "VAT" as a separate line item Ensure your [billing information](https://railway.com/workspace/billing) is accurate to receive correct tax assessment. #### Common causes of unexpected charges ##### High network egress Network egress (outbound data transfer) is charged at $0.05/GB. Common causes of high egress: - **Not using private networking for databases**: If your app connects to your Railway database using the public URL instead of the private URL, all that traffic counts as egress. Use `DATABASE_URL` (private) instead of `DATABASE_PUBLIC_URL`. - **Large file transfers**: Serving large files, images, or videos directly from your service. - **API responses**: High-traffic APIs returning large payloads. **Solution:** Use [private networking](/networking/private-networking) for all service-to-service communication within Railway. ##### PR deploys / ephemeral environments When you have [PR deploys](/environments#ephemeral-environments) enabled, Railway creates a copy of your environment for each pull request. These environments run real services that consume real resources. If you have 5 open PRs, you may be running 5x your normal workload. **Solution:** Close PRs promptly or disable PR deploys if you don't need them. ##### Idle services still running Services consume resources even when not handling traffic. If you have development, staging, or test environments running continuously, they add up. **Solution:** Enable [Serverless](/deployments/serverless) on services that don't need to be always-on, or delete unused services. ##### Memory leaks If your application has a memory leak, it will gradually consume more RAM over time until it hits limits or gets restarted. This inflates your memory costs. **Solution:** Monitor your service metrics for growing memory usage and fix leaks in your application code. #### Related resources - [Plans and Pricing](/pricing/plans) - Detailed pricing information - [Pricing FAQs](/pricing/faqs) - Common pricing questions - [Optimize Usage](/pricing/cost-control) - Guide to reducing costs - [Usage Limits](/pricing/cost-control) - Set spending caps - [Serverless](/deployments/serverless) - Auto-stop inactive services - [Private Networking](/networking/private-networking) - Reduce egress costs ### FAQs Source: https://docs.railway.com/pricing/faqs.md General common Questions & Answers related to Railway's pricing. General common Questions & Answers related to Railway's pricing. ##### Can I try Railway without a credit-card? Yes. As a new Railway user, you can sign up for a [Free Trial](/pricing/free-trial). You will receive a one-time grant of $5 to use on resources. ##### What payment methods are accepted? Railway only accepts credit cards for plan subscriptions. We also support custom invoicing for customers on the Enterprise plan. ##### What will it cost to run my app? With Railway, you are billed for the [subscription fee](/pricing/plans#plan-subscription-pricing) of the plan you're subscribed to, and the [resource usage](/pricing/plans#resource-usage-pricing) of your workloads. To understand how much your app will cost to run on Railway, we recommend that you: 1. Deploy your project with the [Trial](/pricing/free-trial) or Hobby plan 2. Allow it to run for one week 3. Check your Estimated Usage in the [Usage Section](https://railway.com/workspace/usage) of your Workspace settings Keeping it running for one week allows us to rack up sufficient metrics to provide you with an estimate of your usage for the current billing cycle. You can then use this information to extrapolate the cost you should expect. We are unable to give exact quotes or estimates for how much it will cost to run your app because it is highly dependent on what you're deploying. If you are supporting a commercial application, we highly recommend you to upgrade to the Pro plan for higher resource limits and access to [priority support](/platform/support#priority-threads). ##### How do I prevent spending more than I want to? Check out the [guide on cost control](/pricing/cost-control). ##### Why is my resource usage higher than expected? You can check your resource usage in the [Usage Section](https://railway.com/workspace/usage) of your Workspace settings. This includes a breakdown of your resource usage by project, along with the resource it's consuming (CPU, Memory, Network, etc.) Common reasons for high resource usage include: - Memory leaks in your application, causing it to consume more memory than necessary - Higher traffic than usual, causing your app to consume more CPU and/or Network - Certain templates or apps may be inherently more resource-intensive than others - If you notice high egress cost in your bill, ensure that you are connecting to your Railway databases over [Private Networking](/networking/private-networking) - If you have [PR deploys](/environments#ephemeral-environments) enabled in your project, Railway will deploy a mirror copy of your workload(s) based on the environment it forks from (`production`Β by default). You are billed for those workload(s) running in the ephemeral environment Unfortunately, we are unable to assist with figuring out why your bill is higher than normal, as it is entirely dependent on what you have deployed. Resource usage is billed in a manner akin to how a utility company operates: they can tell you the amount of electricity you've consumed, but they can't explain the reasons for your high usage. Similarly, we can only provide information on the quantity of resources you consume, not the reasons behind it. ##### Why am I charged for more than $5 on the hobby plan? Railway's pricing has two components: a monthly subscription fee, and resource usage costs. While the Hobby plan includes $5 of resource usage per month, you are charged for any usage that exceeds this amount. Learn more [here](/pricing/plans#included-usage). ##### Why is there an "applied balance" on my invoice? When the amount due on your invoice is less than $0.50, and you do not have a credit balance, Railway marks the invoice as paid and registers the amount to your credit balance as a debit to be charged on a future invoice. ##### How do I view or upgrade my current plan? Your current plan is listed in the Account Selector in the top left corner of your Dashboard. You can also view your active plan and upgrade options from the [Plans](https://railway.com/workspace/plans) page. ##### How do I cancel my subscription? To cancel your active subscription, go to the "Active Plan" section of your [Billing](https://railway.com/workspace/billing) page and click `Cancel Plan`. When you cancel your subscription, Railway will stop all deployments in your workspace to prevent further charges. Your plan will remain active until the end of your billing cycle. ##### How do I add or update billing information? To add or update your Billing information, go to the [Billing](https://railway.com/workspace/billing) page. In the "Billing Info" section, you can add or update the following information: - Payment Method - Billing Email - Billing Address - Tax ID / VAT number When Billing Information is added or updated, it will be reflected on all future invoices from Railway. ##### How is sales Tax/VAT handled? Railway may collect applicable sales tax and VAT on your account based on your billing location and local tax requirements, where and when applicable. When assessed and collected, Sales Tax/VAT is explicitly outlined on your invoice. To ensure accurate tax assessment, Workspace Admins must verify that their billing information, including Billing Address, Organization Name, and Tax ID (when applicable), is accurate. Organization Name and Tax ID are not required when using Railway for personal use. To view and manage your subscription, visit the [billing section](https://railway.com/workspace/billing) of your workspace. ##### How do I remove my saved payment method from my account? If your subscription is canceled and you have no pending invoices, you can remove your saved payment method by doing the following: 1. Go to the [billing page](https://railway.com/workspace/billing) for your workspace 2. Click "Delete" in the payment method section ##### What happens if the payment fails for my subscription? If your subscription payment fails, we retry the payment method on file over several days. We also inform you of the payment failure, in case your payment method needs to be updated. If payment continues to fail, we flag your services to be stopped and send you a warning. If we do not receive payment, your services are stopped until all open invoices have been paid. ##### My services were stopped, what do I do? Your [services](/overview/the-basics#services) may be stopped by Railway for the following reasons, along with their solutions - - **Usage limits reached:** You've hit your [usage limits](/pricing/cost-control). Increase your usage limit, remove it entirely, or wait for the usage limit to reset. - **Trial credits exhausted:** You've run out of [trial credits](/pricing/free-trial#how-does-the-trial-work). Consider upgrading to [a paid plan](/pricing/plans#plans) to continue using the service. - **Failed payment:** Your payment method has failed. Update your payment method and [pay your outstanding invoice](https://railway.com/workspace/billing). - **Unpaid invoice:** You have an outstanding invoice. [Pay your outstanding invoice](https://railway.com/workspace/billing). Railway will automatically redeploy your services once the underlying issue is resolved, as long as it is resolved within a period of 30 days. After that, you will have to redeploy them manually from the Removed deployment's [3-dot menu](/deployments/reference#deployment-menu). **Note:** Although Railway will remove your deployment for any of the above reasons, Railway will not remove the [volume](/overview/the-basics#volumes) attached to the service. ##### I am a freelancer or represent an agency. How do I manage my billing relationships with my clients? Create a Pro plan on Railway and add the client to the workspace. If you run into issues when it's time to hand over your workload to your client, you can reach out to us over [Central Station](https://station.railway.com). ##### Why did I receive another invoice after cancelling my subscription? You may receive an invoice containing charges for Resource Usage after you cancel your subscription. These are resource usages you have consumed in that billing cycle that we reserve the right to charge you for. ##### How do I request a refund? Please refer to [Pricing -> Refunds](/pricing/refunds). ##### Requesting an invoice re-issuance If you encounter "This invoice can no longer be paid on Stripe" error or need your Tax ID added to a previous invoice, follow the steps below to get an invoice reissued. 1. Go to your workspace's billing page at [https://railway.com/workspace/billing](https://railway.com/workspace/billing). Ensure you select the correct workspace using the Workspace Switcher in the top left corner. 2. Scroll to **Billing History**. For the invoice you want to reissue, click on the Gear icon next to it and select **Re-issue**. Screenshot of invoice options 3. Follow the instructions in the pop-up: Screenshot of invoice re-issuance Before you re-issue an invoice, please ensure your [billing information is up-to-date](/pricing/faqs#how-do-i-add-or-update-billing-information). Once your invoice has been re-issued, it will contain the latest billing information, and appear in your **Billing History**. If you do not receive the re-issued invoice within 24 hours, please reach out to us at [station.railway.com](https://station.railway.com). ### Refunds Source: https://docs.railway.com/pricing/refunds.md Learn about Railway’s refund policy and how to request a refund if eligible. Refunds are for new customers who no longer wish to use Railway after initially trying it out. Railway offers refunds at its sole discretion, in line with Railway's [Terms of Service](https://railway.com/legal/terms). #### Requesting a refund You can request for a refund in [Workspace Settings -> Billing](https://railway.com/workspace/billing) under **Billing History**: Screenshot of refund request button inside Account -> Billing If you do not see a refund button next to your invoice, you are ineligible for a refund. **This decision is final** and we are unable to issue refunds for invoices that have been deemed ineligible. After a refund is issued, - It may take up to 5~10 business days for the refund to be processed and reflected in your account - Your subscription may be cancelled immediately by us - Your services may be taken offline immediately If you'd like to stop using Railway, please remove your projects and cancel your subscription immediately. See "[How do I view/manage/cancel my subscription?](/pricing/faqs#how-do-i-viewmanagecancel-my-subscription)" for further information. #### FAQs ##### Why was my refund request denied? Refunds are issued at Railway's sole discretion. If your refund request was denied, it may be due to one of the following reasons: - Your invoice contains resource usage costs. We generally do not issue refunds for resource usage, as those were resources you have consumed (in a manner akin to how a utility company charges for electricity or water) - You have received a refund from Railway in the past - You have violated Railway's [Fair Use Policy](https://railway.com/legal/fair-use) and/or [Terms of Service](https://railway.com/legal/terms) ### Cost control Source: https://docs.railway.com/pricing/cost-control.md Optimize your Railway projects for budget-friendly billing by setting limits and activating serverless. Railway provides controls over resource usage in the form of usage limits, resource limits, private networking, and serverless auto-sleeping of inactive services. #### Usage limits Usage Limits allow you to set a maximum limit on your usage for a billing cycle. If your resource usage for the billing cycle exceeds the limit you configured, we will shut down your workloads to prevent them from incurring further resource usage. ##### Configuring usage limits Usage Limits Modal Visit the Workspace Usage page to set the usage limits. Once you click the Set Usage Limits button, you will see a modal where you can set a Custom email alert and a Hard limit separately for **Compute Usage** and **Agent Usage**. The link above takes you to the usage page for your personal account. If you want to set a usage limit for your workspace, you can use the account switcher in the top left corner of your dashboard to access the workspace's usage page. You must be a workspace admin to configure usage limits. ##### Compute vs. Agent usage limits Compute and Agent usage are tracked and limited independently: - Compute Usage covers CPU, memory, storage, and network egress for your services. - Agent Usage covers [Railway Agent](/ai/railway-agent) LLM consumption. Hitting the Compute hard limit takes your workloads offline but leaves the agent available. Hitting the Agent hard limit disables the agent but leaves your workloads running. By default, Agent Usage has a hard limit of $5 on the Hobby plan and $20 on the Pro plan. You can raise or lower this limit at any time from the Workspace Usage page, but unlike the Compute limit, the Agent limit cannot be removed. ##### Custom email alert You can think of this as a _soft limit_. When your resource usage reaches the specified amount, we will email you that this threshold has been met. Your resources will remain unaffected. ##### Hard limit Once your resource usage hits the specified hard limit, all your workloads will be taken offline to prevent them from incurring further resource usage. Think of the hard limit as the absolute maximum amount you're willing to spend on your infrastructure. We will send you multiple reminders as your usage approaches your hard limit: 1. When your usage reaches 75% of your hard limit 2. When your usage reaches 90% of your hard limit 3. When your usage reaches 100% of your hard limit and workloads have been taken down. Setting a hard limit is a possibly destructive action as you're risking having all your resources shut down once your usage crosses the specified amount. ##### Usage limits FAQ Yes, usage limits are available for all subscription plans. No. You can leave the hard limit blank if you simply want to be notified at a particular amount of usage. The minimum amount you can specify as the hard limit is $10. To restart your resources, increase your usage limit or remove it entirely. Railway will automatically redeploy your stopped services once the limit is raised or removed. If automatic recovery fails for any service, you can manually redeploy from the deployment's [3-dot menu](/deployments#deployment-menu). Railway will try to automatically restart your resources during the next billing cycle, but if automatic recovery fails for any service, you can manually redeploy from the deployment's [3-dot menu](/deployments#deployment-menu). #### Replica limits Replica limits allow you to limit the maximum amount of CPU and memory available to each replica. To configure replica limits, navigate to your service's settings > Deploy > Replica Limits. Resource Limits setting Setting replica limits too low will cause your service to crash. Using replica limits makes sense in scenarios where: 1. You don't want to risk a high bill due to unexpected spikes in usage 2. You are okay with the service crashing if it exceeds the limit #### Use private networking Using [Private Networking](/networking/private-networking) when communicating with other services (such as databases) within your Railway project will help you avoid unnecessary Network Egress costs. ##### With databases Communicate with your Railway database over private networking by using the `DATABASE_URL` environment variable, instead of `DATABASE_PUBLIC_URL`. ##### With other services If your Railway services need to communicate with each other, you can find the service's private URL in the service settings: Private Network URL Learn more about Railway's Private Networking [here](/networking/private-networking). #### Enabling serverless Enabling Serverless on a service tells Railway to stop a service when it is inactive, effectively reducing the overall cost to run it. To enable Serverless, toggle the feature on within the service configuration pane in your project: Enable App Sleep 1. Navigate to your service's settings > Deploy > Serverless 2. Toggle "Enable Serverless" 3. To _disable_ Serverless, toggle the setting again Read more about how Serverless works in the [Serverless page](/deployments/serverless). ### Committed spend Source: https://docs.railway.com/pricing/committed-spend.md Learn about Railway's committed spend tier system. Railway offers committed spend tiers for customers with consistent usage needs. Instead of negotiated contract pricing, customers can commit to a specific monthly spend level to unlock additional features and services. #### Available tiers | Committed spend tier | Features | | -------------------- | ------------------------------------------------------------------------------------ | | $1000 | 90-day log history, HIPAA BAAs | | $2000 | Single Sign-On, Role-based access control, 18 month Audit Logs retention | | $5000 | Slack Connect channels, Critical level support tickets, Enterprise Resource Limits | | $10000 | Dedicated instances | #### How to subscribe These tiers can only be accessed from a workspace on the Pro plan. To access a committed spend tier: 1. Upgrade your workspace to the [Pro plan](/pricing/plans) if you haven't already. 2. Navigate to your workspace Settings -> Plans page. 3. Scroll down to see Committed Spend and Enterprise tier options. Committed spend on the pro plan #### Feature definitions ##### 90-day log history Extended log retention for better historical analysis and auditing. ##### HIPAA BAAs HIPAA Business Associate Agreements for compliant health data handling. Requires a year commitment paid monthly. ##### Single sign-on Allow workspace members to sign in using your organization’s Identity Provider (IdP), including Okta, Auth0, Microsoft Entra ID, Google Workspace, and more. ##### Role-based access control Restrict access to sensitive environments like production. Only workspace admins can access restricted environments. ##### 18 month audit logs retention Extended log retention for better historical analysis and auditing. ##### Enterprise Resource Limits Higher per-replica resource limits at 48 vCPU / 48 GB RAM / 50 replicas per service. Up to 2,400 vCPU / 2,4 TB RAM per service. ##### Slack Connect channels A private channel with the solutions team at Railway on Slack to facilitate better communication and support. ##### Critical level support tickets Critical tickets allow you to page our support on-call directly for an immediate response. ##### Dedicated instances Custom dedicated infrastructure for enhanced performance and control. #### FAQs ##### What happens if my usage is less than the committed spend tier I am subscribed to? We will add a line item to your invoice to make up for the difference and you will be billed the price of the committed spend tier you are on. For example: If you're subscribed to the $2000 tier and your usage is $1400, we will add a $600 line item making your bill $2000. ##### How do I cancel my committed spend tier subscription? You can cancel your commitment by going to your workspace billing page. Note: You will immediately lose access to the features attached to the tier upon cancelation. ##### My question isn't answered here, where can I speak to the team? To learn more about committed spend tiers, please [contact our team](mailto:team@railway.com?subject=Business%20Class%20Support). ### AWS Marketplace Source: https://docs.railway.com/pricing/aws-marketplace.md Learn about Railway's AWS Marketplace offering and pricing. Railway is available through the AWS Marketplace, allowing you to purchase and manage Railway through your AWS account. #### Offering For large Enterprises, Railway can be an option for large engineering teams to significantly reduce operational overhead. #### Pricing structure Pricing for Railway through AWS Marketplace is based on contract duration. You can pay upfront or in installments according to your contract terms with the vendor. The contract includes: - A specified quantity of usage for the contract duration - Usage-based pricing for any usage exceeding the entitled amount - Additional charges applied on top of the contract price for overages #### Contract terms ##### 12-month contract The standard offering is a 12-month contract with the following terms: - Base price: $10,000.00 per 12 months - Overage rate: $1.00 per unit - Private pricing agreements available through the Railway sales team #### Refund policy All fees are non-refundable and non-cancellable except as required by law. #### Getting started To purchase Railway through AWS Marketplace: 1. Visit the Railway listing on AWS Marketplace 2. Click "View purchase options" 3. Contact the Railway sales team 4. Complete the purchase through your AWS account #### Support For questions about AWS Marketplace purchases or to discuss private pricing agreements, [please contact the Railway sales team.](https://cal.com/team/railway/work-with-railway) ### Credits Source: https://docs.railway.com/pricing/credits.md Learn how credits apply to your Railway account if part of a promotion. If you are part of a credit promotion for Railway, this page covers how to activate and use your credits. This does not include the referral program as that functions differently - please see information [referrals here](/access/accounts#referrals). #### Eligibility Credits and promotions only apply to new signups. If you already have an account, or signed up before navigating to the unique promotion link, the credits will not apply to you. #### Activating Your Credits To activate your credits: 1. Sign up for Railway using the unique link provided to you. 2. Navigate to the [Plans page](https://railway.com/workspace/plans) to upgrade your plan to Hobby. On the page, you will see the name of your promotion if it applies to your account. For more information on available plans, see the [Pricing Plans](/pricing/plans) docs. Promotion name on plans page 3. Enter your credit card details. A credit card is required to cover any usage that exceeds your credit amount. You will see the credits applied to your next invoice. #### Viewing Your Credits Once you have upgraded, you can view your credit and promotion details by navigating to [Workspace Settings > Billing](https://railway.com/workspace/billing). There you will find: - Whether a promotion code applies to your account - The credit value and duration of the promotion Promotion details on billing page ## Enterprise ### Compliance Source: https://docs.railway.com/enterprise/compliance.md Learn about Railway's compliance standards and how we ensure security and regulatory adherence. Railway is designed to be used by companies of all sizes. We understand that companies have different needs when it comes to compliance and security. We are happy to work with you to ensure that Railway meets your needs. We work with teams across regulated industries such as government, healthcare, and finance to ensure that Railway meets their needs. Companies choose Railway so that they can speed up their development velocity while also maintaining their security and compliance posture. We are happy to sign NDAs with your company to provide additional information about Railway's security and compliance practices. Please reach out to us at [team@railway.com](mailto:team@railway.com) to get started, or click [here](https://cal.com/team/railway/work-with-railway?duration=30) to book some time to chat. You can request to view Railway's audit, compliance, security, and regulatory documents and processes on the [Trust Center at trust.railway.com](https://trust.railway.com). Additionally, the Railway enterprise plan is the most secure and compliant option. [Read about the Railway enterprise plan here](https://railway.com/enterprise). #### Certifications We know that your businesses need to develop strong and lasting relationships with your vendors to build confidence that we can be trusted to deliver your workloads. Part of that is through certifications, audits, and continual refinement of Railway's practices. Railway aims to comply with all the distributions of workloads and privacy procedures. ##### SOC 2 type ii and SOC 3 Railway is SOC 2 Type II certified and SOC 3 certified. Customers who are in the process of securing SOC 2 certification can request a copy of the Railway security audit on the [Trust Center](https://trust.railway.com). ##### HIPAA BAA Railway follows a shared responsibility model for HIPAA compliance and PHI. Railway will make its best effort to advise your company on setting up encryption for your data, auditing the storage of keys, establishing access control, and ensuring secure storage of sensitive patient data. When a BAA is in effect, the Railway team will no longer be able to directly access your running workloads. HIPAA BAA is an add-on with a paid monthly spend threshold. All pricing goes towards your [usage on Railway](/pricing/plans#committed-spend-tiers). Monthly thresholds for addons is found in the [committed spend pricing](/pricing/plans#committed-spend-tiers). If your company needs a BAA, you can contact the Railway solutions team at [team@railway.com](mailto:team@railway.com), or click [here](https://cal.com/team/railway/work-with-railway?duration=30) to schedule some time to chat. #### Privacy Railway is committed to protecting the privacy of Railway's users. We understand that when working with user code and data, it is important to have a clear understanding of how we handle your data. Railway, on behalf of Railway's users, may remove offending workloads but at no point will a Railway team member modify your application without your expressed permission through an approved communication channel. [Click here to see Railway's Privacy Policy.](https://railway.com/legal/privacy) #### GDPR compliance - data processing agreement (DPA) Railway provides a Data Processing Agreement (DPA) to help customers comply with GDPR requirements when processing personal data through the Railway platform. If you operate a business in the EU or process personal data of EU residents, you may need to execute a DPA with Railway to ensure compliance with GDPR Article 28 requirements for data processor relationships. You can access and execute Railway's standard DPA through the self-service link: [Sign Railway's DPA](https://powerforms.docusign.net/0c38a448-eda3-4139-99d6-f9c0eef94154?env=na4&acct=c0c04fce-9579-4f79-b028-7a946a40077d&accountId=c0c04fce-9579-4f79-b028-7a946a40077d) You can also review Railway's standard DPA terms at [railway.com/legal/dpa](https://railway.com/legal/dpa). #### VAT tax ID and address Customers in the EU may need to add their VAT Tax ID to their invoices for compliance and reporting purposes. You can add your VAT Tax ID and address on Railway in your [Workspace settings](https://railway.com/workspace/billing) -> Billing -> Manage Subscription. If you have multiple workspaces, you need to add your VAT Tax information to each respective Workspace's Subscription. After adding your information, it will appear on your future invoices. #### EU DORA For European organizations in finance that need to comply with [EU Dora](https://www.eiopa.europa.eu/digital-operational-resilience-act-dora_en) - Railway is willing to provide documents after a click through NDA that describe disaster recovery procedures, uptime statistics, and IT controls for organizations to who need to submit compliance documents to local regulators. You can get information on the [Trust Page](https://trust.railway.com) #### Deploy securely on Railway If compliance is top of mind, the Railway enterprise plan will meet your needs. From product features like SSO, to higher capacity limits, to security audits, the Railway enterprise plan is made to satisfy even the largest organizations. [Read more about the Railway enterprise plan](https://railway.com/enterprise). ### Audit logs Source: https://docs.railway.com/enterprise/audit-logs.md Learn more about how Railway keeps a record of actions in workspaces. Audit logs provide a record of actions performed within your Railway [workspace](/projects/workspaces). This includes changes to projects, services, deployments, variables, and workspace settings. Audit logs can be accessed by workspace admins through the **Audit Logs** link in the workspace settings. Audit logs help teams with: - **Security:** Track who made changes to sensitive resources like environment variables, integrations, or workspace settings - **Compliance:** Maintain records of all changes for regulatory requirements and internal policies - **Troubleshooting:** Identify when and how changes were made to diagnose issues - **Team Coordination:** Understand what changes team members are making across projects - **Change Management:** Review the history of deployments and configuration changes Screenshot of audit log list #### Accessing audit logs Audit logs are available at the workspace level and can be accessed by workspace admins through the workspace settings page. To view audit logs: 1. Navigate to your workspace dashboard 2. Click on **Audit Logs** in the sidebar For more information about workspace roles and permissions, see the [Workspaces documentation](/projects/workspaces). #### Log contents Each audit log entry contains detailed information about the action that was performed: - **Event Type:** The type of action that occurred (e.g., service created, variable updated, deployment triggered) - **Timestamp:** When the action was performed - **Workspace:** The workspace where the action occurred - **Project:** The project affected by the action (if applicable) - **Environment:** The environment affected by the action (if applicable) - **Event Data:** Specific details about the change, such as resource data that was created, modified, or deleted - **Actor:** Information about who or what performed the action Screenshot of audit log details ##### Actor types Actions in audit logs can be performed by three types of actors: - **User:** An action performed by a workspace or project member - **Railway Staff:** An action performed by Railway's team (typically during support requests) - **Railway System:** An automated action performed by Railway's platform (e.g., automatic updates, backups) Historic events from before audit logs were released may not contain information about the actor. #### Listing all audit logs event types The complete documentation of all audit log event types and their descriptions can be retrieved using the [Railway GraphQL API](/integrations/api). You can explore this information using the GraphiQL playground: ```graphql { auditLogEventTypeInfo { eventType description } } ``` This query returns all available event types in audit logs, along with a description of what each event represents. #### Exporting audit logs via the API You can export audit logs programmatically using the [Railway GraphQL API](/integrations/api). Use the `auditLogs` query to retrieve audit log entries for a specific workspace. You can test this query in the GraphiQL playground: ```graphql { auditLogs(workspaceId: "YOUR_WORKSPACE_ID") { edges { node { id eventType createdAt projectId environmentId payload context } } pageInfo { endCursor hasNextPage hasPreviousPage startCursor } } } ``` For more information on using the GraphQL API, see the [Public API Guide](/integrations/api). #### Audit log retention Audit logs are retained for different periods depending on your Railway plan: | Plan | Retention Period | | -------------------------- | ---------------- | | **Free, Trial and Hobby** | 48 hours | | **Pro** | 30 days | | **Enterprise** | 18 months | For longer retention periods or custom log export solutions, consider upgrading to a higher plan or [contact us](https://railway.com/enterprise) to discuss Enterprise options. ### SAML SSO Source: https://docs.railway.com/enterprise/saml.md Learn about how to configure and use SAML Single Sign-On (SSO) for your Railway workspace. SAML SSO is available on [Railway Enterprise](/enterprise). **SAML Single Sign-On (SSO)** allows workspace members to sign in using your organization’s Identity Provider (IdP), including Okta, Auth0, Microsoft Entra ID, Google Workspace, and more. New users signing in with your Identity Provider are automatically added to your workspace as [workspace members](/projects/workspaces#managing-workspaces). #### Configuring SAML SSO Screenshot of SAML Settings and Trusted Domains To configure SAML SSO, go to your workspace’s People settings. You must be a workspace admin with access to your Identity Provider’s configuration panel. 1. Add your organization’s email domain(s) as [**Trusted Domains**](/projects/workspaces#trusted-domains). 2. In the **SAML Single Sign-On** section, click **Configure** and follow the guided setup to connect your Identity Provider to Railway. 3. Optionally, [enforce SAML SSO](#enforcing-saml-sso) to require members to log in through your Identity Provider. Once configured, users can [login using SAML SSO](#login-using-sso) using their organization email. Existing users must update their Railway email if it differs from their Identity Provider email. _If you’re a Railway Enterprise customer and don’t see the SAML settings in your workspace, please contact us._ #### Enforcing SAML SSO Screenshot of enforcing SAML SSO in a workspace Workspace admins can **enforce SAML SSO** to ensure all members access the workspace with your Identity Provider. - **Enable enforcement** by toggling "Members need to login with SAML SSO." - Only workspace admins already logged in with SAML SSO can enable enforcement. - When enforcement is active, users not authenticated with SAML SSO can’t open the workspace or access its resources. - Enforcement takes effect immediately. Active users without SAML authentication will be prompted to re-authenticate. Note: Enforcement will not limit which login methods a user can use. Because Railway users can be members of multiple workspaces, they can still log in with other methods, but must use SAML SSO to access the SAML-enforced workspace. #### Login using SSO After SAML SSO is enabled, users can log in using their organization’s email by selecting _"Log in using Email"_ β†’ _"Log in using SSO"_. Alternatively, go directly to https://railway.com/login#login-saml. Railway also supports IdP-initiated SSO, allowing users to access Railway directly from their Identity Provider’s dashboard. #### Supported identity providers We support all identity providers that use **SAML** or **OIDC**, including: - Okta - Microsoft Entra ID (Azure AD) - Auth0 - Google - JumpCloud - ADP - CAS - ClassLink - Cloudflare - Ping Identity - CyberArk - Duo - Keycloak - LastPass - Login.gov - miniOrange - NetIQ - OneLogin - Oracle - Rippling - Salesforce - Shibboleth - SimpleSAMLphp - VMware Workspace and any other provider compatible with **SAML** or **OIDC**. #### SSO-related events You can receive notifications when important SSO-related events were triggered: - **SSO Connected:** when an Identity Provider is successfully connected to the workspace. - **SSO Disconnected:** when the Identity Provider is disconnected from the workspace. - **SSO Updated:** when [SAML enforcement](#enforcing-saml-sso) is enabled or disabled. - **SAML Certificate requires renewal:** when the SAML certificate is nearing expiration or has expired. This event is triggered multiple times before and after expiration. - **SAML Certificate renewed:** when the SAML certificate is successfully renewed. ### Environment RBAC Source: https://docs.railway.com/enterprise/environment-rbac.md Restrict access to sensitive environments like production with role-based access control. Environment RBAC is available on [Railway Enterprise](https://railway.com/enterprise). Environment RBAC (Role-Based Access Control) allows you to restrict access to sensitive environments like production. This ensures that only authorized team members can view or modify critical infrastructure. #### How it works When an environment is marked as restricted: - **Non-admin members** can see that the environment exists but cannot access its resources - **Restricted resources** include variables, logs, metrics, services, and configurations - **Deployments** can still be triggered via git push, allowing developers to deploy without accessing sensitive data This separation allows development teams to deploy code while keeping production secrets and configurations secure. #### Enabling environment RBAC Subscribe to a [committed spend plan](/pricing/committed-spend) to enable RBAC. Once enabled for your workspace: 1. Go to **Project Settings β†’ Environments** 2. Find the environment you want to restrict (e.g., `production`) 3. Toggle the **Restricted** switch Restricted environments toggle in Project Settings #### Role permissions | Role | Can access restricted environments | Can toggle restriction | | :--- | :---: | :---: | | Admin | βœ”οΈ | βœ”οΈ | | Member | ❌ | ❌ | | Deployer | ❌ | ❌ | ##### Admin Admins have full access to all environments, including restricted ones. They can: - View and modify variables, services, and configurations - Access logs and metrics - Toggle the restricted status on any environment ##### Member Members cannot access restricted environments. They can: - See that the environment exists in the project - Trigger deployments via git push - Access non-restricted environments normally ##### Deployer Deployers have the same restrictions as Members for restricted environments. They can: - Trigger deployments via git push - Cannot view variables, logs, or configurations in restricted environments #### Use cases ##### Protecting production secrets Keep production API keys, database credentials, and third-party service tokens hidden from developers who don't need access. ##### Compliance requirements Meet security compliance requirements (SOC 2, HIPAA, etc.) by limiting access to production data and configurations. ##### Separation of duties Allow developers to deploy code without having access to view or modify production infrastructure settings. #### Best practices 1. **Restrict production by default** - Mark your production environment as restricted immediately after enabling the feature 2. **Limit admin count** - Only grant admin access to team members who need to manage production configurations 3. **Use staging for debugging** - Keep a non-restricted staging environment that mirrors production for debugging purposes 4. **Audit regularly** - Review who has admin access periodically to ensure it aligns with current team responsibilities #### Related - [Environments](/environments) - Learn about environment management - [Project Members](/projects/project-members) - Manage team access and roles - [Enterprise Features](https://railway.com/enterprise) - Explore other enterprise capabilities ### Guardrails Source: https://docs.railway.com/enterprise/guardrails.md Enforce workspace-level policies that restrict public networking and deployment sources. Guardrails are available on eligible [committed spend plans](/pricing/committed-spend). Contact us to learn more. Guardrails are workspace-level policies that restrict what members can do across every project in the workspace. A workspace admin toggles a policy once, and Railway enforces it in the dashboard and at the API level without any per-project configuration. Three policies are available: | Policy | What it restricts | Applies to | |--------|-------------------|------------| | Restrict generate domain | Generating `*.railway.app` service domains | Non-admin members | | Restrict TCP proxy | Creating public TCP proxies | Non-admin members | | Restrict deployments to approved sources | Deploying from sources outside approved GitHub organizations | All members, including admins | #### Restrict public networking Rolling Railway out to a large team means trusting that developers won't accidentally expose internal services to the public internet. The two public networking policies remove that risk: - **Restrict generate domain** prevents non-admin members from generating public `*.railway.app` domains on their services - **Restrict TCP proxy** prevents non-admin members from creating public TCP proxies Workspace admins retain full access, so they can still generate domains and create TCP proxies where needed. Non-admin members see a banner in the service's networking settings explaining the restriction, and requests through the API are rejected. While a policy is enabled, Railway also skips automatic generation for everyone, including admins: - Services created from a template don't automatically get a service domain or TCP proxy - New environments don't auto-generate service domains Custom domains aren't restricted, and services remain reachable over [private networking](/networking/private-networking), so internal traffic between services is unaffected. #### Restrict deployment sources The **Restrict deployments to approved sources** policy blocks any deployment whose source can't be verified against an allowlist of approved GitHub organizations. Unlike the public networking policies, it applies to every workspace member, including admins. This makes it a hard boundary for the whole workspace rather than a per-role restriction. When the policy is enabled: - Deployments from repositories owned by an approved GitHub organization work normally - Deployments from any other repository are blocked, including personal repositories - CLI deploys with `railway up`, Docker image deploys, function services, and template deploys are blocked, because their source can't be verified against a GitHub organization - Official Railway database templates (such as PostgreSQL, MySQL, Redis, and MongoDB) remain deployable Railway enforces the policy when a deployment is created, when a service is created with a source, and when a service's source changes. Disconnecting a source from a service is always allowed. In the dashboard, the template, Docker image, and function options are disabled while the policy is active. Railway matches repositories against the allowlist by GitHub organization ID rather than name, so renaming a GitHub organization doesn't break the policy. **Note:** Enabling the policy doesn't affect existing deployments. Enforcement applies to new deployments, new services, and service source changes. #### Configure guardrails Guardrails are managed in workspace settings. Only workspace admins can view or change policies. 1. Navigate to your workspace settings and open **Guardrails**. 2. Toggle **Restrict generate domain** or **Restrict TCP proxy** to enable either public networking policy. 3. To restrict deployment sources, click **Add GitHub organization** under **Approved sources** and add an organization. 4. Toggle **Restrict deployments to approved sources** on. The organization picker only lists GitHub organizations where Railway's GitHub app is installed and you're an organization admin. The deployment source policy requires at least one approved organization before you can enable it, and the last approved organization can't be removed while the policy is enabled. Disable the policy first if you need to clear the allowlist. Enabling or disabling a policy and updating the allowlist are recorded in the workspace [audit logs](/enterprise/audit-logs). #### Related - [Committed spend plans](/pricing/committed-spend) - [Audit logs](/enterprise/audit-logs) - [Environment RBAC](/enterprise/environment-rbac) - [Public networking](/networking/public-networking) - [TCP proxy](/networking/tcp-proxy) ## AI ### Railway Agent Source: https://docs.railway.com/ai/railway-agent.md Chat with the Railway Agent to manage services, diagnose failures, and ship fixes directly from the Railway dashboard. The Railway Agent is a chat-based AI assistant built into the Railway dashboard. It can operate the platform on your behalf: creating and configuring services, inspecting deployments, diagnosing failures, and opening pull requests to fix broken builds. #### What the agent can do The agent has access to the same primitives you do, so it can act across your entire project. The agent can: - Create services, set variables, connect databases, wire up networking, and adjust resource limits. - List projects, environments, services, and deployments, and read logs or metrics. - Walk through a failing deployment, read build and runtime logs, and explain what went wrong. - Identify the cause of a failed deployment and open a pull request against your repository with a proposed fix. #### Automatic deployment diagnosis When a deployment fails, the agent can automatically investigate. It reads the build and runtime logs, correlates them with your service configuration and recent code changes, and produces a short explanation of the failure. If the fix is in your code, the agent can open a pull request with the change so you can review and merge it. #### Pricing Usage of the Railway Agent is billed based on the underlying LLM tokens consumed, at the exact per-token rates published on anthropic.com/pricing, with no markup. See [Pricing](/pricing#railway-agent) for details. --- ### Agent integrations Source: https://docs.railway.com/ai/agent-integrations.md Bring the Railway Agent into your team chat β€” mention @Railway in Slack or Discord to work with your projects from the conversation. Agent integrations are in beta. Breaking changes may occur. The Railway Agent can join your team chat. Once installed, mention **@Railway** in Slack or Discord to ask about your projects, inspect deployments, read logs, and make changes β€” the same [Railway Agent](/ai/railway-agent) that runs in the dashboard, answering where your team already works. #### Available integrations - [Slack](/ai/agent-integrations/slack) β€” install the app to your Slack workspace and link it with `/railway-link`. - [Discord](/ai/agent-integrations/discord) β€” add the app to your Discord server and link it with `/link workspace`. #### How it works Two connections make the agent available in a chat workspace: 1. **Your account** β€” each person links their Slack or Discord identity to their Railway account. The agent acts with *your* access, never someone else's. 2. **The workspace** β€” a Railway workspace admin links the Slack workspace or Discord server to a single Railway workspace. This decides which projects the agent can see and which workspace pays for usage. Both are checked on every message. If you leave the Railway workspace, the agent stops responding to you immediately. #### Managing connections [Account Settings](https://railway.com/account) shows everything in one place: - **Your account links** appear under Account Integrations, with a disconnect option for each. - **Workspace connections** appear on the Slack and Discord cards as "Agent linked to *workspace*" rows. Workspace admins can remove a connection there β€” the agent stops responding in that server immediately. Removing the connection doesn't uninstall the app from Slack or Discord; do that from the chat platform's own settings. To reconnect or point a server at a different Railway workspace, run the link command again β€” no need to reinstall. #### Permissions and billing - Linking a chat workspace requires **admin** on the Railway workspace, and so does removing the link. - Using the agent requires being a **member** of the linked Railway workspace, re-checked on every message. - Agent usage in chat is billed to the linked Railway workspace at the same rates as the dashboard agent. See [Pricing](/pricing#railway-agent) for details. ### Slack Source: https://docs.railway.com/ai/agent-integrations/slack.md Install the Railway Agent in your Slack workspace and work with your projects from chat. Agent integrations are in beta. Breaking changes may occur. Mention **@Railway** in Slack to ask the [Railway Agent](/ai/railway-agent) about your projects, inspect deployments, read logs, and make changes without leaving the conversation. #### Set up 1. Go to [Account Settings](https://railway.com/account) β†’ **Railway Agent Integrations** and click **Add to Slack**. Approve the install for your Slack workspace. 2. Mention **@Railway** in any channel. The first time, it replies with a link to connect your Slack identity to your Railway account β€” follow it. 3. A Railway workspace admin runs `/railway-link` in a channel (not a thread) and picks the Railway workspace to connect. 4. That's it β€” mention **@Railway** with a question. Each teammate connects their own account (step 2); the workspace link (step 3) only needs to happen once. Run `/railway-link` again at any time to point the workspace at a different Railway workspace. #### Channels The agent can reply in any public channel. For private channels, invite it first with `/invite @Railway`. #### Removing the integration Workspace admins can remove the workspace connection from [Account Settings](https://railway.com/account) β€” see [Managing connections](/ai/agent-integrations#managing-connections). The agent stops responding in that Slack workspace immediately; uninstall the app itself from Slack's own admin settings. ### Discord Source: https://docs.railway.com/ai/agent-integrations/discord.md Install the Railway Agent in your Discord server and work with your projects from chat. Agent integrations are in beta. Breaking changes may occur. Mention **@Railway** in Discord to ask the [Railway Agent](/ai/railway-agent) about your projects, inspect deployments, read logs, and make changes without leaving the conversation. #### Set up 1. Go to [Account Settings](https://railway.com/account) β†’ **Railway Agent Integrations** and click **Add to Discord**. Authorize the app into your server. 2. Connect your Discord account to Railway under **Account Integrations** on the same page. If you skip this, the agent will prompt you the first time you mention it. 3. A Railway workspace admin runs `/link workspace` in the server and picks the Railway workspace to connect. 4. Mention **@Railway** with a question. Each teammate connects their own account (step 2); the server link (step 3) only needs to happen once. Run `/link workspace` again at any time to point the server at a different Railway workspace. #### Removing the integration Workspace admins can remove the server connection from [Account Settings](https://railway.com/account) β€” see [Managing connections](/ai/agent-integrations#managing-connections). The agent stops responding in that server immediately; remove the app itself from Discord's own server settings. ### Agent skills Source: https://docs.railway.com/ai/agent-skills.md Agent skills for interacting with Railway directly from your AI coding assistant. Agent skills for interacting with [Railway](https://railway.com) directly from your AI coding assistant. #### What are agent skills? Agent Skills are an open format for extending AI coding assistants with specialized knowledge and capabilities. They follow the [Agent Skills](https://agentskills.io) specification. Skills are markdown files (`SKILL.md`) that contain: - **Metadata** in YAML frontmatter - **Instructions** with step-by-step guidance for the AI agent - **Examples** showing expected behavior When you ask your AI assistant something like "deploy to Railway" or "check my project status," the agent automatically selects the appropriate skill based on your intent and follows its instructions. ##### Supported tools - Claude Code - OpenAI Codex - OpenCode - Cursor #### Installation To install the Railway CLI and configure Railway agent support in one step: ```bash curl -fsSL agents.railway.com | sh ``` This installs or reuses the Railway CLI, installs the `use-railway` skill, configures Railway MCP for detected tools, and checks Railway authentication. If `railway` is already on `PATH`, the installer reuses it without changing `PATH`. If you are not already logged in, run `railway login` after setup. If the Railway CLI is already installed, you can run the agent setup directly: ```bash railway setup agent ``` To install only the agent skills, use the [`railway skills`](/cli/skills) command: ```bash railway skills install ``` You can also install via skills.sh: ```bash npx skills add railwayapp/railway-skills ``` Supports Claude Code, OpenAI Codex, OpenCode, and Cursor. Re-run to update. **Note:** For Claude Code, you can also install through the [Claude Code plugin marketplace](/ai/claude-code-plugin). #### The use-railway skill The repository ships one skill called `use-railway`. It uses a route-first design where intent routing is defined in the skill file and execution details are split into action-oriented references. ##### Workflow coverage The `use-railway` skill covers the following areas: - **Project and service setup** - Create projects, add services, scaffold code for deployment, and link existing projects - **Deploy and release operations** - Push code to Railway, manage deployments, and handle the deployment lifecycle - **Troubleshooting and recovery** - View build and deploy logs, redeploy, restart, or remove deployments - **Environment config and variables** - Query and modify service configuration, environment variables, build/deploy commands, replicas, health checks, and restart policies - **Feature flags** - List, inspect, create, update defaults, and delete project-scoped flags via MCP; read workspace-scoped flags - **Bucket management** - Create, list, inspect, rename, and delete storage buckets, and view or reset S3-compatible credentials - **Networking and domains** - Add Railway-provided domains, configure custom domains, and manage domain settings - **Status and observability** - Check project status, query resource usage metrics (CPU, memory, network, disk), and monitor services - **Projects and workspaces** - List projects, switch between projects, and manage project settings - **Docs and community search** - Fetch Railway documentation and search Central Station for community threads and discussions #### Source The Railway agent skills are open-source and available on GitHub. ### Claude Code plugin Source: https://docs.railway.com/ai/claude-code-plugin.md Install the Railway plugin for Claude Code to manage your infrastructure with natural language. The Railway plugin for Claude Code provides skills, hooks, and tooling for managing Railway projects and deployments directly from your terminal. The plugin is distributed through Claude Code's plugin marketplace system and installs the [`use-railway`](/ai/agent-skills#the-use-railway-skill) agent skill along with supporting scripts and hooks. #### Prerequisites - Claude Code installed (version 1.0.33 or later) - The [Railway CLI](/cli) installed and authenticated #### Installation From within Claude Code, add the Railway plugin marketplace: ```bash /plugin marketplace add railwayapp/railway-skills ``` This registers the Railway marketplace and makes the plugin available to install. Install the Railway plugin from the marketplace: ```bash /plugin install railway@railway-skills ``` You can also browse and install through the interactive plugin manager by running `/plugin` and navigating to the **Discover** tab. After installation, the plugin's skills are available in your Claude Code session. Ask your assistant to deploy services, check project status, manage environments, or perform any of the tasks covered by the [`use-railway` skill](/ai/agent-skills#the-use-railway-skill). #### Update the plugin To update to the latest version, refresh the marketplace and reinstall: ```bash /plugin marketplace update railway-skills ``` You can also enable auto-updates for the marketplace through the `/plugin` interface under the **Marketplaces** tab. #### What's included The plugin installs the following components: - **`use-railway` skill** - A route-first agent skill that covers project setup, deployments, troubleshooting, environment configuration, networking, observability, and more. See [Agent Skills](/ai/agent-skills) for the full list of capabilities. The skill includes action-oriented reference documents and a GraphQL API helper script for authenticated Railway API requests. - **Auto-approve hook** - A `PreToolUse` hook that automatically approves Railway CLI commands and Railway API script calls, so Claude Code doesn't prompt for permission on every Railway operation. #### Alternative installation If you prefer to install the agent skill without the Claude Code plugin system, use the [`railway skills`](/cli/skills) command, which works across multiple AI coding assistants: ```bash railway skills install ``` See [Agent Skills](/ai/agent-skills) for more details. #### Source The Railway Claude Code plugin is open-source and available on GitHub. ### MCP server Source: https://docs.railway.com/ai/mcp-server.md Connect AI coding agents to Railway via the Model Context Protocol β€” either through the Railway CLI locally or the hosted remote MCP endpoint. The [Railway MCP Server](https://github.com/railwayapp/railway-mcp-server) is a [Model Context Protocol (MCP)](https://modelcontextprotocol.org) server that enables natural language interaction with your Railway projects and infrastructure. Ask your IDE or AI assistant to create projects, deploy templates, manage environments, pull variables, redeploy services, and more. Railway offers two ways to connect: * **Local MCP** β€” runs through the [Railway CLI](/cli) on your machine. Recommended for most coding-agent workflows since it shares the CLI's authentication and project context. * **Remote MCP** β€” a hosted endpoint at `mcp.railway.com`. No local install or CLI required; clients authenticate through OAuth in the browser. #### Quick start Install the Railway CLI and configure agent support β€” skills, MCP, and authentication β€” in one command. Toggle the options to tailor the command to what you want set up: If the CLI is already installed, skip the bootstrap and run: ```bash railway setup agent # local MCP railway setup agent --remote # remote MCP ``` Read on for per-editor manual configuration, the available tool list, and security considerations. #### Per-editor configuration If you'd rather wire up an editor by hand β€” or want to see exactly what `railway mcp install` writes β€” use the toggle to switch between the local stdio config and the remote HTTP config: `railway mcp install` merges the Railway server entry into existing configs without removing other MCP servers. Re-run it any time to update. #### Understanding MCP The **Model Context Protocol (MCP)** defines a standard for how AI applications (hosts) can interact with external tools and data sources through a client-server architecture. * **Hosts**: Applications such as Cursor, VS Code, Claude Code, or Windsurf that connect to MCP servers. * **Clients**: The layer within hosts that maintains one-to-one connections with individual MCP servers. * **Servers**: Standalone programs (like the Railway MCP Server) that expose tools and workflows for managing external systems. The local Railway MCP Server translates natural language requests into CLI workflows powered by the [Railway CLI](/cli). The remote MCP server runs on Railway's infrastructure and authenticates via OAuth. #### Prerequisites * **Local MCP** β€” install and authenticate the [Railway CLI](/cli). * **Remote MCP** β€” a [Railway account](https://railway.com/login). No local install required. #### Example usage * **Create and deploy a new app** ```text Create a Next.js app in this directory and deploy it to Railway. Also assign it a domain. ``` * **Deploy from a template** ```text Deploy a Postgres database ``` * **Pull environment variables** ```text Pull environment variables for my project and save them to a .env file ``` * **Debug a failing deployment** (remote-only `railway-agent` tool) ```text Use the railway agent to figure out why my backend service is crashing on deploy ``` * **Redeploy a service** ```text Redeploy my api service in the production environment ``` * **Manage feature flags** ```text List feature flags for project ``` ```text Set the checkout-v2 feature flag to true on project ``` #### Available MCP tools The Railway MCP Server provides a curated set of tools. Your AI assistant calls these automatically based on the context of your request. ##### Local MCP The local server runs through the Railway CLI and exposes a broader set of CRUD tools: * **Status** * `check-railway-status` β€” verify CLI installation and authentication * **Projects & services** * `list-projects`, `create-project-and-link` * `list-services`, `link-service` * `deploy` β€” deploy a service * `deploy-template` β€” deploy from the [Railway Template Library](https://railway.com/deploy) * **Environments** * `create-environment`, `link-environment` * **Configuration** * `list-variables`, `set-variables` * `generate-domain` * **Observability** * `get-logs` ##### Remote MCP The remote server exposes a focused set of tools plus a powerful agent entry point. For anything complex, delegate to `railway-agent`. * **Account** * `whoami` * **Projects** * `list-projects`, `create-project`, `list-services` * **Feature flags** * `list-feature-flags`, `get-feature-flag` * `set-feature-flag`, `delete-feature-flag` (admin; destructive delete is marked at the protocol level) * **Deployments** * `redeploy` * `accept-deploy` β€” commit staged changes and deploy (destructive; clients prompt for confirmation) * **Agent** * `railway-agent` β€” hand a natural-language request to Railway's AI agent for multi-step operations like log analysis, debugging, and service configuration #### Security considerations The Railway MCP Server runs CLI commands or invokes Railway APIs on your behalf. Destructive operations are intentionally excluded from the local server's tool list, but you should still: * **Review actions** requested by the LLM before approving them, especially destructive ones (`redeploy`, `accept-deploy`, `railway-agent`). * **Restrict access** to ensure only trusted users can invoke the MCP server. * **Avoid production risks** by limiting usage to non-critical environments where possible. For the remote server specifically: * **OAuth scoping.** When you consent, you choose which workspaces and projects the client can access. Tokens are short-lived and can be revoked from your Railway account settings. * **Destructive actions** are marked at the protocol level. Clients that respect these hints will prompt for confirmation. * **Project tokens are not accepted.** The remote MCP server requires a user identity for billing and audit trails. #### Feature requests The Railway MCP Server is a work in progress. We are actively adding more tools and features. If you have a feature request, leave your feedback on this [Central Station](https://station.railway.com/feedback/model-context-protocol-for-railway-railw-c040b796) post. ## Templates & open source --- ### Deploy Source: https://docs.railway.com/templates/deploy.md Learn how to deploy Railway templates. Templates allow you to deploy a fully configured project that is automatically connected to infrastructure. You can find featured templates on the template marketplace. #### Template deployment flow To deploy a template - - Find a template from the marketplace and click `Deploy Now` - If necessary, configure the required variables, and click `Deploy` - Upon deploy, you will be taken to your new project containing the template service(s) - Services are deployed directly from the defined source in the template configuration - After deploy, you can find the service source by going to the service's settings tab - Should you need to make changes to the source code, you will need to [eject from the template repo](#eject-from-template-repository) to create your own copy. See next section for more detail. _Note: You can also deploy templates into existing projects, by clicking `+ New` from your project canvas and selecting `Template`._ #### Getting help with a template If you need help with a template you have deployed, you can ask the template creator directly: 1. Find the template page in the [marketplace](https://railway.com/templates) 2. Click **"Discuss this Template"** on the template details page 3. Your question will be posted to the template's queue where the creator can help Template creators are notified when questions are posted and are incentivized to provide helpful responses through Railway's kickback program. Ask the Template Creator #### Eject from template repository As of March 2024, the default behavior for deploying templates, is to attach to and deploy directly from the template repository. Therefore, you will not automatically get a copy of the repository on deploy. Follow the steps below to create a repository for yourself. By default, services deployed from a template are attached to and deployed directly from the template repository. In some cases, you may want to have your own copy of the template repository. Follow these steps to eject from the template repository and create a mirror in your own GitHub account. 1. In the [service settings](/overview/the-basics#service-settings), under Source, find the **Upstream Repo** setting 2. Click the `Eject` button 3. Select the appropriate GitHub organization to create the new repository 4. Click `Eject service` #### Updatable templates When you deploy any services from a template based on a GitHub repo, every time you visit the project in Railway, we will check to see if the project it is based on has been updated by its creator. If it has received an upstream update, we will create a branch on the GitHub repo that was created when deploying the template, allowing for you to test it out within a PR deploy. If you are happy with the changes, you can merge the pull request, and we will automatically deploy it to your production environment. If you're curious, you can read more about how we built updatable templates in this blog post _Note: This feature only works for services based on GitHub repositories. At this time, we do not have a mechanism to check for updates to Docker images from which services may be sourced._ ### Create Source: https://docs.railway.com/templates/create.md Learn how to create reusable templates on Railway to enable effortless one-click deploys. Creating a template allows you to capture your infrastructure in a reusable and distributable format. By defining services, environment configuration, network settings, etc., you lay the foundation for others to deploy the same software stack with the click of a button. If you [publish your template](/templates/publish-and-share) to the marketplace, you can earn kickbacks from usage, up to 25% for open source templates with active community support. Learn more about the [kickback program](/templates/kickbacks). #### How to create a template You can either create a template from scratch or base it off of an existing project. ##### Starting from scratch To create a template from scratch, head over to your Templates page within your workspace settings and click on the `New Template` button. - Add a service by clicking the `Add New` button in the top right-hand corner, or through the command palette (`CMD + K` -> `+ New Service`) - Select the service source (GitHub repo or Docker Image) - Configure the service variables and settings Template Editor - Once you've added your services, click `Create Template` - You will be taken to your templates page where you can copy the template URL to share with others Note that your template will not be available on the template marketplace, nor will be eligible for a kickback, until you [publish](/templates/publish-and-share) it. ##### Private repo support It's now possible to specify a private GitHub repo when creating a template. This feature is intended for use among [Workspaces](/projects/workspaces) and [Organizations](/projects/workspaces). Users supporting a subscriber base may also find this feature helpful to distribute closed-source code. To deploy a template that includes a private repo, look for the `GitHub` panel in the `Account Integrations` section of [General Settings](https://railway.com/account). Then select the `Edit Scope` option to grant Railway access to the desired private repos. Create a template from a private GitHub repositories If you do not see the `Edit Scope` option, you may still need to connect GitHub to your Railway account. ##### Private Docker images If your template includes a private Docker image, you can provide your registry credentials without exposing them to users who deploy your template. To set this up, add a service with a Docker image source in the template editor, then enter your registry credentials in the service settings. Railway encrypts and stores these credentials securely. When users deploy your template, Railway automatically authenticates with your registry to pull the image. Users will only see that the service uses hidden registry credentials, not the credentials themselves. To protect your credentials, SSH access is disabled and users cannot modify the Docker image source for services with hidden registry credentials. ##### Convert a project into a template You can also convert an existing project into a ready-made Template for other users. - From your project page, click `Settings` in the right-hand corner of the canvas - Scroll down until you see **Generate Template from Project** - Click `Create Template` Generate template from project - You will be taken to the template composer page, where you should confirm the settings and finalize the template creation #### Configuring services Configuring services using the template composer is very similar to building a live project in the canvas. Once you add a new service and select the source, you can configure the following to enable successful deploys for template users: - **Variables tab** - Add required [Variables](/variables). _Use [reference variables](/variables#reference-variables) where possible for a better quality template_ - **Settings tab** - Add a [Root Directory](/deployments/monorepo) (Helpful for monorepos) - [Enable Public Networking](/networking/public-networking) with TCP Proxy or HTTP - Set a custom [Start command](/deployments/start-command) - Add a [Healthcheck Path](/deployments/healthchecks#configure-the-healthcheck-path) - **Add a volume** - To add a volume to a service, right-click on the service, select Attach Volume, and specify the [Volume mount path](/volumes) ##### Specifying a branch To specify a particular GitHub branch to deploy, simply enter the full URL to the desired branch in the Source Repo configuration. For example - - This will deploy the `main` branch: `https://github.com/railwayapp-templates/postgres-ssl` - This will deploy the `new` branch: `https://github.com/railwayapp-templates/postgres-ssl/tree/new` ##### Template variable functions Template variable functions allow you to dynamically generate variables (or parts of a variable) on demand when the template is deployed. Template Variable Functions When a template is deployed, all template variable functions are executed and the result replaces the `${{ ... }}` in the variable. Use template variables to generate a random password for a database, or to generate a random string for a secret. The current template variable functions are: 1. `secret(length?: number, alphabet?: string)`: Generates a random secret (32 chars by default). **Tip:** You can generate Hex or Base64 secrets by constructing the appropriate alphabet and length. - `openssl rand -base64 16` β†’ ```text ${{secret(22, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/")}}== ``` - `openssl rand -base64 32` β†’ ```text ${{secret(43, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/")}}= ``` - `openssl rand -base64 64` β†’ ```text ${{secret(86, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/")}}== ``` - `openssl rand -hex 16` β†’ ```text ${{secret(32, "abcdef0123456789")}} ``` - `openssl rand -hex 32` β†’ ```text ${{secret(64, "abcdef0123456789")}} ``` - `openssl rand -hex 64` β†’ ```text ${{secret(128, "abcdef0123456789")}} ``` Or even generate a UUIDv4 string - ```text ${{secret(8, "0123456789abcdef")}}-${{secret(4, "0123456789abcdef")}}-4${{secret(3, "0123456789abcdef")}}-${{secret(1, "89ab")}}${{secret(3, "0123456789abcdef")}}-${{secret(12, "0123456789abcdef")}} ``` 2. `randomInt(min?: number, max?: number)`: Generates a random integer between min and max (defaults to 0 and 100) #### Managing your templates You can see all of your templates on your Workspace's Template page. Templates are separated into Personal and Published templates. You can edit, publish/unpublish and delete templates. Account templates page ### Updates Source: https://docs.railway.com/templates/updates.md Learn how template updates work for authors and consumers. Railway supports automatic update notifications for templates, allowing template authors to push changes to users who have deployed their templates. #### For template authors As a template author, you can push updates to all users who have deployed your template. When you merge changes to the root branch (typically `main` or `master`) of your template's GitHub repository, Railway will automatically detect these changes and notify users who have deployed your template that an update is available. Users will receive a notification about the update and can choose to apply it to their deployment when they're ready. **Best Practice**: Keep your template's changelog up to date and document breaking changes clearly so that consumers understand what's changing when they receive update notifications. ##### Requirements - Your template must be based on a GitHub repository - Updates are triggered when changes are merged to the root branch (`main` or `master`) - Docker image-based templates cannot be automatically updated through this mechanism ##### Update workflow 1. Make changes to your template's GitHub repository 2. Merge changes to the root branch 3. Railway detects the changes automatically 4. Users who deployed your template receive an update notification 5. Users can choose when to apply the update #### For template consumers When you deploy any services from a template based on a GitHub repo, Railway will check to see if the template has been updated by its creator. If an upstream update is available, you will receive a notification. You can then choose to apply the update to your deployment when you're ready. ##### How updates work - Railway monitors the template's source repository for changes - When updates are detected, you'll see a notification in your project - Updates are opt-in, you control when to apply them - Review the template author's changelog before updating to understand what's changing ##### Limitations - This feature only works for services based on GitHub repositories - At this time, there is no mechanism to check for updates to Docker images from which services may be sourced If you're curious, you can read more about how we built updatable templates in this blog post. ### Best practices Source: https://docs.railway.com/templates/best-practices.md Learn the best practices for template creation. Creating templates can get complex, but these best practices will help you create templates that are easy to use and maintain. #### Checklist Depending on the type of template, there are different things to consider: - [Template and Service Icons](#template-and-service-icons) - [Naming Conventions](#naming-conventions) - [Private Networking](#private-networking) - [Environment Variables](#environment-variables) - [Health Checks](#health-checks) - [Persistent Storage](#persistent-storage) - [Authentication](#authentication) - [Dry Code](#dry-code) - [Workspace Naming](#workspace-naming) - [Overview](#overview) #### Template and service icons Template and service icons are important for branding and recognition, as they give the template a more professional look and feel. Always use 1:1 aspect ratio icons or logos with transparent backgrounds for both the template itself and the services the template includes. Transparent backgrounds ensure logos integrate seamlessly with Railway's interface and provide a more polished, professional appearance. #### Naming conventions Naming conventions are important for readability and consistency; using proper names enhances the overall quality and credibility of your template. Always follow the naming conventions for the software that the template is made for. Example, if the template is for ClickHouse, the service and template name should be named `ClickHouse` with a capital C and H, since that is how the brand name is spelled. For anything else, such as custom software: - Use capital case. - Avoid using special characters or dashes, space-delimited is the way to go. - Prefer shorter names over longer names for better readability. - Keep names concise while maintaining clarity. #### Private networking Private networking provides faster, free communication between services and reduces costs compared to routing traffic through the public internet. Always configure service-to-service communication (such as backend to database connections) to use private network hostnames rather than public domains. For more details, see the [private networking guide](/networking/private-networking) and [reference documentation](/networking/private-networking). #### Environment variables Properly set up environment variables are a great way to increase the usability of your template. When using environment variables: - Always include a description of what the variable is for. - If a variable is optional, include a description explaining its purpose and what to set it to or where to find its value. - For any secrets, passwords, keys, etc., use [template variable functions](/templates/create#template-variable-functions) to generate them, avoid hardcoding default credentials at all costs. - Use [reference variables](/variables#referencing-another-services-variable) when possible for dynamic service configuration. - When referencing a hostname, use the private network hostname rather than the public domain, e.g., `RAILWAY_PRIVATE_DOMAIN` rather than `RAILWAY_PUBLIC_DOMAIN`. - Include helpful pre-built variables that the user may need, such as database connection strings, API keys, hostnames, ports, and so on. #### Health checks Health checks are important for ensuring that the service is running properly, before traffic is routed to it. Although a health check might not be needed for all software, such as Discord bots, when it is applicable, it is a good idea to include a health check. A readiness endpoint is the best option; if that's not possible, then a liveness endpoint should be used. For more details, see the [healthchecks guide](/deployments/healthchecks) and [reference documentation](/deployments/healthchecks). #### Persistent storage Persistent storage is essential for templates that include databases, file servers, or other stateful services that need to retain data across deployments. Always include a volume for these services. Without persistent storage, data will be lost between redeployments, leading to unrecoverable data loss for template users. When configuring the service, ensure the volume is mounted to the correct path. An incorrect mount path will prevent data from being stored in the volume. Some examples of software that require persistent storage: - **Databases:** PostgreSQL, MySQL, MongoDB, etc. - **File servers:** Nextcloud, ownCloud, etc. - **Other services:** Redis, RabbitMQ, etc. The volume mount location depends entirely on where the software expects it to be mounted. Refer to the software's documentation for the correct mount path. For more details, see the [volumes guide](/volumes) and [reference documentation](/volumes). #### Authentication Authentication is a common feature for many software applications, and it is crucial to properly configure it to prevent unauthorized access. If the software provides a way to configure authentication, such as a username and password, or an API key, you should always configure it in the template. For example, ClickHouse can operate without authentication, but authentication should always be configured so as not to leave the database open and unauthenticated to the public. Passwords, API keys, etc. should be generated using [template variable functions](/templates/create#template-variable-functions), and not hardcoded. #### Dry Code This is most applicable to templates that deploy from GitHub. When creating templates that deploy from GitHub, include only the essential files needed for deployment. Avoid unnecessary documentation, example files, or unused code and configurations that don't contribute to the core functionality. A clean, minimal repository helps users quickly understand the template's structure and make customizations when needed. #### Workspace naming When users deploy a template, the template author appears as the name of the workspace that created and published it. Since the author is publicly visible and shown with the template to the users, it is important to make sure the workspace name is professional and **accurately represents your relationship to the software**. **Important:** Only use a company or organization name as your workspace name if you are officially authorized to represent that entity. Misrepresenting your affiliation is misleading to users and violates trust. **If you are officially affiliated** with the software (e.g., you work for ClickHouse and are creating a ClickHouse template), then using the official company name "ClickHouse, Inc." is appropriate and helpful for users to identify official templates. **If you are not officially affiliated** with the software, always use your own professional name as the workspace name. **Note:** To transfer a template from one workspace to another, contact support. #### Overview The overview is the first thing users will see when they click on the template, so it is important to make it count. The overview should include the following: - **H1: Deploy and Host [X] with Railway** What is X? Your description in roughly ~ 50 words. - **H2: About Hosting [X]** Roughly 100 word description what's involved in hosting/deploying X - **H2: Common Use Cases** In 3-5 bullets, what are the most common use cases for [X]? - **H2: Dependencies for [X] Hosting** In bullet form, what other technologies are incorporated in using this template besides [X]? - **H3: Deployment Dependencies** Include any external links relevant to the template. - **H3: Implementation Details (Optional)** Include any code snippets or implementation details. This section is optional. Exclude if nothing to add. - **H3: Why Deploy [X] on Railway?** Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it. By deploying [X] on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway. ### Publish and share Source: https://docs.railway.com/templates/publish-and-share.md Learn how to publish and share your Railway templates. Once you create a template, you have the option to publish it. Publishing a template will add it to the template marketplace for other users to deploy. #### Publishing a template After you create your template, simply click the publish button and fill out the form to publish your template. Template publishing form You can always publish your template by going to the Templates page in your Workspace settings and choose `Publish` next to the template you'd like to publish. Optionally, you can add a demo project to your template. This will be used to showcase your template in a working project, and can be accessed by clicking on the `Live Demo` button in the template's overview page. #### Sharing your templates After you create your template, you may want to share your work with the public and let others clone your project. You are provided with the Template URL where your template can be found and deployed. ##### Deploy on Railway button To complement your template, we also provide a `Deploy on Railway` button which you can include in your README or embed it into a website. Example README with Deploy on Railway button ![https://railway.com/button.svg](https://railway.com/button.svg) The button is located at [https://railway.com/button.svg](https://railway.com/button.svg). ###### Markdown To render the button in Markdown, copy the following code and replace the template code with your desired template. If you'd like to help us attribute traffic to your template, replace `utm_campaign=generic` in the URL with your template name. ```md [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/ZweBXA?utm_medium=integration&utm_source=button&utm_campaign=generic) ``` ###### HTML To render the button in HTML, copy the following code and replace the template code with your desired template. If you'd like to help us attribute traffic to your template, replace `utm_campaign=generic` in the URL with your template name. ```html Deploy on Railway ``` ##### Examples Here are some example templates from the template marketplace in button form: |Icon|Template|Button| |:--:|:------:|:----:| |Node|Node|[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/ZweBXA?utm_medium=integration&utm_source=button&utm_campaign=node)| |Deno|Deno|[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/LsaSsU?utm_medium=integration&utm_source=button&utm_campaign=deno)| |Bun|Bun|[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/gxxk5g?utm_medium=integration&utm_source=button&utm_campaign=bun)| |Gin|Gin|[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/dTvvSf?utm_medium=integration&utm_source=button&utm_campaign=gin)| |Flask|Flask|[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/zUcpux?utm_medium=integration&utm_source=button&utm_campaign=flask)| #### Kickback program If your published template is deployed into other users' projects, you are eligible for kickbacks based on your support engagement. Learn more about the [kickback program](/templates/kickbacks). #### Template verification Templates are verified when the creator and maintainer of the technology becomes a partner and reviews the template. If you are or have a relationship with the creator, please reach out to us by submitting the form on the [partners page](https://railway.com/partners). --- ### Kickbacks Source: https://docs.railway.com/templates/kickbacks.md Earn revenue from your templates through Railway's kickback program. If you publish a template, and it is deployed into other users' projects, you are eligible for a kickback of the usage cost incurred. You can receive kickback earnings in Railway Credits or with Cash Withdrawal. Read more about the kickback program [here](https://railway.com/open-source-kickback). #### Eligibility requirements To be eligible for template kickbacks, your template must meet the following requirements: - **Marketplace**: Your template must be published to the [template marketplace](https://railway.com/templates). Private and unpublished templates are not eligible. - **Terms of Service**: Your project must abide by Railway's [Fair Use Policy](https://railway.com/legal/fair-use) and [Terms of Service](https://railway.com/legal/terms). Templates that violate Railway's Terms of Service may be removed and kickback payments deemed ineligible. #### Kickback rates - Templates receive a **15%** kickback of the usage costs incurred by users deploying your template. - Support Bonus: Additional **10% (25% total)** when actively supporting users via your [Template Queue](https://station.railway.com/my-template-queue) #### How earnings are calculated Kickbacks are calculated based on the proportional resource usage cost of your template services. For example, if a user pays $20 in platform fees, then incurs $200 of usage from your template, you are eligible for up to a $50 kickback (25% of $200 for an open source template with active support). **Minimum Payout:** The minimum kickback payout is $0.01. Any kickback amount below this threshold will not be processed. #### Supporting your template users When users have questions about your template, they'll appear in your [Template Queue](https://station.railway.com/my-template-queue) in Central Station. You'll get an email when new questions come in, plus occasional reminders if questions are waiting. Answering these questions earns you the additional 10% support bonus and helps users deploy your template successfully. Manage notification preferences in your [account settings](https://railway.com/account/notifications) under "Template Queue Emails". Template Queue Emails #### Open Source Partner Program If you're the owner of a technology used in Railway templates, you can join the [Open Source & Technology Partners program](/templates/partners) to unlock extra perks like commission on templates using your technology, featured placement, and opens source product-management features. #### Earnings and withdrawals By default, your template kickbacks are automatically converted into Railway Credits. But we also offer cash withdrawals. Visit the `/earnings` tab inside your account settings for more details. There you can add your details and request a withdrawal. Cash withdrawals are **not** supported in countries like **Brazil, China, and Russia**. A full list of supported countries is available on the earnings page. ##### Withdrawal FAQ ###### How do I start earning cash? Simply flip the switch on the Earnings page marked `Direct Deposit to Railway Credits`. This will stop auto-depositing your earnings into the Railway credits system. You will then begin accruing cash in your `Available Balance`. ###### How do I request a withdrawal? Follow the instructions inside the `Earnings` tab. We use Stripe Connect to handle withdrawals. After completing the onboarding process, you will be able to request a withdrawal. ###### Why is my country not supported? Due to local regulations and compliance requirements, certain regions are not eligible for cash withdrawals. You can choose from the 130+ countries that are supported in the onboarding process. ###### Can I make manual withdrawals to credits too? Yes! Choose `to Credits` in the dropdown and then make your withdrawal request. ###### I have earned a lot of kickbacks from a template, but this page says my available balance is $0. Why? The current kickback method is to automatically apply your kickbacks as Railway credits. You can opt out of this if you wish to start accruing cash. ###### Can I still use the older, automatic-credits setting? Yes. This behavior is enabled by default. You can opt out of it, and back in to it, at any time. Simply use the switch on the Earnings page marked `Direct Deposit to Railway Credits`. ###### What is the minimum and maximum withdrawal amount? For now, withdrawals may be made in $100 - $10,000 increments. ###### What is the timeframe from withdrawal request to payout? Withdrawals are usually processed instantly. Once processed, the funds will usually take up to 10 business days to reach your account. Depending on your region and bank, this may take longer. ###### What if there are no questions for my template? If there are no questions, you will receive the full 25% kickback for your template. ### Private Docker images Source: https://docs.railway.com/templates/private-docker-images.md Create templates with private Docker images to distribute proprietary code through Railway and uniquely monetize. Templates can include private Docker images, letting you distribute proprietary code without exposing your source. Users deploy your template and Railway handles authentication with your registry. This is useful for: - Maintainers who want to distribute solely through Railway to maximize earnings - Products that are premium versions of open source projects - Proprietary add-ons or plugins #### Setting up private images To add a private Docker image to your template: 1. In the template editor, add a service with a Docker image source 2. Enter your registry credentials in the service settings (username and password for Dockerhub, username and access token for Github registry) 3. Railway encrypts and stores the credentials securely When users deploy your template, Railway authenticates with your registry to pull the image. Users see that the service uses hidden registry credentials, but cannot access the credentials themselves. To protect your credentials, SSH access is disabled and users cannot modify the Docker image source for services with hidden registry credentials. #### Combining with kickbacks Private image templates are eligible for the same [kickback rates](/templates/kickbacks) as other templates. You earn commission when users deploy and run your private image templates. For open source maintainers, make a hosted-only version of your tooling to capitalize on the commission you get from Railway templates. ### Metrics Source: https://docs.railway.com/templates/metrics.md Track deployments, earnings, and health metrics for your published templates. Once you publish a template, you can track its performance through the Metrics tab. Access it from your Workspace Templates page by clicking Edit on any published template. #### Overview stats Template metrics The metrics dashboard shows key stats for your template: - **Deployments**: Total number of times your template has been deployed - **Earnings**: Total earnings from your template - **Support Health**: Percentage of user questions you've answered in your [Template Queue](https://station.railway.com/my-template-queue), and whether you are eligible for the support commission bonus #### Extended metrics *This section is under construction. Template metrics within Railway today are shown in aggregate, but we are planning to expand this view. In the meantime, please use the Gauge template documented below.* To see time series on template volume and earnings, use the [Gauge Template Metrics](https://railway.com/deploy/gauge?referralCode=IFlm92) built by our community. Launch it within your workspace by following the instructions on the deploy page. See the executive summary of your template earnings over time. Community template metrics: executive summary Understand per-template usage breakdowns. Community template metrics: per template breakdown ### Open source technology partners Source: https://docs.railway.com/templates/partners.md Grow your open source projects and products on Railway. Railway wants open source maintainers to succeed. If you maintain an open source project that people deploy on Railway, here's how Railway enables you to manage your open source product end-to-end and grow. Apply at [railway.com/partners](https://railway.com/partners).