The Go implementation of the runtime library can be found in water-go. We now also support building WATM in Go, please refer to watm for examples and helper libraries interfacing Pluggable Transports-like interfaces. Official Go compiler is currently not supported until further notice.
If you quoted or used our work in your own project/paper/research, please cite our paper Just add WATER: WebAssembly-based Circumvention Transports, which is published in the proceedings of Free and Open Communications on the Internet (FOCI) in 2024 issue 1, pages 22-28.
BibTeX
@inproceedings{water-foci24,
author = {Erik Chi and Gaukas Wang and J. Alex Halderman and Eric Wustrow and Jack Wampler},
title = {Just add {WATER}: {WebAssembly}-based Circumvention Transports},
booktitle = {Free and Open Communications on the Internet},
publisher = {},
year = {2024},
url = {https://www.petsymposium.org/foci/2024/foci-2024-0003.pdf},
}
Update: our paper has been accepted by FOCI and presented at FOCI 2024!
Empty your mind, be formless, shapeless, like water. If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot, it becomes the teapot. Now, water can flow or it can crash. Be water, my friend.
-- Bruce Lee
The repo contains 2 main components:
- A Rust crate
water
runtime library used to interact with.wasm
WebAssembly Transport Modules(WATM). - A Rust crate
watm_v0
for the v0 WATM-development where developers can easily create their own.wasm
(the general version ofwatm
is still under development).
Also include examples for demonstration of usage:
- ⭐ A standalone
cli
tool which is compatible with bothv0
andv1_preview
, and can run all different roles with all of our example WATM binaries. - A few examples WATM implementations with
water_wasm
crate, see water-rs/tree/main/examples/water_bins. - Examples of using the above WATM examples with our
water
library, see tests for usage.
# runs ALL tests
cargo test --workspace --verbose
# run tests for a single crate
cargo test -p <crate_name> --verbose
# run a single test (or test matching name prefix) in a single crate
cargo test -p <crate_name> --verbose -- <test_name>