# Environments

Develop locally, validate in expiring previews, and promote immutable releases through named environments.

Ferrite separates local development, previews, and production so an unverified
change does not replace a known release.

## Local

`ferrite dev` uses persistent local plane state and a localhost Gateway. It can
run several app instances or inject process crashes without affecting a remote
account.

## Preview

`ferrite preview` creates an expiring preview. Each preview receives an isolated
URL and can be exercised by browser, API, MCP, and agent-readiness tests before
promotion.

## Production

`ferrite deploy` submits source through the production admission and attested
build path. Immutable releases and environment pointers make promotion and
rollback explicit.

Use the Dashboard for environment and release history. MCP clients can use
`releases`, `environments`, `deploy_history`, `cut_release`, `deploy_release`,
`promote`, and `rollback_release` when they need the same records or controls
without a browser.

Environment records and direct source deployments are distinct read models. If
an app was deployed directly without creating a release workflow, the dashboard
must not invent a release or environment record.

See [Deployments](/developers/deployments/) and [Domains](/developers/domains/).
