// Deploy, manage services, view logs, and configure Railway infrastructure. Use when deploying to Railway, managing environment variables, viewing deployment logs, scaling services, or managing volumes.
| name | Railway CLI Management |
| description | Deploy, manage services, view logs, and configure Railway infrastructure. Use when deploying to Railway, managing environment variables, viewing deployment logs, scaling services, or managing volumes. |
Master Railway CLI for deployments, service management, log viewing, and infrastructure operations.
# Deploy current directory to linked service
railway up
# Deploy without attaching to logs
railway up --detach
# Deploy to specific service
railway up --service api
# Deploy to specific environment
railway up --environment production
# Redeploy latest deployment
railway redeploy
# Redeploy specific service
railway redeploy --service worker
# Skip confirmation
railway redeploy --yes
# Remove most recent deployment
railway down
# Remove deployment from specific service
railway down --service api
# List all projects
railway list
# Link to existing project (interactive)
railway link
# Link to specific project by ID
railway link <project-id>
# Show current project status
railway status
# Get status as JSON (includes deployment IDs!)
railway status --json
# Open project dashboard in browser
railway open
# Unlink current directory from project
railway unlink
# Link to specific service
railway service <service-name-or-id>
# Add new service to project
railway add
Best Method:
# Get full project status including deployment IDs
railway status --json
# Extract specific deployment ID using jq
railway status --json | jq -r '.services.edges[0].node.serviceInstances.edges[0].node.latestDeployment.id'
# Get deployment ID for specific service
railway status --json | jq -r '.services.edges[] | select(.node.name=="api") | .node.serviceInstances.edges[0].node.latestDeployment.id'
Output Structure:
.services.edges[].node - Service info.node.serviceInstances.edges[].node.latestDeployment.id - Latest deployment UUID.node.serviceInstances.edges[].node.latestDeployment.meta - Commit info, build config, etc.View Logs
# Stream logs for latest deployment
railway logs
# View logs for specific service
railway logs --service api
# View logs for specific environment
railway logs --environment production
# View deployment logs (startup/runtime)
railway logs --deployment
# View build logs
railway logs --build
# View logs for specific deployment by ID
railway logs <deployment-id>
# Get logs for specific service deployment
railway logs --service worker --deployment
# Output as JSON
railway logs --json
# Combine options
railway logs --service api --deployment --json
Logs Tips:
--json with jq for filtering# List all variables for active environment
railway variables
# List for specific service
railway variables --service api
# List for specific environment
railway variables --environment production
# Show as key=value format
railway variables --kv
# Output as JSON
railway variables --json
# Set variable(s)
railway variables --set "DATABASE_URL=postgres://..."
# Set multiple
railway variables --set "NODE_ENV=production" --set "LOG_LEVEL=debug"
# Run local command with Railway variables
railway run npm start
# Open subshell with Railway variables loaded
railway shell
# Link to environment (interactive)
railway environment
# Link to specific environment
railway environment production
# Create new environment
railway environment new
# Delete environment
railway environment delete <environment-name>
# Scale service in linked environment
railway scale --us-west1 3
# Scale specific service
railway scale --service api --us-west1 2
# Scale across multiple regions
railway scale --us-west1 2 --europe-west4 1
# Available regions:
# --us-west1, --us-west2, --us-east4
# --europe-west4, --asia-southeast1
# List volumes
railway volume list
# List for specific service
railway volume list --service api
# Add new volume
railway volume add
# Delete volume
railway volume delete <volume-id>
# Update volume
railway volume update <volume-id>
# Detach volume from service
railway volume detach <volume-id>
# Attach volume to service
railway volume attach <volume-id>
# Connect to database shell
railway connect
# Examples:
# - PostgreSQL: Opens psql
# - MongoDB: Opens mongosh
# - MySQL: Opens mysql
# - Redis: Opens redis-cli
# Login to Railway account
railway login
# Logout
railway logout
# Check current user
railway whoami
# Login
railway login
# Link to existing project
railway link
# Or create new project
railway init
# Link to service
railway service api
# Link to environment
railway environment production
# Check status
railway status
# Set variables
railway variables --set "NODE_ENV=production" --set "API_KEY=secret"
# Deploy
railway up
# Monitor logs
railway logs --deployment
# Get deployment ID
DEPLOY_ID=$(railway status --json | jq -r '.services.edges[0].node.serviceInstances.edges[0].node.latestDeployment.id')
# View build logs
railway logs $DEPLOY_ID --build
# View deployment logs
railway logs $DEPLOY_ID --deployment
# Check full status
railway status --json | jq '.services.edges[].node.serviceInstances.edges[].node.latestDeployment'
# Terminal 1: API logs
railway logs --service api --deployment
# Terminal 2: Worker logs
railway logs --service worker --deployment
# Or use JSON + jq for filtering
railway logs --service api --json | jq 'select(.level == "error")'
# Get all deployment IDs
railway status --json | jq -r '.services.edges[].node | {service: .name, deployment: .serviceInstances.edges[0].node.latestDeployment.id}'
# Get commit info for deployment
railway status --json | jq -r '.services.edges[].node.serviceInstances.edges[].node.latestDeployment.meta | {commit: .commitHash, message: .commitMessage}'
# Get service URLs
railway status --json | jq -r '.services.edges[].node | select(.serviceInstances.edges[0].node.latestDeployment.canRedeploy == true)'
# Change variables
railway variables --set "NEW_VAR=value"
# Redeploy to pick up changes
railway redeploy --yes
# Or deploy fresh
railway up
# Run migration
railway run npm run migrate
# Run seed script
railway run node scripts/seed.js
# Start local dev with production variables
railway run npm run dev
# Open shell with all variables
railway shell
Deployment Targets
railway run or railway shellJSON Output
railway status --json is the most comprehensive commandjq for parsing and filteringEnvironment Linking
railway status to verify what you're linked torailway service, railway environment, railway linkLogs Behavior
Railway.json Configuration
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "NIXPACKS",
"buildCommand": "pnpm install && pnpm run build"
},
"deploy": {
"startCommand": "node dist/index.js",
"healthcheckPath": "/health",
"healthcheckTimeout": 100,
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 10
}
}
Common Issues
railway service <service-name> firstrailway environment <env-name> firstrailway status --json to verify deployment ID existsSaturn Backend (API + Worker)
# Check both services status
railway status --json | jq '.services.edges[] | {
service: .node.name,
deployment: .node.serviceInstances.edges[0].node.latestDeployment.id,
commit: .node.serviceInstances.edges[0].node.latestDeployment.meta.commitHash
}'
# Get API deployment logs
railway logs --service api --deployment
# Get worker deployment logs
railway logs --service worker --deployment
# Redeploy both after config change
railway redeploy --service api --yes
railway redeploy --service worker --yes
Debug Production Issue
# Stream live logs with error filtering
railway logs --service api --deployment --json | jq 'select(.level == "error" or .level == "fatal")'
# Get recent deployment metadata
railway status --json | jq '.services.edges[] | select(.node.name == "api") | .node.serviceInstances.edges[0].node.latestDeployment.meta'
# Check health check configuration
railway status --json | jq '.services.edges[].node.serviceInstances.edges[].node.latestDeployment.meta.fileServiceManifest.deploy'