Skip to main content
Desired-state configuration for software delivery

Declare your
desired state.

Terrabuild applies desired-state configuration to build and deployment. Declare what should be built, tested, packaged, or deployed. Terrabuild coordinates your tools and environment settings, reuses valid results, and runs the work needed to reach that outcome.

The same declaration locally and in CI Included tools + custom FScript Local cache included
DELIVERY GRAPHworkspace / production
Ready
Source changeDependency orderEnvironment

Describe what should be true. Let the graph determine the work.

A frontend needs a generated client. An image needs the application. A deployment needs the image and its environment settings. Put those relationships in one place.

ONE MODEL

Connect work across tools

Use included integrations for .NET, Node.js, Docker, Go, and more. Add your own FScript actions. Terrabuild orders their prerequisites and runs independent work concurrently.

POLICY

Reuse the work already done

Declare inputs and outputs so matching results can be reused. Give deployments an explicit always-run policy when each request must change external state.

ENVIRONMENTS

Make environment differences explicit

Keep common builds reusable while plans and deployments consume staging or production settings. Configure project selection, tool arguments, and execution containers where they belong.

Let each application follow its own delivery path.

For example, select studio for a preview deployment while catalog stays in staging. Each application can have its own infrastructure dependencies and environment settings.

Model deployment

Your tools do the work. Terrabuild coordinates them.

Use the included extensions for common build and deployment tools. Add another tool with an FScript file, without changing or recompiling Terrabuild.

EXTENSIONS

Start with the included extensions.

Use commands for common toolchains. A custom FScript extension can define actions, defaults, project discovery, and batching rules for anything else.

dotnetnpmdockergo+ custom
Configure or write an extension
CONTAINERS

Pin the execution environment.

Set an image on an extension to run its actions in the same container locally and in CI. Terrabuild supports Docker and Podman.

extension @dotnet {
image = "mcr.microsoft.com/dotnet/sdk:9.0"
platform = "linux/arm64"
}
Containerize an extension

See what ran.
Follow what reached each environment.

Start with local execution and caching, without an account. Connect Insights when you want shared encrypted artifacts, execution history, and a record of changes delivered to each environment.

Execution historyInspect every run as a dependency graph.
Environments and releasesFollow promotions, rollbacks, divergence, and release notes.
PulseRead delivery flow, feedback, activity, and behavior over time.
Managed artifactsShare encrypted cache entries and outputs across machines.
MagnusOpera / platform connected
ENVIRONMENTproduction
Healthy
studio · forwardRelease 1842

3 projects changed · 7 commits

catalog · forwardRelease 1839

1 project changed · 2 commits

BUILD HEALTH96%
MERGE → RELEASE42m

Two projects. Your first coordinated workflow.

Start the tutorial