# wadec
wadec is a decoder for WebAssembly modules, focusing on developer experience,
informative errors and other helpful diagnostics.
It can be used as a library or a command-line tool.
## Rationale
wadec aims to serve as an educational tool for those looking to understand the
Wasm binary format, or for developers debugging Wasm modules.
wadec does _not_ aim to be a highly-efficient decoder for
performance-critical tasks. For such use-cases, consider using a streaming
decoder.
## Status
This project is currently in early development stage of development. It passes
100% of the official suite for [version
2](https://webassembly.github.io/spec/versions/core/WebAssembly-2.0.pdf) of the
specification. (Support for version 3 is planned.)
The API is still unstable and subject to change.
## Usage
```
# a module that encodes an invalid Value Type marker byte (0xAA) in its
# Type section
$ hexdump -C type_section_invalid_valtype_marker.wasm
ERROR: failed decoding Type section
Caused by:
0: failed parsing vector element at position 0
1: failed decoding Parameters
2: failed parsing vector element at position 0
3: invalid ValType marker byte - expected one of 0x7F (Num(Int32)), 0x7E (Num(Int64)), 0x7D (Num(Float32)), 0x7C (Num(Float64)), 0x7B (Vec(V128)), 0x70 (Ref(Func)), 0x6F (Ref(Extern)); got 0xAA
DEBUG OUTPUT:
DecodeTypeSection(
DecodeVector(
ParseElement {
position: 0,
source: DecodeFuncTypeError::DecodeParameterTypes(
DecodeVector(
ParseElement {
position: 0,
source: DecodeValTypeError::InvalidMarkerByte(
InvalidValTypeMarkerError(
0xAA,
),
),
},
),
),
},
),
)
```
## Roadmap
- [ ] Support for [spec version 3](https://webassembly.github.io/spec/core/)
- [ ] Support for performing the [Validation phase](https://webassembly.github.io/spec/core/valid/index.html)
- [ ] Optional support for WebAssembly extensions
## License
wadec is licensed under the [Apache 2.0 license](LICENSE).