jsvalue

Efficient conversions between JavaScript and Go for a WebAssembly environment with support for TinyGo.
Usage
Importing
import "github.com/tinywasm/jsvalue"
ToJS
Converts Go values to syscall/js.Value.
// Basic types
val := jsvalue.ToJS(123)
val := jsvalue.ToJS("hello")
// Complex types (slices, maps, structs)
data := map[string]any{"foo": 1, "bar": "baz"}
jsVal := jsvalue.ToJS(data)
ToGo
Converts syscall/js.Value to Go values, populating a pointer destination. this allows for zero-allocation conversions when reusing existing data structures.
// Integers (Zero allocation)
var n int
err := jsvalue.ToGo(jsVal, &n)
// Reuse map to minimize allocations
// (Allocates ~56B vs ~408B when creating new map)
data := make(map[string]any)
err := jsvalue.ToGo(jsObj, &data)
// Structs
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
var user User
err := jsvalue.ToGo(jsObj, &user)
Last updated: 2025-12-11 14:18:12
goos: js
goarch: wasm
pkg: github.com/tinywasm/jsvalue
BenchmarkToJS_Int 325238552 18.44 ns/op 0 B/op 0 allocs/op
BenchmarkToJS_String 3052036 2032 ns/op 8 B/op 1 allocs/op
BenchmarkToJS_Struct 816326 6634 ns/op 56 B/op 7 allocs/op
BenchmarkToGo_Int 378214886 15.89 ns/op 0 B/op 0 allocs/op
BenchmarkToGo_Struct 881052 6696 ns/op 56 B/op 7 allocs/op
BenchmarkToGo_Any_Int 35842251 159.6 ns/op 24 B/op 2 allocs/op
BenchmarkToGo_Any_Map 425230 15862 ns/op 408 B/op 9 allocs/op
BenchmarkToGo_Map_Reuse 542494 13395 ns/op 56 B/op 6 allocs/op
PASS
Last updated: 2025-12-11 13:57:12