Skip to main content
Railway is an infrastructure platform with instant deployments from GitHub, automatic SSL, and built-in database provisioning. It auto-detects Bun projects and requires zero configuration for most apps. Prerequisites:
  • A Bun application ready for deployment
  • A Railway account
  • A GitHub account (for dashboard deployments) or the Railway CLI

Method 1: Deploy via CLI

1

Install the Railway CLI

2

Log in

3

Initialize a new project

Run this from your project directory:
4

Add a database (optional)

If your app uses PostgreSQL, add it before deploying:
Skip this step if your application does not need a database.
5

Deploy and expose a public domain

Your app is now live. Railway auto-deploys on every push to your connected branch.

Method 2: Deploy via Dashboard

1

Create a new project

  1. Go to the Railway Dashboard.
  2. Click + New → GitHub repo.
  3. Authorize Railway and select your repository.
2

Add a database (optional)

  1. In the project canvas, click + New → Database → Add PostgreSQL.
  2. Select your app service (not the database).
  3. Go to the Variables tab.
  4. Click + New Variable → Add Reference and select DATABASE_URL from the Postgres service.
Skip this step if your application does not need a database.
3

Generate a public domain

  1. Select your app service.
  2. Go to the Settings tab.
  3. Under Networking, click Generate Domain.
Your app is now live. Railway re-deploys automatically on every GitHub push.

Configuration

By default, Railway uses Nixpacks to auto-detect and build your Bun project with zero configuration. For better Bun support and guaranteed compatibility with the latest Bun versions, use Railpack instead. Create a railway.json in your project root:
railway.json

Custom start command

To override the default start command, set it in the Railway dashboard under Settings → Deploy → Start command, or add it to railway.json:
railway.json

Environment variables

Set environment variables in the Railway dashboard under your service’s Variables tab. They are injected into process.env at runtime:
Railway automatically injects a PORT environment variable. Always use process.env.PORT rather than a hard-coded port number.