Skip to content

Imports and artifacts

Supply application imports

go
inst, err := rt.Instantiate(ctx, mod, wago.WithImports(wago.Imports{
	"host.log": logFunc,
}))

Import keys use module.name. Wago checks each value against the signature declared by the module.

Use WithImports for a small application-specific bridge. Register a plugin when several modules or applications need the same namespace, configuration, and lifecycle.

Serialize compiled code

The low-level compiled form can be stored and loaded later:

go
compiled, err := wago.Compile(nil, wasmBytes)
if err != nil {
	return err
}

blob, err := compiled.MarshalBinary()
if err != nil {
	return err
}

loaded, err := wago.Load(blob)
if err != nil {
	return err
}

Attach it to a high-level runtime:

go
mod, err := rt.Module(loaded)

Serialized code is architecture- and format-specific. Retain the original Wasm and rebuild after incompatible Wago changes.

Close what you own

Close direct instances before the runtime:

go
if err := inst.Close(); err != nil {
	return err
}
if err := rt.Close(); err != nil {
	return err
}

Close is idempotent. Runtime close stops plugins and internal services, but direct instances remain caller-owned.

Does Module need Close?#

The high-level Module.Close currently has no work to perform. Keep instance and runtime ownership explicit; those are the resources with meaningful lifecycle.

Can I load raw Wasm with wago.Load?#

Yes. wago.Load accepts raw Wasm or Wago's compiled binary form. Use wago.IsCompiled when a cache needs to distinguish them before loading.

Next

Released under the Apache 2.0 License.