Skip to content

tinywasm/jsvalue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jsvalue

Project Badges

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)

Performance Results

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

About

Efficient conversions between JavaScript and Go for a WebAssebly environment with support for TinyGo

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors