🚀 WasmEdge 0.10.0 is released!

Jun 21, 2022 • 4 minutes to read

In version 0.10.0, WasmEdge provides a brand new plug-in mechanism to make native extensions easier to develop and install, improves compatibility with LLVM 14, and supports new WebAssembly specs, proposals, and features.

  • New plug-in system for native host functions
  • Many enhancements to the WasmEdge socket API (e.g., microservices and web service clients in WasmEdge)
  • Support for new WebAssembly proposals and specs
  • WasmEdge C API enhancements
  • Other features and bug fixes

New plug-in system for native Host Functions

The host funtion is the bridge that allows WebAssembly programs to access functionalities and features provided by native libraries. It is how we extend a WebAssembly runtime with more features and capabilities. For example, the WASI standard itself is to make libc system calls available to WebAssembly apps through host functions.

The WasmEdge's TensorFlow, NN, Socket, and Image processing extensions are all implemented in host functions. Therefore, it is critical for a WebAssembly runtime to support developer-friendly host functions.

The new WasmEdge plug-in system aims to simplify host function development and management. For developers, the plug-in system makes it easy to create new WasmEdge extensions using a unified host function interface. Check out our guide on how to use WasmEdge's plug-in system to add host functions in the WasmEdge Book. Give it a try.

C++ is the only programming language to write WasmEdge plug-ins for now. However, we are adding support for Rust and C soon.

For WasmEdge users, you can now enable or disable WasmEdge extensions by simply adding or removing files containing the host functions in a WasmEdge folder. The plug-in system makes it easy and safe for users to manage a large number of developer-contributed WasmEdge extensions in the future.

As an example, the WasmEdge team has implemented the wasmedge_process extension as a plug-in. Once installed, it allows WebAssembly programs to call operating system commands. Over the next several weeks, the team will port WasmEdge's existing extensions to the new plug-in format. You're also welcome to contribute your own host function-based extensions for WasmEdge.

Wasi-socket enhancements

WasmEdge has supported networking socket in WasmEdge 0.8.2. The WasmEdge networking sockets are non-blocking and high-performance. It is the only WebAssembly runtime that can run web services applications today. Many developers have tried to create and deploy WasmEdge-based web services or clients. In this release, we continue to improve WasmEdge socket API for developers.

  • Both IPV4 and IPV6 modes
  • UDP functions:send_to and resv_from
  • DNS name lookup
  • Checking socket options enum for valid value
  • Fixed: wasi-socket on MacOS
  • Fixed: error when calling poll_oneoff with the same fd twice and when calling fd_close on socket.
  • Zero-terminated string for ::getaddrinfo.

Going forward, we are going to provide a wasm-compatible Rust TLS implementation to support HTTPS and create a Tokio async runtime in WasmEdge.

C API enhancements

The C API is the basis for other language APIs for WasmEdge, such as the WasmEdge Rust API and WasmEdge Go API. This release improves the WasmEdge C API.

  • Merged the WasmEdge_ImportObjectContext into the WasmEdge_ModuleInstanceContext.
  • Used the pointer to WasmEdge_FunctionInstanceContext instead of the index in the FuncRef value type.
  • Moved the functions of WasmEdge_StoreContext to the WasmEdge_ModuleInstanceContext.
  • Updated the WasmEdge_VMContext APIs.

This new release also brings new C API and Go API docs. For developers who want to use the updated C and Go APIs, please refer to the WasmEdge Book.

Standard Wasm extensions

WasmEdge thrives to be fully compliant with WebAssembly standards, and supports all mandatory and optional WebAssembly specs. From release 0.10.0, WasmEdge provides support for the Tail Call and extended-const proposals.

Other new features and bug fixes

In addition to the above features, some features need to be taken care of.

  • LLVM 14 compatibility, which improves performance.
  • thread-safe in WasmEdge_VMContext, WasmEdge_ConfigureContext, WasmEdge_ModuleInstanceContext, and WasmEdge_StoreContext APIs.
  • Gas limit in the AOT mode allows applications to be precisely metered in WasmEdge.
  • New unit tests.

To learn more about the WasmEdge 0.10.0 release, check out our changelog (https://github.com/WasmEdge/WasmEdge/releases/tag/0.10.0)! Join us!

Finally, a big thanks to all our contributors!

apepkuss, dm4, q82419, cyw3, SAtacker, ibmibmibm, hydai, gusy1234, hangedfish, 0yi0, tpmccallum, MediosZ, hantmc, LFsWang, eat4toast, eee4017, situ2001, meoww-bot, juntao, mfordjody, joyaaa, sunnywa, DarumaDocker, spacewander, luckyJ-nj, mydreamer4134, malc0lm,kgpp34, wenchajun, laingke, cold-Elite, border1px, zhuyaguang, bbcfive, JooKS-me, KerneIErr, zswaaa, zhannicholas, O3OI, KcjinChen, FlyingOnion, swartz-k, Bevisy, deyuhua, zephoon, abhinandanudupa, chinzhiweiblank.

👉 Discord: https://discord.gg/5hPQ2H5fcg

👉 Mailing list: Send an email to WasmEdge@googlegroups.com

👉 Twitter: @realwasmedge

👉 Be a contributor: checkout the good-first-issue to start contributing!

ProductWasmEdgeWebAssemblyRustServerlesscloud computingSocketCNCF
A high-performance, extensible, and hardware optimized WebAssembly Virtual Machine for automotive, cloud, AI, and blockchain applications