The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Initial support for Component Model async types
stream
,future
, anderror-context
. wasm-tools
is now vendored as a WebAssembly module, executed using Wazero. This allows packagewit
andwit-bindgen-go
to run on any supported platform without needing to separately installwasm-tools
.
- Breaking: generated
*.wasm.go
files will now have correct WIT kebab-case base name. Interfaces or worlds with-
in their name will require removal of the previous*.wasm.go
files. - Dropped support for TinyGo v0.32.0.
v0.5.0 — 2024-12-14
- Breaking: package
cm
is now a separate module. This change was made in order to minimize the runtime dependencies of programs that depend on packagecm
but not the rest of the packages in this module. To update your code that depends on packagecm
, rungo get -u go.bytecodealliance.org/...
.
- #264: fix lowering for imported functions that return named
bool
types.
v0.4.1 — 2024-12-09
wit-bindgen-go wit
now accepts an--interface
argument in the form ofmonotonic-clock
,wasi:clocks/monotonic-clock
, orwasi:clocks/[email protected]
. This filters the serialized WIT to a specific interface and the other interface(s) it references. This can be used to generate focused WIT with a minimal set of dependencies, and can be combined with the--world
argument to filter serialized WIT to the intersection of a specific world and interface.
- Breaking: package
wit
no longer interprets-
to read from stdin when loading JSON or WIT usingwit.LoadJSON
orwit.LoadWIT
. Usewit.DecodeJSON
orwit.DecodeWIT
to read JSON or WIT from anio.Reader
. - Breaking:
wit.ParseWIT
has been removed. Usewit.DecodeWIT(bytes.NewReader(b))
instead.
- #240: correctly handle cyclical data structures when generating variant lowering code.
v0.4.0 — 2024-11-05
This module has been renamed. Going forward, please use go.bytecodealliance.org
instead of github.com/bytecodealliance/wasm-tools-go
.
v0.3.1 — 2024-11-01
wit-bindgen-go
now accepts arguments that control the level of logging output on stderr. Verbose mode (-v
or--verbose
) will print informational log lines, warnings, and errors. Debug mode (-vv
or--debug
) will emit finer-grained debugging information. By default,wit-bindgen-go
will print warnings or errors.- New method
(cm.Result).Result() (ok OK, err Err, isErr bool)
added to streamline common patterns usingresult
types. It has a value receiver, allowing it to be chained off a function call that returns aResult
, eliminating the need to declare a temporary variable. For example:stream, err, isErr := stream.BlockingRead(n)
- #215: generate variant accessor methods with the correct scope for Go names.
- @vados-cosmonic: #212 and #214 — verbose logging controls in
wit-bindgen-go
.
v0.3.0 — 2024-10-11
- Go type aliases are now generated for each WIT type alias (
type foo = bar
). Deep chains of type aliases (type b = a; type c = b;
) are fully supported. Generated documentation now reflects whether a type is an alias. Fixes #204. go:wasmimport
andgo:wasmexport
functions are now generated in a separate.wasm.go
file. This helps enable testing or use of generated packages outside of WebAssembly.wit-bindgen-go generate
now generates a WIT file for each WIT world in its corresponding Go package directory. For example thewasi:http/proxy
world would generatewasi/http/proxy/proxy.wit
.wit-bindgen-go wit
now accepts a--world
argument in the form ofimports
,wasi:clocks/imports
, orwasi:clocks/[email protected]
. This filters the serialized WIT to a specific world and interfaces it references. This can be used to generate focused WIT for a specific world with a minimal set of dependencies.
- Method
wit.(*Package).WIT()
now interprets the non-empty stringname
argument as signal to render in single-file, multi-package braced form. wit.(*Resolve).WIT()
andwit.(*Package).WIT()
now accept a*wit.World
as context to filter serialized WIT to a specific world.- Packages are now sorted topologically by dependency in generated WIT files. For example,
wasi:cli
would be followed by its dependencies likewasi:io
,wasi:filesystem
, orwasi:random
.
v0.2.4 — 2024-10-06
- Generated variant shape types (
...Shape
) now includestructs.HostLayout
.
v0.2.3 — 2024-10-05
wit-bindgen-go generate
now accepts a remote registry reference to pull down a WIT package and generate the Go code. Example:wit-bindgen-go generate ghcr.io/webassembly/wasi/http:0.2.0
.
cm.List
now stores list length as auintptr
, permitted by the Go wasm types proposal. It was previously auint
, which was removed from the list of permitted types. There should be no change in the memory layout in TinyGoGOARCH=wasm
or GoGOARCH=wasm32
using 32-bit pointers.- The helper functions
cm.NewList
,cm.LiftList
, andcm.LiftString
now accept any integer type forlen
, defined ascm.AnyInteger
. cm.Option[T].Value()
method now value receiver (not pointer receiver), so it can be chained.
v0.2.2 — 2024-10-03
- All
struct
types in packagecm
now includestructs.HostLayout
on Go 1.23 or later. - Added type constraints
AnyList
,AnyResult
, andAnyVariant
in packagecm
to constrain generic functions accepting any of those types. - Variant types now implement
fmt.Stringer
, with aString
method. Breaking: variant cases namedstring
map toString_
in Go. cm.Option[T]
types now have aValue()
convenience method that returns the zero value forT
if the option represents the none case. For example, this simplifies getting an empty string or slice fromoption<string>
oroption<list<T>>
, respectively.- Added a release workflow to publish tagged releases to GitHub.
wit-bindgen-go --version
now displays the version without empty()
.
v0.2.1 — 2024-09-26
- Generated structs and structs in package
cm
now include aHostLayout
field in order to conform with the relaxed types proposal forGOARCH=wasm32
. Thecm.HostLayout
type is an alias forstructs.HostLayout
on Go 1.23 or later, and a polyfill for Go 1.22 or earlier. - #163: added
cm.F32ToU64()
andcm.U64ToF32()
for flatteningf32
andu64
types in the Canonical ABI. - Test data from bytecodealliance/wit-bindgen/tests/codegen.
- #159: correctly escape all WIT keywords, including when used in package names.
- #160: fixed the use of Go reserved keywords in function returns as result types.
- #161: correctly handle
constructor
as a WIT keyword in wit. - #165: fixed use of imported types in exported functions.
- #167: fixed a logic flaw in
TestHasBorrow
. - #170: resolve implied names for interface imports and exports in a world.
- #175: generated correct symbol names for imported and exported functions in worlds (
$root
) or interfaces declared inline in worlds.
v0.2.0 — 2024-09-05
This project has moved! wasm-tools-go
is now an official Bytecode Alliance project.
Going forward, please update your Go imports from github.com/ydnar/wasm-tools-go
to github.com/bytecodealliance/wasm-tools-go
. Thanks to @ricochet, @mossaka, @lxfontes, and others for their help making this possible.
- Added support for
@deprecated
directive implemented inwasm-tools#1687
. - Removed support for
@since
feature gating implemented inwasm-tools#1741
.
- #151: backport support for JSON generated by
wasm-tools
prior to v1.209.0, which added@since
and@unstable
feature gates.
v0.1.5 — 2024-08-23
wit-bindgen-go --version
now reports the module version and git revision of thewit-bindgen-go
command.
- Omit the default
//go:build !wasip1
build tags from generated Go files. This enableswit-bindgen-go
to targetGOOS=wasip1
(fixes #147). - Package
wit
now serializes multi-package WIT files with an un-nested “root” package. See WebAssembly/component-model#380 and bytecodealliance/wasm-tools#1700.
v0.1.4 — 2024-07-16
wit-bindgen-go generate
now accepts a--cm
option to specify the Go import path to packagecm
. Used for custom or internal implementations of packagecm
. Defaults togithub.com/bytecodealliance/wasm-tools-go/cm
.Tuple9
...Tuple16
types in packagecm
to align with component-model#373. Tuples with 9 to 16 types will no longer generate inlinestruct
types.- Documentation for Canonical ABI lift and lower helper functions in package
cm
.
- Removed outdated documentation in design.
v0.1.3 — 2024-07-08
- #128: implemented
String
method forenum
types (@rajatjindal).
- #130: anonymous
tuple
types now correctly have exported Go struct fields. - #129: correctly handle zero-length
tuple
andrecord
types, represented asstruct{}
.
v0.1.2 — 2024-07-05
- Canonical ABI lifting code for
flags
andvariant
types. - Lifting code for
result
andvariant
will now panic if caller passes an invalid case. - Additional test coverage for
variant
andflags
cases.
- Package
cm
: Removed unused functionsReinterpret2
,LowerResult
,LowerBool
,BoolToU64
,S64ToF64
. - Package
cm
: Removed unused experimentalflags
implementation behind a build tag.
- Lifting code for
result
with no error type will now correctly setIsErr
.
v0.1.1 — 2024-07-04
This release changes the memory layout of variant
and result
types to permit passing these types on the stack safely. This required breaking changes to package cm
, detailed below, as well as slightly more verbose type signatures for WIT functions that return a typed result
.
- Type
cm.Result
is nowcm.BoolResult
. - Types
cm.OKResult
andcm.ErrResult
have been removed, replaced with a more generalizedcm.Result[Shape, OK, Err]
type.
- WIT labels with uppercase acronyms or initialisms are now preserved in Go form. For example, the WIT name
time-EOD
will result in the Go nameTimeEOD
. OK
is now a predefined initialism. For example, the WIT namestate-ok
would previously translate into the Go nameStateOk
instead of the idiomaticStateOK
.
- #95:
wit-bindgen-go
now correctly generates packeddata
shape types forvariant
andresult
types. - Fixed swapped
Shape
andAlign
type parameters in the functionscm.New
andcm.Case
for manipulatingvariant
types. - Variant validation now correctly reports
variant
instead ofresult
in panic messages.
v0.1.0 — 2024-07-04
Initial version, supporting TinyGo + WASI 0.2 (WASI Preview 2).
- #95:
variant
andresult
types without fully-packeddata
shape types will not correctly represent all associated types. - #111:
flags
types with > 32 labels are not correctly supported. See component-model#370 and wasm-tools#1635 for more information. - #118: Canonial ABI post-return functions to clean up allocations are not currently generated.
- Because Go does not have a native tagged union type, pointers represented in
variant
andresult
types may not be visible to the garbage collector and may be freed while still in use. - Support for mainline Go.