Skip to content

Configure wago.json

wago.json combines sparse project runtime settings with plugin requirements:

json
{
  "$schema": "https://wago.sh/v1/schema.json",
  "settings": {
    "features": {
      "simd": true
    },
    "optimizations": {
      "inline-loop-callees": false
    },
    "runtime": {
      "parallel": "auto",
      "deferredBoundsChecking": true
    }
  },
  "plugins": {
    "github.com/wago-org/wasi": "^0.1.0"
  }
}

Add the schema URI for editor completion and typo detection. The draft-2020-12 schema rejects unknown fields.

Create a minimal project:

sh
wago init --run

Feature settings

settings.features enables or disables WebAssembly feature families. The runtime defaults to its supported Core 3 feature set; --core 2 selects the narrower Core 2 compatibility profile for commands that expose it.

Use individual settings when a project needs a narrower feature policy.

Optimization settings

json
{
  "settings": {
    "optimizations": {
      "inline": false
    }
  }
}

The names match CLI switches such as --no-inline. Architecture-specific optimizations may not exist on another target.

Runtime settings

settings.runtime.parallel accepts "auto" or a non-negative worker count encoded as a string.

  • "auto" uses adaptive work.
  • "1" forces serial function work.
  • A larger number sets a maximum.

deferredBoundsChecking controls whether Wago may omit explicit checks already proven redundant.

Plugins and lockfile state

plugins maps canonical Go module or package paths to semantic-version ranges. Exact direct and transitive sources, checksums, release fingerprints, definition digests, dependency edges, requested and granted Authorities, Contract bindings, and opaque plugin configuration belong in wago-lock.json.

Ranges support exact, comparator, caret, tilde, partial/x, hyphen, intersection, and || union forms. Relative aliases are invalid: use github.com/wago-org/wasi, not wago-org/wasi.

Commit both files. Keep plugin configuration out of settings; it belongs to the plugin's reviewed lock entry.

Publish metadata

When the manifest describes a publishable plugin, public metadata lives under a package object:

json
{
  "$schema": "https://wago.sh/v1/schema.json",
  "package": {
    "module": "github.com/acme/wago-observability",
    "version": "0.1.0",
    "name": "Wago Observability",
    "description": "Tracing and metrics for Wago runtimes.",
    "license": "Apache-2.0",
    "repository": "https://github.com/acme/wago-observability",
    "authors": [
      { "name": "Example Maintainer", "github": "example" }
    ]
  }
}

Provider definitions, Authorities, configuration schemas, and Contracts are not duplicated by hand in this file. Publishing obtains them from the module's explicit /register catalog and stores their canonical digests beside the release.

The committed module-root wago.providers.json is the immutable catalog snapshot. Generate it with wago plugin catalog, verify it in CI with wago plugin catalog --check, and commit it before creating the release tag. It uses https://wago.sh/v1/providers.schema.json.

See Publish a plugin for the complete workflow.

Released under the Apache 2.0 License.