{"id":42186425,"url":"https://github.com/jerbob92/wazero-emscripten-embind","last_synced_at":"2026-01-26T22:27:28.746Z","repository":{"id":189388444,"uuid":"680529695","full_name":"jerbob92/wazero-emscripten-embind","owner":"jerbob92","description":"Emscripten Embind implementation in Go using Wazero","archived":false,"fork":false,"pushed_at":"2024-07-08T21:46:52.000Z","size":28184,"stargazers_count":13,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-07-09T02:39:58.496Z","etag":null,"topics":["embind","emscripten","go","golang","wazero"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jerbob92.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-19T14:43:24.000Z","updated_at":"2024-07-08T21:46:48.000Z","dependencies_parsed_at":"2024-01-16T17:06:50.443Z","dependency_job_id":"bfb05d8d-2d65-445d-95fa-e7b1720694ed","html_url":"https://github.com/jerbob92/wazero-emscripten-embind","commit_stats":null,"previous_names":["jerbob92/wazero-emscripten-embind"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/jerbob92/wazero-emscripten-embind","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerbob92%2Fwazero-emscripten-embind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerbob92%2Fwazero-emscripten-embind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerbob92%2Fwazero-emscripten-embind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerbob92%2Fwazero-emscripten-embind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jerbob92","download_url":"https://codeload.github.com/jerbob92/wazero-emscripten-embind/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jerbob92%2Fwazero-emscripten-embind/sbom","scorecard":{"id":515300,"data":{"date":"2025-08-11","repo":{"name":"github.com/jerbob92/wazero-emscripten-embind","commit":"7121552a1acb4d0585be8c375668222e3249d64a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":-1,"reason":"Found no human activity in the last 15 changesets","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":1,"reason":"0 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/emscripten.yml:1","Warn: no topLevel permission defined: .github/workflows/go.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":7,"reason":"binaries present in source code","details":["Warn: binary detected: examples/classes/wasm/classes.wasm:1","Warn: binary detected: examples/enums-and-constants/wasm/enums_and_constants.wasm:1","Warn: binary detected: examples/hello-world/wasm/hello_world.wasm:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emscripten.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/jerbob92/wazero-emscripten-embind/emscripten.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/emscripten.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/jerbob92/wazero-emscripten-embind/emscripten.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/emscripten.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/jerbob92/wazero-emscripten-embind/emscripten.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/jerbob92/wazero-emscripten-embind/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/jerbob92/wazero-emscripten-embind/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/jerbob92/wazero-emscripten-embind/go.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/jerbob92/wazero-emscripten-embind/go.yml/main?enable=pin","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T01:39:07.860Z","repository_id":189388444,"created_at":"2025-08-20T01:39:07.860Z","updated_at":"2025-08-20T01:39:07.860Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28789737,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T21:49:50.245Z","status":"ssl_error","status_checked_at":"2026-01-26T21:48:29.455Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["embind","emscripten","go","golang","wazero"],"created_at":"2026-01-26T22:27:28.183Z","updated_at":"2026-01-26T22:27:28.736Z","avatar_url":"https://github.com/jerbob92.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wazero-emscripten-embind\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/jerbob92/wazero-emscripten-embind.svg)](https://pkg.go.dev/github.com/jerbob92/wazero-emscripten-embind)\n[![Build Status][build-status]][build-url]\n[![codecov](https://codecov.io/gh/jerbob92/wazero-emscripten-embind/graph/badge.svg?token=4SC2SOJNZK)](https://codecov.io/gh/jerbob92/wazero-emscripten-embind)\n\n[build-status]:https://github.com/jerbob92/wazero-emscripten-embind/workflows/Go/badge.svg\n[build-url]:https://github.com/jerbob92/wazero-emscripten-embind/actions\n\n:rocket: *Emscripten [Embind](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html) support for Go using [Wazero](https://github.com/tetratelabs/wazero)* :rocket:\n\n## Features\n\n* Support for almost all [Embind](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html) features\n* Code generator for all Embind bindings:\n    * [Functions](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#a-quick-example)\n    * [Classes](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#classes)\n    * [Enums](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#enums)\n    * [Constants](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#constants)\n* Typed data and function signatures in generated code where possible\n* Ability to call Go code from\n  Embind [using Emval](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#using-val-to-transliterate-javascript-to-c)\n* Communicate between guest and host without worrying about data encoding/decoding\n* Direct access to memory\n  through [memory views](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html#memory-views)\n* Tested with custom test C++ and standard tests from Emscripten\n\nBut not everything is supported:\n\n* ASYNCIFY: does not make a lot of sense in Go, might come later to allow Async C++ implementations to work\n* EM_ASM/EM_JS (and related methods): naturally, you can't run JS in Go/Wazero. Since Go is not an interpreted language,\n  I don't see much sense to add support for Go code in it, as that would require a Go interpreter.\n* Binding class method names to well-known symbols (which is something JS specific).\n\n## What does Embind do?\n\n[Embind](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html) allows developers to write C++\ncode and directly interact with that code from Javascript in the browser. It also allows to call Javascript methods\ndirectly from C++.\n\nThis is done by registering enums, functions, classes, arrays, objects, vectors and maps from C++. When the compiled\nWebAssembly initializes, it will register all those types in the host using host function calls.\nDue to these registrations, the host knows how to encode/decode values to communicate with the guest.\n\n## Wazero implementation\n\nThis implementation is trying to be a 1-on-1 implementation of the JS version in Emscripten so that the same codebase\ncan be used for both Web and WASI WebAssembly builds.\n\nThe difference between this implementation and the Emscripten implementation is that this implementation tries to be as\nstrict as possible during runtime regarding the types that are encoded/decoded, while in the Emscripten implementation\na lot is trusted to the browser WebAssembly VM to cast between types, something we can't do in Go.\n\n## Compiling with Emscripten to WebAssembly with Embind\n\nBe sure to read the [documentation](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/embind.html) to\nget to know how Embind works. The most basic version to compile something with Embind is:\n\n```shell\nemcc -sERROR_ON_UNDEFINED_SYMBOLS=0 -sEXPORTED_FUNCTIONS=\"_free,_malloc\" -g embind_example.cpp -o embind.wasm -lembind --no-entry\n```\n\nIt is very important to include `-lembind` to the command and export the functions `_free` and `__malloc`, if these\nfunctions are not available, this package won't work. The Embind Engine will notify you of missing exports.\n\n## Attaching the Embind Engine to the context\n\nThe Embind Engine allows itself to be attached to a context value so that it can be used in the Wazero runtime.\nThis is necessary to make the guest side register itself with the Engine to notify it of all the available Embind\nparts.\n\nAttaching it to the context is as simple as:\n```go\nctx := context.Background()\n// ... Setup Wazero ...\n\n// Create a new engine and attach it to the context.\nengine := embind.CreateEngine(embind.NewConfig())\nctx = engine.Attach(ctx)\n\n// InstantiateModule the module on the runtime\nr.InstantiateModule(ctx, compiledModule, moduleConfig)\n\n// Attach the generated code to the engine (if any)\ngenerated.Attach(engine)\n```\n\nHere is an example to set up a basic Wazero example with Embind integration:\n\u003cdetails\u003e\n  \u003csummary\u003emain.go\u003c/summary\u003e\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/jerbob92/wazero-emscripten-embind\"\n\t\"github.com/tetratelabs/wazero\"\n\t\"github.com/tetratelabs/wazero/imports/emscripten\"\n\t\"github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1\"\n)\n\n//go:embed wasm/embind.wasm\nvar wasm []byte\n\nfunc main() {\n\tctx := context.Background()\n\truntimeConfig := wazero.NewRuntimeConfig()\n\tr := wazero.NewRuntimeWithConfig(ctx, runtimeConfig)\n\tdefer r.Close(ctx)\n\n\tif _, err := wasi_snapshot_preview1.Instantiate(ctx, r); err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tcompiledModule, err := r.CompileModule(ctx, wasm)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tbuilder := r.NewHostModuleBuilder(\"env\")\n\n\temscriptenExporter, err := emscripten.NewFunctionExporterForModule(compiledModule)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\temscriptenExporter.ExportFunctions(builder)\n\n\tengine := embind.CreateEngine(embind.NewConfig())\n\n\tembindExporter := engine.NewFunctionExporterForModule(compiledModule)\n\terr = embindExporter.ExportFunctions(builder)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t_, err = builder.Instantiate(ctx)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tmoduleConfig := wazero.NewModuleConfig().\n\t\tWithStartFunctions(\"_initialize\").\n\t\tWithName(\"\")\n\n\tctx = engine.Attach(ctx)\n\t_, err = r.InstantiateModule(ctx, compiledModule, moduleConfig)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// If you have a generated package, you have to attach it to the engine to\n\t// register the generated values/types with the Engine.\n\terr = generated.Attach(engine)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n```\n\n\u003c/details\u003e\n\nYou can find more examples in the examples directory.\n\n## Code generator\n\nThis project includes a code generator that will automatically generate typed code based on a given WASM file that has\nEmbind instructions in it. You can generate the code like this:\n\nFirst create a file in a new package, let's call it `generated/generated.go` for now. Add the following to the file:\n\n```go\n//go:generate go run github.com/jerbob92/wazero-emscripten-embind/generator -wasm=../wasm/embind.wasm\npackage generated\n```\n\nWhere `../wasm/embind.wasm` is the path to the WASM file, relative to the file `generated.go`.\n\nYou can now run the command from the `generated` folder to make it generate the typed Go code:\n\n```shell\ngo generate\n```\n\nOr from the project root:\n\n```shell\ngo generate ./...\n```\n\nYou are allowed to put other things in this package, as long as they don't conflict with the filenames of Embind:\n\n* `classes.go`\n* `constants.go`\n* `engine.go`\n* `enums.go`\n* `functions.go`\n\nIn the examples directory you will find some full examples that show what the generated code looks like.\n\n## Using Embind/C++ from Go\n\nThe easiest way to call Embind from Go would be to use the generator, but it's also possible to do things directly using\nthe Engine, the generated code is basically a wrapper around these functions in the Engine.\n\nHere are a few examples:\n\n```go\n// Calling an exposed symbol (function) called returnRawData with a string argument.\nimageData, err := engine.CallPublicSymbol(ctx, \"returnRawData\", \"image\")\n\n// Creating a new instance of the class MyClass using the values 5 and 10 in the constructor.\nnewClassInstance, err := engine.CallPublicSymbol(ctx, \"MyClass\", 50, 10)\n\n// Call methods on the class.\nerr := newClassInstance.IncrementX(ctx)\n\n// Call setters and getters on the class.\nx, err := newClassInstance.GetX(ctx)\nerr := newClassInstance.SetX(ctx, 42)\n\n// Call static methods on the class\nresultString, err := engine.CallStaticClassMethod(ctx, \"MyClass\", \"getStringFromInstance\", newClassInstance)\n```\n\n## Using Go from Embind/C++\n\nThis package also allows you to use Go code directly from Embind\nusing [Emval](https://emscripten.org/docs/api_reference/val.h.html), in the same way that would work in JS, the only\ndifference is that in JS, the full global namespace is available, while in Go you specifically have to expose things to\nEmbind to be able to access them.\n\nYou can do the following things with this:\n\n* Call methods on structs\n* Set/Get properties on structs\n* Create new instances of structs\n* Share arbitrary data like strings and integers\n\nFor example, given the following Go code:\n\n```go\npackage main\n\nimport (\n\t\"log\"\n\n\t\"github.com/jerbob92/wazero-emscripten-embind\"\n\t\"github.com/tetratelabs/wazero\"\n)\n\ntype testStruct struct {\n\tProperty1 string `embind_arg:\"0\" embind_property:\"propone\"`\n\tProperty2 string `embind_property:\"proptwo\"`\n\tProperty3 string\n}\n\nfunc (ts *testStruct) Trigger() {\n\tlog.Printf(\"Triggering %s %s %s on testStruct\", ts.Property1, ts.Property2, ts.Property3)\n}\n\nfunc main() {\n\t// Initialize Wazero runtime and Embind engine ...\n\tengine.RegisterEmvalSymbol(\"testStruct\", \u0026testStruct{})\n}\n```\n\nYou can then do the following on the C++ side:\n\n```cpp\nval testStruct = val::global(\"testStruct\");\nval newStruct = testStruct.new_(\"valueInProperty1\");\nnewStruct.set(\"proptwo\", val(\"valueInProperty2\"));\nnewStruct.set(\"Property3\", val(\"valueInProperty3\"));\nnewStruct.call\u003cvoid\u003e(\"Trigger\");\n```\n\nA few things to note:\n\n* You can return structs and then also set/get properties and call methods on that\n* If your function is void in C++, you can return nothing or an error in Go\n* If your function has a return in C++, you can return something, or something and an error, where the error has to be\n  the second return\n* If your function returns an error, the whole call where the Emval call originated from will fail\n* You can use the `embind_arg` tag to tell the Engine which argument index should end up in which property in\n  case `.new_()` is used on the C++ side\n* Or you can implement the `embind.EmvalConstructor` interface on the struct to make your own constructor\n* You can use the `embind_property` tag to tell the Engine which property should be accessed when a set or get is done \n  in C++\n* You can implement the `embind.EmvalFunctionMapper` interface on the struct to map function calls on your struct based\n  on the arguments (and/or length) and name\n\n## Support Policy\n\nWe offer an API stability promise with semantic versioning. In other words, we promise to not break any exported\nfunction signature without incrementing the major version. New features and behaviors happen with a minor version\nincrement, e.g. 1.0.11 to 1.1.0. We also fix bugs or change internal details with a patch version, e.g. 1.0.0 to 1.0.1.\nUpgrades of the supported Emscripten version will cause a minor version update.\n\n### Go\n\nThis project will support the last 3 version of Go, this means that if the last version of Go is 1.21, our `go.mod`\nwill be set to Go 1.19, and our CI tests will be run on Go 1.19, 1.20 and 1.21. It won't mean that the library won't\nwork with older versions of Go, but it will tell you what to expect of the supported  Go versions. If we change the\nsupported Go versions, we will make that a minor version upgrade. This policy allows you to not be forced to the latest\nGo version for a pretty long time, but it still allows us to use new language features in a pretty reasonable\ntime-frame.\n\n### Emscripten\n\nThis package has been built against Emscripten version `3.1.44`. Since Emscripten compiles both the WASM and JS, they\ndon't have to think about compatibility between versions, which makes it difficult for us to maintain compatibility with\nmultiple Emscripten version if they change anything Embind related.\n\nThis package will try to keep compatibility between Emscripten versions where that is possible, that is also why you \nneed to provide the compiled module to the engine, using the compiled module we can validate the available exports and\nimports, if any of the import signatures will change we can use that to dynamically build host functions based on the\nfunction signature.\n\nIf it is not possible to maintain compatibility automatically, this package will add compatibility flags to the\nconfiguration that is passed to the initialization of the engine to keep the package working with different versions of\nEmscripten.\n\n## License\n\nThe MIT License (MIT)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjerbob92%2Fwazero-emscripten-embind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjerbob92%2Fwazero-emscripten-embind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjerbob92%2Fwazero-emscripten-embind/lists"}