Hey all, I hope this is a good place to ask this question.
I want to learn more about the component model and the canonical ABI with a goal of eventually being able to contribute to some of the great WASM projects you all are working on, but I'm having some trouble grokking some of the basic concepts.
Presumably this is the canonical documentation for the CABI (https://github.com/WebAssembly/component-model/blob/main/design/mvp/CanonicalABI.md), but even just looking at the first few sections of these docs it seems there is a lot of important documentation I'm missing. For instance:
Most Canonical ABI definitions depend on some ambient information which is established by the
canon lift- orcanon lower-defined function that is being called
What actually are canon lift and canon lower? Are these supposed to be re-write rules, higher order functions, something else entirely? Also, what do "lifting" and "lowering" even mean at a high-level? I see there are other canon X definitions lower on in the document. Does canon by itself have any particular significance, or is it just a label for whatever kind of thing canon X is?
Am I starting off at the wrong place trying to understand this? It just feels like I'm missing a lot of context here. Perhaps there's some other documentation I should try to understand first?
Appreciate any help. :slight_smile:
In case you haven't found them already;
what do "lifting" and "lowering" even mean at a high-level?
TLDR: Transforming a high-level WIT function signature (with strings, records, enums, lists, options, results, resources, etc..) into a low-level Core WASM signature comprised of only i32, i64, f32 & f64.
Last updated: Dec 06 2025 at 05:03 UTC