About
WasmFX started as a subsidiary project of the UKRI funded project effect handler oriented programming (EHOP) (MR/T043830/1), which is led by Sam Lindley at The University of Edinburgh, United Kingdom. Nowadays, WasmFX is a standalone project graciously sponsored by the EHOP project between February 2021 - January 2025.
Resources
WasmFX is an open source project being developed in the public domain.
- WasmFX typed continuations core extensions document.
- WasmFX typed continuations design explainer document.
- Wasm reference interpreter extended with the typed continuation proposal.
- WasmFX typed continuations implementation in wasm-tools and wasmtime.
- Follow the WasmFX Twitter account to stay up-to-date.
- The WebAssembly Stack Switching subgroup.
- The effect handler oriented programming project website.
Research papers
WasmFX is an active research project. Thus far, we have published the following papers.
- Continuing WebAssembly with Effect Handlers, Luna Phipps-Costin, Andreas Rossberg, Arjun Guha, Daan Leijen, Daniel Hillerström, KC Sivaramakrishnan, Matija Pretnar, Sam Lindley, Proc. ACM Program. Lang. 7(OOPSLA2), 2023.
Presentations
- Stack Switching Subgroup meeting, December 4, 2023 Status update on WasmFX implementation in Wasmtime
Submitting feedback and issues
We welcome community and developer feedback on all aspects of WasmFX, including the high-level design, binary format, developer experience, and browser implementations.
Please contribute your feedback or issues in the following forums:
- High level design feedback: WebAssembly/stack-switching
- Specification bugs / suggestions: wasmfx/specfx
- Test suite / reference interpreter issues: wasmfx/specfx
- Wasm-tools issues: wasmfx/wasmfx-tools
- Wasmtime bugs: wasmfx/wasmfxtime
- Website bugs: WasmFX/wasmfx.github.io
Contributing to WasmFX
We welcome external contributions to WasmFX. There are multiple ways to contribute to the project.
Design and discussions
A useful and fairly lightweight way to contribute is by joining the discussions about stack switching in WebAssembly on the official stack switching working group.
Relevant resources:
- Stack switching subgroup repository: WebAssembly/stack-switching.
- WebAssembly community Code of Ethics and Professional Conduct.
Reference interpreter implementation
The reference interpreter implementation of WasmFX is led by Daniel Hillerström and Andreas Rossberg. As of writing, the reference interpreter implements only the core of the typed continuations proposal, we have yet to implement the various extensions.
Relevant resources:
- Reference interpreter repository: wasmfx/specfx.
- The explainer document for typed continuations: wasmfx/specfx.
Wasm-tools and Wasmtime implementations
We are interested in Wasm engine implementations of WasmFX.
Currently, we are working on implementing WasmFX in wasm-tools and wasmtime — the former being a toolbox for manipulating Wasm modules and latter being a production-grade engine for Wasm. The implementation effort is led by Daniel Hillerström and Luna Phipps-Costin. There is a fair amount of engineering work yet to be done, as the typed continuations proposal depends on the typed function references and exception handling proposals, both of which are yet to be implemented in wasm-tools and wasmtime.
Relevant resources:
- Wasm-tools repository: wasmfx/wasmfx-tools.
- Wasmtime repository: wasmfx/wasmfxtime.
- Typed function references specification: WebAssembly/function-references.
- Exception handling specification: WebAssembly/exception-handling.
- Tail call specification: WebAssembly/tail-call.
Toolchains
We are interested in toolchains to compile programs that can take advantage of the WasmFX feature set of Wasm. Currently, Daniel Hillerström and Luna Phipps-Costin are building a toolchain that compiles effect handlers programs written in Links to Wasm via Jankscripten.
Relevant resources:
- Links repository: links-lang/links.
- Jankscripten repository: nurpl/jankscripten.