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
.fsspath inside the workspace - HTTPS URL to a
.fssscript
See Script Extensibility.