Skip to main content
Version: Next

Extension Block

The extension block defines extension configuration at workspace scope. These settings apply globally and can be specialized in PROJECT files. Omitted scalar fields inherit their workspace values, while declared scalar fields replace them. Collection specialization is additive: variables are combined as a set, while defaults and env may add keys but cannot replace or remove inherited entries.

Example

extension @dotnet {
image = "mcr.microsoft.com/dotnet/sdk:8.0"
platform = "linux/arm64"
cpus = 2
variables = [ "NUGET_KEY" ]
defaults {
configuration = "Release"
}
}

extension npm_ci {
script = "tools/extensions/npm-ci.fss"
}

Arguments

  • identifier (required): extension identifier.
  • image (optional): container image used to run extension actions.
  • platform (optional): target container platform (linux/amd64, linux/arm64, ...).
  • cpus (optional): max CPUs for container execution (strictly positive).
  • variables (optional): host env variable names forwarded to container.
  • defaults (optional): default action arguments for this extension.
  • env (optional): environment values added to every action for this extension.
  • script (optional): scripted implementation source.

Identifier conventions

  • Built-in extensions use @... identifiers (for example @dotnet, @npm, @terraform).
  • Custom extensions should use non-@ identifiers.

Script sources

script supports:

  • local .fss path inside the workspace
  • HTTPS URL to a .fss script

See Script Extensibility.