Skip to content

Environments

A Railway.Environment is an extra deploy environment under a Project (staging, preview, …). The production environment is created with the Project — do not recreate it as an Environment resource.

Alchemy generates a unique name unless you pass one. Production is already on the Project as environmentId.

const site = yield* Railway.Project("Site");
const staging = yield* Railway.Environment("Staging", {
project: site,
});

Pass name when you need a stable environment name (staging). Changing it later updates the environment in place via environmentRename.

const staging = yield* Railway.Environment("Staging", {
project: site,
name: "staging",
});

sourceEnvironmentId copies services, volumes, configuration, and variables from another environment. Create-only.

const staging = yield* Railway.Environment("Staging", {
project: site,
sourceEnvironmentId: site.environmentId,
});

Services, Volumes, Postgres, Redis, Variables, and Buckets default to the Project’s primary environment. Pass environment to put them in staging.

const api = yield* Railway.Service("StagingApi", {
project: site,
environment: staging,
image: "hashicorp/http-echo",
port: 5678,
});

Declare the Project once. Pass it into every child.

src/project.ts
import * as Railway from "alchemy/Railway";
export const Site = Railway.Project("Site");
export const Staging = Railway.Environment("Staging", {
project: Site,
});

Resource-valued props accept the resource or an Effect producing it.

Projects own the production environment. Services take environment. The Environment reference lists every prop.