environment

This skill should be used when the user asks "what's the config", "show me the configuration", "what variables are set", "environment config", "service config", "railway config", or wants to add/set/delete variables, change build/deploy settings, scale replicas, connect repos, or delete services.

railwayapp/railway-skills856 installsMITSynced Aug 26

Works with

Claude CodeCursorCodex CLIGitHub CopilotGemini CLI
---
name: environment
description: This skill should be used when the user asks "what's the config", "show me the configuration", "what variables are set", "environment config", "service config", "railway config", or wants to add/set/delete variables, change build/deploy settings, scale replicas, connect repos, or delete services.
license: MIT
---

# Environment Configuration

Read and edit Railway environment configuration using the CLI.

## Prerequisites

Requires Railway CLI **v4.27.3+**. Check with:
```bash
railway --version
```

If below 4.27.3, upgrade:
```bash
railway upgrade
```

## Quick Actions

**When user asks "what's the config" or "show configuration":**

```bash
railway environment config --json
```

Present: source (repo/image), build settings, deploy settings, variables per service.

**When user asks "what variables" or "show env vars":**

Same command — `railway environment config --json` includes variables per service and shared variables.

For **rendered** (resolved) variable values: `railway variables --json`

## When to Use

- User wants to create a new environment
- User wants to duplicate an environment (e.g., "copy production to staging")
- User wants to switch to a different environment
- User asks about current build/deploy settings, variables, replicas, health checks, domains
- User asks to change service source (Docker image, branch, commit, root directory)
- User wants to connect a service to a GitHub repo
- User wants to deploy from a GitHub repo (create empty service first via `new` skill, then use this)
- User asks to change build or start command
- User wants to add/update/delete environment variables
- User wants to change replica count or configure health checks
- User asks to delete a service, volume, or bucket
- Auto-fixing build errors detected in logs

## Create Environment

Create a new environment in the linked project:

```bash
railway environment new <name>
```

Duplicate an existing environment:

```bash
railway environment new staging --duplicate production
```

With service-specific variables:

```bash
railway environment new staging --duplicate production --service-variable api PORT=3001
```

## Switch Environment

Link a different environment to the current directory:

```bash
railway environment <name>
```

Or by ID:

```bash
railway environment <environment-id>
```

## Get Context

**JSON output** — project/environment IDs and service list:
```bash
railway status --json
```

Extract:
- `project.id` — project ID
- `environment.id` — environment ID

**Plain output** — linked service name:
```bash
railway status
```

Shows `Service: <name>` line with the currently linked service.

### Resolve Service ID

Get service IDs from the environment config:
```bash
railway environment config --json | jq '.services | keys'
```

Map service IDs to names via status:
```bash
railway status --json
```

The `project.services` array contains `{ id, name }` for each service. Match against the service keys from `environment config`.

## Read Configuration

Fetch current environment configuration:

```bash
railway environment config --json
```

### Response Structure

```json
{
  "services": {
    "<serviceId>": {
      "source": { "repo": "...", "branch": "main" },
      "build": { "buildCommand": "npm run build", "builder": "NIXPACKS" },
      "deploy": {
        "startCommand": "npm start",
        "multiRegionConfig": { "us-west2": { "numReplicas": 1 } }
      },
      "variables": { "NODE_ENV": { "value": "production" } },
      "networking": { "serviceDomains": {}, "customDomains": {} }
    }
  },
  "sharedVariables": { "DATABASE_URL": { "value": "..." } }
}
```

For complete field reference, see [reference/environment-config.md](references/environment-config.md).

For variable syntax and service wiring patterns, see [reference/variables.md](references/variables.md).

## Get Rendered Variables

`environment config` returns **unrendered** variables — template syntax like `${{shared.DOMAIN}}` is preserved. This is correct for management/editing.

To see **rendered** (resolved) values as they appear at runtime:

```bash
# Current linked service
railway variables --json

# Specific service
railway variables --service <service-name> --json
```

**When to use:**
- Debugging connection issues (see actual URLs/ports)
- Verifying variable resolution is correct
- Viewing Railway-injected values (RAILWAY_*)

## Edit Configuration

Pass a JSON patch to `railway environment edit` to apply changes. The patch is merged with existing config and committed immediately, triggering deploys.

```bash
railway environment edit --json <<< '<json-patch>'
```

With a commit message:

```bash
railway environment edit -m "description of change" --json <<< '<json-patch>'
```

### Examples

**Set build command:**
```bash
railway environment edit --json <<< '{"services":{"SERVICE_ID":{"build":{"buildCommand":"npm run build"}}}}'
```

**Add variable:**
```bash
railway environment edit -m "add API_KEY" --json <<< '{"services":{"SERVICE_ID":{"variables":{"API_KEY":{"value":"secret"}}}}}'
```

**Delete variable:**
```bash
railway environment edit --json <<< '{"services":{"SERVICE_ID":{"variables":{"OLD_VAR":null}}}}'
```

**Delete service:**
```bash
railway environment edit --json <<< '{"services":{"SERVICE_ID":{"isDeleted":true}}}'
```

**Set replicas:**
```bash
railway environment edit --json <<< '{"services":{"SERVICE_ID":{"deploy":{"multiRegionConfig":{"us-west2":{"numReplicas":3}}}}}}'
```

**Add shared variable:**
```bash
railway environment edit --json <<< '{"sharedVariables":{"DATABASE_URL":{"value":"postgres://..."}}}'
```

### Batching Multiple Changes

Include multiple fields in a single patch to apply them atomically:

```bash
railway environment edit -m "configure build, start, and env" --json <<< '{"services":{"SERVICE_ID":{"build":{"buildCommand":"npm run build"},"deploy":{"startCommand":"npm start"},"variables":{"NODE_ENV":{"value":"production"}}}}}'
```

## Error Handling

### Command Not Found

If `railway environment edit` is not recognized, upgrade the CLI:

```bash
railway upgrade
```

### Service Not Found

```
Service "foo" not found in project. Available services: api, web, worker
```

### Invalid Configuration

Common issues:

- `buildCommand` and `startCommand` cannot be identical
- `buildCommand` only valid with NIXPACKS builder
- `dockerfilePath` only valid with DOCKERFILE builder

### No Permission

```
You don't have permission to modify this environment. Check your Railway role.
```

### No Linked Project

```
No project linked. Run `railway link` to link a project.
```

## Composability

- **Create service**: Use `service` skill
- **View logs**: Use `deployment` skill
- **Add domains**: Use `domain` skill
- **Deploy local code**: Use `deploy` skill

More Accessibility skills

← All Accessibility skills

Check your AI visibility

One URL in, a 0–100 score and the exact fixes out.

RUN THE CHECK

Browse all the tools

15 tools across six categories
13 of them never send your data anywhere

Free · No signup · No trial clock

SEE THE DIRECTORY