Skip to content

SDK for writing wasmCloud components in Go.

License

Notifications You must be signed in to change notification settings

wasmCloud/component-sdk-go

Repository files navigation

Go Component SDK

Go Reference

The Go Component SDK provides a set of packages to simplify the development of WebAssembly components targeting the wasmCloud host runtime.

Writing a wasmCloud Capability Provider? Check out the Go Provider SDK.

Setup

Requires tinygo 0.33 or above.

Import go.wasmcloud.dev/component in your Go module.

go get go.wasmcloud.dev/[email protected]

Import the SDK WIT. In wit/deps.toml:

wasmcloud-component = "https://github.com/wasmCloud/component-sdk-go/archive/v0.0.5.tar.gz"

Run wit-deps to update your wit dependencies.

And in your world definition:


include wasmcloud:component-go/[email protected];

Adapters

net/wasihttp

The wasihttp package provides an implementation of http.Handler backed by wasi:http, as well as a http.RoundTripper backed by wasi:http.

http.Handler

wasihttp.Handle registers an http.Handler to be served at a given path, converting wasi:http requests/responses into standard http.Request and http.ResponseWriter objects.

package main

import (
	"net/http"
	"go.wasmcloud.dev/component/net/wasihttp"
)

func httpServe(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Hello, world!"))
}

func init() {
	// request will be fulfilled via wasi:http/incoming-handler
	wasihttp.HandleFunc(httpServe)
}

http.RoundTripper

package main

import (
	"net/http"
	"go.wasmcloud.dev/component/net/wasihttp"
)

var (
	wasiTransport = &wasihttp.Transport{}
	httpClient    = &http.Client{Transport: wasiTransport}
)

func httpClient() {
	// request will be fulfilled via wasi:http/outgoing-handler
	httpClient.Get("http://example.com")
}

log/wasilog

The wasilog package provides an implementation of slog.Handler backed by wasi:logging.

Sample usage:

package main

import (
	"log/slog"
	"go.wasmcloud.dev/component/log/wasilog"
)

func wasilog() {
	logger := slog.New(wasilog.DefaultOptions().NewHandler())

	logger.Info("Hello")
	logger.Info("Hello", "planet", "Earth")
	logger.Info("Hello", slog.String("planet", "Earth"))
}

See wasilog.Options for log level & other configuration options.

Community

Similar projects: