Skip to main content
Version: 1.x

wasmcloud.toml

wasmcloud.toml is the main configuration file for a wasmCloud project, analogous to a package.json or Cargo.toml file.

Let's look at an example:

toml
name = "http-hello-world"
language = "rust"
type = "component"
version = "0.1.0"

[component]
wit_world = "hello"
wasm_target = "wasm32-wasi-preview2"

This is a fairly minimal configuration for a hello world component written in Rust. It defines everything needed to build and sign the component, including the language toolchain to use.

wash build

The partner-in-crime to wasmcloud.toml is wash build. This command takes all the options set in the wasmcloud.toml file to build and sign the component/provider/interface.

See the build docs for more info.

wasmcloud.toml Spec

Common Config

SettingTypeDefaultDescription
namestringName of the project.
languagestringLanguage that component or provider is written in. Valid values are: rust, tinygo, go, or other.
typestringType of wasmCloud artifact that is being generated. Valid values are: component or provider.
versionstringSemantic version of the project.
pathstring{pwd}Path to the project root. Determines where build commands should be run.
buildstring./buildPath to the directory where built artifacts should be written.
witstring./witPath to the directory where the WIT world and dependencies can be found.

Language Config - [tinygo]

SettingTypeDefaultDescription
tinygo_pathstringwhich tinygoThe path to the TinyGo binary.
disable_go_generatebooleanfalseWhether to disable the 'go generate' step in the build process.
schedulerstringasyncifyOverride the default scheduler (asyncify). Valid values are: none, tasks, asyncify.
garbage_collectorstringconservativeThe garbage collector to use for the TinyGo build. Valid values are: none, conservative, leaking.

Language Config - [rust]

SettingTypeDefaultDescription
cargo_pathstringwhich cargoThe path to the cargo binary
target_pathstring./targetPath to cargo/rust's target directory
debugbooleanfalseWhether to build in debug mode.

Registry Config - [registry.push]

SettingTypeDefaultDescription
urlstringN/AURL of the registry to use when pushing OCI artifacts (i.e. wash push).
credentialsstringPath to a credentials file to use when pushing to registries (ex. specified by url).
push_insecurebooleanWhether or not to push to the registry insecurely with HTTP.

Type Config - [component]

SettingTypeDefaultDescription
build_artifactstring./build/[name].wasmOptional override path where wash can expect to find the built and unsigned WebAssembly artifact.
build_commandstringLanguage-specific commandOptional command to run instead of inferring the default language toolchain build command. Supports commands in the format of command ...arg. wash expects that the build command will result in an artifact under the project build folder named either {wasm_bin_name}.wasm if supplied or {name}.wasm otherwise.
call_aliasstringThe call alias of the component
destinationstring./build/[name]_s.wasmFile path to output the destination WebAssembly artifact after building and signing.
key_directorystring~/.wash/keysThe directory to store the private signing keys in.
tagsstringTags that should be applied during the component signing process.
wasip1_adapter_pathstringPath to a wasm adapter that can be used for WASI P2.
wasm_targetstringwasm32-unknown-unknownCompile target. Valid values are: wasm32-unknown-unknown, wasm32-wasi-preview1, wasm32-wasi-preview2.
wit_worldstringThe WIT world that is implemented by the component.

Type Config - [provider]

SettingTypeDefaultDescription
vendorstringNoVendorThe vendor name of the provider.
wit_worldstringThe WIT world that is implemented by the component.
osstringCurrent OSThe target operating system of the provider archive.
archstringCurrent architectureThe target architecture of the provider archive.
rust_targetstringDefault Rust toolchainFor Rust-based providers, the Rust target triple to build for.
bin_namestringInferred from cargo.toml for Rust providersThe provider binary name. Required for Go-based providers, or if the name otherwise cannot be inferred from a Cargo.toml file.
key_directorystring~/.wash/keysThe directory to store the private signing keys in.

WIT dependency fetch/pull configuration - [registry].pull

info

The [registry].pull section requires wash v0.38.0+.

When fetching or pulling WIT interfaces (e.g. wasi:keyvalue, wasi:http), it can be useful to provide and/or override default sources. This effect can be achieved with the pull member of the [registry] configuration section in wasmcloud.toml.

Configuration for [registry].pull can be specified as a TOML table, as in the following example wasmcloud.toml:

toml
name = "example-component"
language = "rust"
type = "component"

[component]
wasm_target = "wasm32-wasip2"

[registry.pull]
sources = [
    { target = "wasmcloud:bus", source = "oci://ghcr.io/wasmcloud/targets" },
    { target = "test-components:testing", source = "file://extra-wit/pingpong.wit" },
    { target = "wasi:config", source = "https://github.com/WebAssembly/wasi-config/archive/v0.2.0-draft.tar.gz" },
    { target = "wasi:blobstore", source = "git+https://github.com/WebAssembly/wasi-blobstore.git" },
    { target = "wasi:messaging", source = "git+ssh://github.com/WebAssembly/wasi-messaging.git" },
]

Configuration for registry.pull can also be specified as a TOML array of tables, as in the following equivalent wasmcloud.toml:

toml
name = "example-component"
language = "rust"
type = "component"

[component]
wasm_target = "wasm32-wasip2"

[[registry.pull.sources]]
target = "wasmcloud:bus"
source = "oci://ghcr.io/wasmcloud/targets"

[[registry.pull.sources]]
target = "test-components:testing"
source = "file://extra-wit/pingpong.wit"

[[registry.pull.sources]]
target = "wasi:config"
source = "https://github.com/WebAssembly/wasi-config/archive/v0.2.0-draft.tar.gz"

[[registry.pull.sources]]
target = "wasi:blobstore"
source = "git+https://github.com/WebAssembly/wasi-blobstore.git"

[[registry.pull.sources]]
target = "wasi:messaging"
source = "git+ssh://github.com/WebAssembly/wasi-messaging.git"

The two above configurations have an identical effect.

The target used for an override can be at multiple levels:

  • Namespace (ex. wasi)
  • Package (ex. wasi:config)

For advanced use cases, overrides can also be specified with versions like so:

toml
[[registry.pull.sources]]
target = "wasi:messaging@0.2.1-draft"
source = "git+ssh://github.com/WebAssembly/wasi-messaging.git"

Overrides config (local files only) - [overrides]

deprecated

The [overrides] section differs from [registry].pull in that it only intended for local file based overrides. The [registry].pull supports overriding OCI registries, files, and other sources for WIT packages.

While projects that use [overrides] will continue to work, consider migrating to use [registry].pull.

Overrides are key-value pairs that can be used to override locations of wit dependencies. The key name should match the package reference without a version (e.g. wasi:http).

For example, if you have a dependency called my:local-dep@0.1.0 that is located in another directory, you can tell wash how to find it with the following overrides section:

toml
[overrides]
"my:local-dep" = { path = "../path/to/my/local/dep" }

It can also be used to override a version requirement for a package, but this is a highly advanced use case and should be used with caution.

toml
[overrides]
"my:local-dep" = { version = "^0.1.0" }

Dev Overrides Config (Imports and Exports) - [[dev.overrides.imports]] or [[dev.overrides.exports]]

Dev overrides enable users to override the wash dev process defaults when satisfying a capability requirement. For example, wash dev automatically satisfies a key-value store requirement with the NATS-KV provider, but a dev override could enable a user to use the Redis key-value provider in a dev loop.

Dev overrides can be useful for specifying third-party providers as well as providers for custom interfaces that are not well-known to the wash dev process.

SettingTypeDescription
interface_specstringInterface specification (e.g., "wasi:keyvalue@0.2.0-draft")
image_refstringOCI image reference (e.g., "ghcr.io/wasmcloud/keyvalue-redis:0.28.2")
configobjectConfiguration (e.g., { values = { url = "redis://127.0.0.1:6379" } })
secretsobjectSecrets that should be provided to the entity
link_namestringLink name that should be used to reference the component. This is only required when there are multiple conflicting overrides (i.e. there is no "default")